Už několik let pracuji na * nix a jednou z věcí, na kterou si prostě nemůžu zvyknout, je osmičková oprávnění v kódu. Existuje ještě nějaký jiný důvod než délka řádku, aby se dalo přednost chmod 644 ...
přes chmod u=rw,go=r ...
?
PS: Nehledám vysvětlení osmičkových oprávnění. Vím, jak fungují, a je to dobře vysvětleno v manuálu. Ptám se, proč se osmičkový zdá být výhodnější než lidsky čitelnější forma.
Používání osmičkových kódů má dvě výhody, na které nemyslím, ani jedna z nich není tak velká:
chmod
.Opravdu jednoduché obslužné programy někdy nezvládnou „přátelské“ verze; zejména v uživatelských zemích bez GNU.
Dále, některé nástroje plivat osmičkové. Pokud například spustíte umask
, abyste zjistili, jaký je váš aktuální umask, vyplivne jej v osmičkové (i když v bash, umask -S
dělá symbolický).
Stručně řečeno, řekl bych, že jediným důvodem, proč je preferovat, je psát méně znaků, ale že i když se rozhodnete je nepoužívat, měli byste vědět, jak se mapují, abyste mohli zjistit osmičkový kód, pokud spustíte do jedné z věcí, která pouze osmičková. Ale nemusíte okamžitě vědět, že 5 map k rx
, stačí to jen zjistit.
Hádám, že používám osmič už příliš dlouho.
7 je rwx (udělejte s tím cokoli), 5 je rx (musíte si ho přečíst, abyste to provedli), 6 je wr (jakýkoli datový soubor, který potřebujete upravit), 4 je r (my se na to podíváme) a 0 je - (promiňte, nic zde neuvidíte). A objednávka je já, nás, všichni. Toto jsou základní kombinace.
755 Můžu to změnit a spustit, všichni ostatní to mohou spustit.
644 Mohu to změnit, všichni ostatní si to mohou přečíst.
444 Četli jsme jen pro všechny, jsme tady.
500 Můžu to provést, nechci, aby se to změnilo, všichni ostatní jsou pryč.
Pro mě je to do jisté míry krátké. 9 znaků a soubor specifikace a jít dál.
Nikdy jsem si užil osmičkové reprezentace, vždy jsem si šel pro zápis nahoru rwxr-xr-x
, Protože mi to připadá jednodušší. Z toho, co shromáždím, však osmičkové znázornění skutečně usnadňuje zapamatování (nevidím, jak to funguje).
Jedinou další možnou výhodou, kterou vidím osmičkové uvedení na stůl, je nedostatek dvojznačnosti. 8 různých konfigurací bitů oprávnění je reprezentováno jediným odlišným číslem, což určitě pomůže některým lidem náhodně umístit w
tam, kde by neměli.
Bohužel jsem si tuto tabulku zapamatoval:
# 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
Myslím, že důvod je znovu - historie. Zpočátku byly osmičkové hodnoty jediné. Symbolické přišly později.
Dávám přednost symbolickým. Obzvláště pokud chcete změnit stávající hodnoty, aniž byste se dotkli jiných částí.
Jako chmod -R u=rwx,g-w+X,o=-
to v osmičkové ...
Všimněte si, že osmičkové režimy mohou v některých systémech odstraňovat bity setuid a setgid.
Fedora 16:
$ mkdir dir
$ chmod 2775 dir
$ stat -c %a dir
2775
$ chmod 770 dir
$ stat -c %a dir
2770
(2
je zachováno)
FreeBSD 9:
$ mkdir dir
$ chmod 2775 dir
$ stat -f %Mp%Lp dir
2775
$ chmod 770 dir
$ stat -f %Mp%Lp dir
0770
(2
se stalo 0
)
Pokud chcete změnit oprávnění souboru nebo adresáře, může být lepší zadat pouze bity, které chcete změnit (např. chmod o= dir
nebo chmod o-rwx dir
ve výše uvedeném příkladu).
Historie vysvětluje, proč osmičkové režimy existují, ale myslím si, že funkčnost je důvodem, proč mnemotechnická forma existuje. A všechny body týkající se jiných nástrojů používajících výhradně osmičkové režimy jsou naprosto platné a myslím si, že je musíte je naučit a znát. Přesto zjistím, že konzervativní administrátoři nevidí skutečný nástroj, který pochází z mnemotechnické formy.
Oktální forma, zejména při rekurzivním použití, má tendenci nutit administrátory dělat hloupé věci. Nebo spíš nedbalost vede k hlouposti. Kdykoli narazíte na nějakou složku se spoustou textových souborů a bitovou sadu x
, máte důkaz.
Proč by někdo takto nastavil x
bit? Protože je obtížné, pokud nepoužíváte mnemotechnickou formu pro režimy. Zvažte, že chcete obnovit oprávnění u /var/www
a nespustíte žádné staré CGI ve starém stylu, takže bit x
by měl být odstraněn. Bit x
však slouží jiným adresářům. Takže nakonec uděláte něco (jako root
) jako:
chmod -R 666 /var/www
find /var/www -type d -exec chmod 777 {} \;
Pokud jste však používali mnemotechnický tvar, můžete mu dát „recept“:
chmod -R a=rwX /var/www
což je krátká forma chmod -R ugo=rwX /var/www
(dosažení stejné, ale odlišné cesty: chmod -R a-x,a+rwX /var/www
).
Ale je tu ještě jedna věc, která je triviální, čehož nelze dosáhnout pomocí osmi režimů. Masku user
nebo group
nebo other
nelze individuálně upravit pomocí osmičkového tvaru.
Zkrátka: je to jako srovnávat skalpel (mnemonic) a ostrý kuchyňský nůž (osmičkový) ... ale stále musíte znát kousky osmičkového režimu z jiných důvodů :)
Důvod, proč jsou osmičkové režimy stále přednostňovány, není podle mého názoru více zapisován do mnemotechnické formy, ale příliš konzervativní administrátoři. A ano, volání 2013, tito příliš konzervativní administrátoři stále existují a jsou tu, aby zůstali nějakou dobu.
Navrhuji, že jedním z důležitých důvodů je to, že osmičková reprezentace odpovídá tomu, co vidíte s ls -l
(nebo spíše to dělá, když mentálně převedete mezi osmičkovým a binárním).
Pěkně se hodí k nastavení umask, které se obvykle uvádí v osmičkovém zápisu (v pam
nebo fstab
).
Pokud musíte upravit oprávnění souborů po celou dob, oceníte 3 znaky. Většinu času používám +
nebo -
verze pro změnu oprávnění.
Například vytvořím nový PHP, Python nebo jiný skript ve složce Apache. chmod a+x
je vše, co dělám, aby se dalo spustit. Četl jsem to jako "vše plus vykonat". Teď vím, že to bude fungovat, a potřeboval jsem jen 3 znaky.
Jindy používám 644 a 755 automaticky. Jen si to myslím jako 644
znamená soubor, 755
znamená skript.