it-swarm-eu.dev

Proč použít `chmod 644` místo` chmod u = rw, go = r, ... `?

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.

39
l0b0

Používání osmičkových kódů má dvě výhody, na které nemyslím, ani jedna z nich není tak velká:

  1. Jsou kratší, snáze psatelné.
  2. Několik věcí jim rozumí, a pokud je běžně používáte, nebudete si škrábat hlavu (nebo běžet do dokumentace), když narazíte na jednu. Například v Perlu nebo C musíte použít oktál pro 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.

41
derobert

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.

18
Fiasco Labs

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
14
n0pe

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

6
Nils

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

3
Mikel

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.

2
0xC0000022L

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

0
Conor O'Neill

Pěkně se hodí k nastavení umask, které se obvykle uvádí v osmičkovém zápisu (v pam nebo fstab).

0
Nikodemus RIP

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.

0
Brigand