Dlaczego warto używać `chmod 644` zamiast` chmod u = rw, go = r,… `?


38

Pracuję nad * nix od kilku lat i jedną z rzeczy, do których po prostu nie mogę się przyzwyczaić, są ósemkowe uprawnienia w kodzie. Czy jest jakiś inny powód niż długość linii wolą chmod 644 ...ponad chmod u=rw,go=r ...?

PS: Nie szukam wyjaśnienia ósemkowych uprawnień. Wiem, jak działają, i dobrze to wyjaśniono w instrukcji. Pytam, dlaczego ósemka wydaje się być lepsza od bardziej czytelnej dla człowieka formy.

Odpowiedzi:


40

Używanie kodów ósemkowych ma dwie zalety, o których mogę myśleć, z których żadna nie jest tak ogromna:

  1. Są krótsze, łatwiejsze do pisania.
  2. Kilka rzeczy je rozumie, a jeśli rutynowo z nich korzystasz, nie będziesz drapał się po głowie (lub biegał do dokumentacji), kiedy się na nie natkniesz. Np. Musisz użyć ósemki dla chmodw Perlu lub C.

Czasami naprawdę proste narzędzia nie obsługują wersji „przyjaznych”; szczególnie w obszarach użytkownika innych niż GNU.

Ponadto niektóre narzędzia wypluwają ósemkowe. Na przykład, jeśli biegniesz, umaskaby zobaczyć, jaki jest twój aktualny umask, wypluje go w postaci ósemkowej (choć w bash, umask -Sma symboliczne znaczenie).

Krótko mówiąc, powiedziałbym, że jedynym powodem, aby preferować je, jest wpisywanie mniejszej liczby znaków, ale nawet jeśli zdecydujesz się ich nie używać, powinieneś wiedzieć, w jaki sposób są one mapowane, abyś mógł wymyślić kod ósemkowy po uruchomieniu w jedną z rzeczy, które tylko ósemkowe. Ale nie musisz od razu wiedzieć, że 5 map rx, wystarczy, że będziesz w stanie to rozgryźć.


1
Powiedzenie, że chmodw Perlu lub C wymaga użycia reprezentacji ósemkowej, nie jest tak naprawdę zaletą, ponieważ reprezentacja już istniała.
n0pe 12.12.11

@MaxMackie: Zaletą korzystania z nich. Wyjaśnię.
derobert,

18

Chyba zbyt długo używałem ósemki.

7 to rwx (zrób cokolwiek z tym), 5 to rx (musisz go przeczytać, aby go wykonać), 6 to wr (dowolny plik danych, który musisz zmodyfikować), 4 to r (pozwolimy ci na to spojrzeć), i 0 to - (przepraszam, nie ma tu nic do zobaczenia). A zamówienie to Ja, My, Wszyscy. To są podstawowe kombinacje.

755 Mogę to zmienić i uruchomić, każdy inny może to uruchomić.

644 Mogę to zmienić, każdy może to przeczytać.

444 Przeczytaj tylko dla wszystkich, już tu jesteśmy.

500 Mogę to wykonać, nie chcę, żeby to się zmieniło, wszyscy inni się rozłączają.

Dla mnie to krótko, do rzeczy. 9 znaków oraz specyfikacja pliku i przejdź dalej.


Cóż, ósemkowe (podstawa-8), a nie hex (podstawa-16).
derobert,

Tak, ten, pół heksa. <grin>
Fiasco Labs,

To samo tutaj, uważam, że ósemka jest łatwiejsza do odczytania niż wersja tekstowa ...
Brian Knoblauch,

13

Nigdy tak naprawdę nie podobało mi się przedstawienie ósemkowe, zawsze wybrałem prostą rwxr-xr-xnotację, ponieważ wydaje mi się to prostsze. Jednak z tego, co zbieram, istnieje reprezentacja ósemkowa, aby ułatwić nam zapamiętywanie (nie widzę, jak to działa).

Jedyną inną możliwą korzyścią, jaką widzę przy stole ósemkowym, jest brak dwuznaczności. 8 różnych konfiguracji bitów uprawnień jest reprezentowanych przez jeden odrębny numer, co z pewnością pomaga niektórym osobom przypadkowo ustalić miejsce, w wktórym nie powinny.

Niestety zapamiętałem ten stół:

#  r  w  x
0  0  0  0
1  0  0  1
2  0  1  0
3  0  1  1
4  1  0  0
5  1  0  1
6  1  1  0
7  1  1  1

8
Nauczyłem się go jako binarnego dla każdego zestawu 3. więc rw ------- będzie (110) (000) (000), co oznacza (6) (0) (0). rwxr-xr-x to (111) (101) (101), więc (7) (5) (5).
Rob

4
Podstawowym powodem ósemkowy reprezentacja istnieje dlatego, że jest jak oryginalny system pozwolenie Unix został zaprogramowany, od C 4 ósemkowe cyfry (pamiętaj szczególne te, podobnie jak 1777 dla /tmp, w tym sticky bit) zajmuje 12 bitów, wygodnym rozmiarze na PDP, zwłaszcza PDP-8. Gdyby zastosowali szesnastkę, naturalne odwzorowanie jednego zestawu uprawnień na cyfrę szesnastkową wymagałoby 16-bitowej maszyny słów, którą nie były wszystkie PDP. Zmarnowałby również 3 bity lub wymagałby wymyślenia zastosowania dla tych bitów, co prawdopodobnie skomplikowałoby permowe uniksowe zmiany bez rzeczywistej korzyści.
Warren Young,

