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


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)


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.


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 .


-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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.