Czy jest jakaś różnica między wartością trybu 0777 a 777

51

Widziałem zmianę kodu w pracy, w której wartości trybu zostały zmienione z 777 na 0777, aby nfs setattr działał. Jaka jest różnica w 2 wartościach?

użytkownik1071840
źródło
Wystąpił ten sam problem podczas korzystania z wbudowanych funkcji php związanych z FS, takich jak mkdir(). 0777 vs 777
Niket Pathak

Odpowiedzi:

76

Jeśli przekazujesz je do chmod(program wiersza poleceń), nie ma różnicy. Ale w programie C lub podobnym 0777jest ósemkowy (trzy zestawy trzech 1 bitów, co zamierzamy), podczas gdy 777jest dziesiętny i ma całkiem inny wzorzec bitowy. ( chmodzinterpretuje każdy argument liczbowy jako ósemkowy, dlatego nie jest wymagane żadne początkowe zero).

0777 (ósemkowy) == binarny 0b 111 111 111    == uprawnienia rwxrwxrwx   (== dziesiętny 511)

777 (dziesiętny) == binarny 0b 1 100 001 001== uprawnienia sr----x--x(== ósemkowy 1411)

Alexis
źródło
14
Żeby było jasne - wartość przekazywana do chmodpolecenia jest zawsze interpretowana jako ósemkowa. Użycie chmod 888spowoduje błąd.
mattdm,
ale każda cyfra jest ósemkowa, a nie sama liczba.
Drake Clarris,
1
Ciąg cyfr ósemkowych jest liczbą ósemkową. chmodinterpretuje argument liczbowy jako ósemkowy, niezależnie od przedrostka. (Ale tak naprawdę sama liczba nie ma żadnej funkcji; same cyfry, a raczej bity.)
Alexis
Tak więc, w programie C, jeśli chcesz zdać 1777, musisz napisać 01777?
Faheem Mitha
1
@ Faheem, zgadza się. Oktal 1777jest napisany 01777w C. (Lub możesz napisać 1023, która jest ta sama liczba w systemie dziesiętnym. Ale nie :-)
Alexis
4

Pierwszy bit jest używany do lepkiego bitu http://en.wikipedia.org/wiki/Sticky_bit

Jeśli ustawisz uprawnienia za pomocą 4 cyfr, pierwsza ustawi lub usunie ten bit.

alfredocambera
źródło
3
Lepki bit nie jest pierwszym, ale trzecim. Pierwszy to bit suid, a drugi sid. Jeśli ustawisz uprawnienia przy użyciu trzech cyfr, brakująca pierwsza cyfra wpłynie również (tj. Usunie) te trzy bity.
jlliagre
Masz rację. Ergo, „odpowiedź udzielona przez Alexis jest załamująca się.
alfredocambera
2
@jlliagre Ze strony podręcznika chmod - „Zakłada się, że pominięte cyfry są wiodącymi zerami”. Pierwsza cyfra 4 to bit lepki. Na stronie podręcznika ponownie: „Pierwsza cyfra wybiera ustawiony identyfikator użytkownika (4) i zestaw identyfikatora grupy (2) oraz ograniczone usuwanie lub atrybuty lepkiej (1). Druga cyfra określa uprawnienia użytkownika, który jest właścicielem pliku: read ( 4), write (2) i execute (1); trzeci wybiera uprawnienia dla innych użytkowników w grupie plików o takich samych wartościach, a czwarty dla innych użytkowników spoza grupy plików, o tych samych wartościach. ".
Faheem Mitha
1
@FaheemMitha, pominięte cyfry Zakłada się, prowadząc w ten sposób zera się usunąć wyżej wymienione bitów. Wygląda na to, że mylicie bity i cyfry. Komentowałem pierwszy bit, a nie pierwszą cyfrę.
jlliagre
1
@jlliagre Ok, wystarczy.
Faheem Mitha
1

Interesująca odpowiedź to:

  • nie ma różnicy między 0700i 700, jak wyjaśniono w innych odpowiedziach
  • ale jest różnica między 00700i 0700(dla katalogów)

Przynajmniej tak jest w przypadku wersji chmod GNU coreutils, która jest domyślna w Linuksie.

Zobacz ten przykład:

$ ls -ld mydir
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 0710 mydir ; ls -ld mydir                   # surprise ahead -- s-bits remain:
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 00710 mydir ; ls -ld mydir                  # _now_ they're gone:
drwx--x--- 4 myuser mygroup 4096 Jul  8 09:27 mydir

Ma to na celu uniknięcie przypadkowego usunięcia bitów setuid / setgid dla katalogów. Aby uzyskać szczegółowe informacje, zobacz dokumentację chmod .

Alex O
źródło
-1

W systemie Linux dostępne są dwa typy uprawnień:

  1. Zezwolenie na plik
  2. Specjalne zezwolenie

W Uprawnienia plików ustawiamy uprawnienia do plików i folderów:

Uprawnienia są następujące:

  • przeczytaj (4)
  • pisać (2)
  • wykonać (1)

W specjalnym zezwoleniu są trzy rodzaje zezwoleń:

  • SUID (4)
  • SGID (2)
  • Sticky Bit (1)

W swoim pytaniu pytasz, czym jest różnica, więc nie ma żadnej różnicy między, chmod 777 and 0777ponieważ istnieje no any octal valuektóra wartość pokazana na (0) zero.

Purushottam Dike
źródło