Goes¹ przechodzi do @Rob btw. Rzeczywiście, po tym obliczenie rzeczywistej liczby z reprezentacji binarnej jest podstawową kombinatoryką i nie musisz nawet pamiętać o tym, że masz „ósemkę”, ponieważ maksymalna liczba (tj. 111b) nie przekroczy 7.
Hi-Angel

Ta tabela wyjaśnia to bardzo wyraźnie. To wspaniale!!!
Little Roys,

6

Myślę, że powodem jest znowu - historia. Początkowo jedyne były wartości ósemkowe. Te symboliczne przyszły później.

Wolę te symboliczne. Zwłaszcza jeśli chcesz zmienić istniejące wartości bez dotykania innych części.

Jak chmod -R u=rwx,g-w+X,o=-zrobić w ósemkowy ...


3

Zauważ, że tryby ósemkowe mogą usuwać bity setuid i setgid w niektórych systemach.

Fedora 16:

$ mkdir dir
$ chmod 2775 dir
$ stat -c %a dir
2775
$ chmod 770 dir
$ stat -c %a dir
2770

( 2jest zachowany)

FreeBSD 9:

$ mkdir dir
$ chmod 2775 dir
$ stat -f %Mp%Lp dir
2775
$ chmod 770 dir
$ stat -f %Mp%Lp dir
0770

( 2stał się a 0)

Jeśli chcesz zmienić uprawnienia do pliku lub katalogu, lepiej jest po prostu określić bity, które chcesz zmienić (np. chmod o= dirLub chmod o-rwx dirw powyższym przykładzie).


2

Historia wyjaśnia, dlaczego istnieją tryby ósemkowe , ale myślę, że funkcjonalność jest przyczyną istnienia formy mnemonicznej. Wszystkie punkty dotyczące innych narzędzi wykorzystujących wyłącznie tryby ósemkowe są całkowicie poprawne i myślę, że musisz się ich nauczyć i poznać. Niemniej jednak uważam, że konserwatywni administratorzy nie widzą prawdziwej użyteczności, która pochodzi z postaci mnemonicznej.

Forma ósemkowa, szczególnie używana rekurencyjnie, zmusza administratorów do robienia głupich rzeczy. A raczej dodane zaniedbanie powoduje, że okazuje się głupie. Ilekroć natkniesz się na jakiś folder z dużą ilością plików tekstowych i xustawionym bitem, masz dowód.

Dlaczego ktoś miałby tak ustawić x? Ponieważ trudno jest tego nie zrobić, chyba że użyjesz formy mnemonicznej dla trybów. Zastanów się, czy chcesz zresetować uprawnienia /var/wwwi nie uruchamiasz CGI w starym stylu, więc xbit powinien zostać usunięty. Jednak xbit służy do innego celu w katalogach. W rezultacie robisz coś roottakiego jak:

chmod -R 666 /var/www
find /var/www -type d -exec chmod 777 {} \;

Jeśli jednak używasz formy mnemonicznej, możesz nadać jej „przepis”:

chmod -R a=rwX /var/www

która jest krótką formą chmod -R ugo=rwX /var/www(osiągnięcie tej samej, ale innej ścieżki:) chmod -R a-x,a+rwX /var/www.

Ale jest jeszcze jedna rzecz, która jest bardziej trywialna, której nie można osiągnąć za pomocą trybów ósemkowych. Nie można wyregulować userlub grouplub othermaska indywidualnie z postaci ósemkowej.

W skrócie: to jak porównywanie skalpela (mnemonika) i ostrego noża kuchennego (ósemki) ... ale wciąż musisz znać bity trybu ósemkowego z innych powodów :)

Myślę, że powodem, dla którego nadal preferowane są tryby ósemkowe , jest nie pisanie w trybie mnemonicznym, ale zbyt konserwatywni administratorzy. I tak, dzwoniąc w 2013 roku, ci nadmiernie konserwatywni administratorzy nadal istnieją i są tu na jakiś czas.


0

Kiedy musisz cały czas modyfikować uprawnienia do plików , doceniasz 3 znaki. Często używam wersji +lub -do zmiany uprawnień.

Na przykład tworzę nowy PHP, Python lub inny skrypt w moim folderze apache. chmod a+xto wszystko co robię, więc można je uruchomić. Czytam to jako „wszystko plus wykonanie”. Teraz wiem, że to zadziała i potrzebowałem tylko 3 postaci.

Innym razem używam 644 i 755 automatycznie. Po prostu myślę o tym jako 644o pliku, 755o skrypcie.


0

Ładnie pasuje do ustawień umask, które są zwykle podawane w formie ósemkowej (w pamlub fstab).


0

Sugeruję, że jednym z ważnych powodów jest to, że reprezentacja ósemkowa jest ściśle zgodna z tym, co widzisz ls -l(a raczej dzieje się tak, gdy mentalnie konwertujesz liczbę ósemkową na binarną).

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.