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.