Pourquoi utiliser `chmod 644` au lieu de` chmod u = rw, go = r,… `?

38

Je travaille sur * nix depuis quelques années maintenant, et une des choses à laquelle je ne peux pas m'habituer est les autorisations octales dans le code. Y at - il une autre raison que la longueur de la ligne à préférer chmod 644 ...plus chmod u=rw,go=r ...?

PS: Je ne cherche pas d'explication sur les permissions octales. Je sais comment ils fonctionnent, et cela est bien expliqué dans le manuel. Je demande pourquoi octal semble être préféré à la forme plus lisible par l'homme.

l0b0
la source

Réponses:

40

L’utilisation des codes octaux a deux avantages auxquels je peux penser, et aucun d’eux n’est aussi énorme:

  1. Ils sont plus courts, plus faciles à taper.
  2. Certaines choses ne les comprennent que bien, et si vous les utilisez régulièrement, vous ne vous gratterez pas la tête (ou ne courrez pas vers la documentation) lorsque vous en rencontrez une. Par exemple, vous devez utiliser octal pour chmodPerl ou C.

Parfois, des utilitaires très simples ne gèrent pas les versions "conviviales"; en particulier dans les utilisateurs non-GNU.

De plus, certains utilitaires crachent octal. Par exemple, si vous essayez umaskde voir ce que votre umask actuel est, il le crachera en octal (bien que bash soit umask -Ssymbolique).

Donc, en bref, je dirais que la seule raison de les préférer est de taper moins de caractères, mais que même si vous choisissez de ne pas les utiliser, vous devez savoir comment ils mappent afin que vous puissiez trouver un code octal si vous exécutez dans l'une des choses qui ne fait que l'octal. Mais vous n'avez pas besoin de savoir immédiatement que 5 cartes à rx, vous devez seulement être capable de comprendre cela.

derobert
la source
1
Dire qu'en chmodPerl ou en C, il faut utiliser la représentation octale n'est pas vraiment un avantage, vu que la représentation existait déjà.
n0pe
@ MaxMackie: C'est un avantage pour vous de les utiliser. Je vais clarifier.
derobert
18

Je suppose que j'utilise octal depuis trop longtemps.

7 est rwx (faites n'importe quoi avec), 5 est rx (vous devez le lire pour l'exécuter), 6 est wr (tout fichier de données que vous devez modifier), 4 est r (nous vous laisserons regarder), et 0 est - (désolé, rien ici à voir). Et l'ordre, c'est moi, nous, tout le monde. Ce sont les combinaisons de base.

755 Je peux changer et l'exécuter, tout le monde peut l'exécuter.

644 Je peux le changer, tout le monde peut le lire.

444 Lecture seulement pour tout le monde, nous sommes à travers ici.

500 Je peux l'exécuter, je ne veux pas que ça change, tout le monde passe la main.

Pour moi, c'est court, au point. 9 caractères et une spécification de fichier et aller de l'avant.

Fiasco Labs
la source
Eh bien, octal (base-8), pas hex (base-16).
derobert
Oui, celui-là, le demi-hexagone. <sourire>
Fiasco Labs Le
Idem ici, je trouve l'octal plus facile à lire que la version texte ...
Brian Knoblauch
13

Je n'ai jamais vraiment apprécié la représentation octale, je suis toujours allé droit au but rwxr-xr-x notation , car cela me semble plus simple. Cependant, d'après ce que je comprends, la représentation octale existe pour nous permettre de nous souvenir plus facilement (je ne vois pas comment cela fonctionne).

Le seul autre avantage possible que je vois avec octal est le manque d'ambiguïté. Les 8 configurations de bits de permission différentes sont représentées par un seul numéro distinct, ce qui, j'en suis sûr, aide certaines personnes à placer accidentellement unew emplacement qu'elles n'auraient pas dû.

Malheureusement, j'ai mémorisé ce tableau:

#  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
n0pe
la source
8
Je l'ai appris en utilisant binaire pour chaque ensemble de 3. Ainsi, rw ------- serait (110) (000) (000), ce qui correspond à (6) (0) (0). rwxr-xr-x serait (111) (101) (101), donc (7) (5) (5).
Rob
4
La principale raison pour laquelle la représentation octal existe est parce que c'est la façon dont le système d'autorisation Unix d' origine a été programmé, de C. 4 chiffres octal (rappelez - vous les spéciales, comme 1777 pour /tmp, y compris le bit sticky) prend 12 bits, une taille pratique sur PDPs, en particulier le PDP-8. S'ils avaient opté pour l'hex, une application naturelle d'un jeu d'autorisations par chiffre hexadécimal aurait nécessité une machine à mot de 16 bits et plus, contrairement à tous les PDP. Cela aurait également gaspillé 3 bits ou exigé qu'ils inventent une utilisation de ces bits, ce qui aurait probablement compliqué les permanences Unix sans aucun avantage réel.
Warren Young
⁺¹ va à @Rob btw. En effet, après cela, le calcul d'un nombre réel à partir de la représentation binaire est une combinatoire de base, et vous n'avez même pas besoin de vous rappeler d'avoir "octal" car le nombre maximal (c'est-à-dire 111b) ne dépassera pas 7.
Hi-Angel
Ce tableau le rend très clair. C'est génial!!!
Little Roys
6

Je pense que la raison est encore - histoire. Au début, les valeurs octales étaient les seules. Les symboliques sont venus plus tard.

Je préfère les symboliques. Surtout si vous souhaitez modifier les valeurs existantes sans toucher aux autres portions.

Comme chmod -R u=rwx,g-w+X,o=-faire ça en octal ...

Nils
la source
3

Notez que les modes octaux peuvent supprimer les bits setuid et setgid sur certains systèmes.

Fedora 16:

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

(le 2est préservé)

FreeBSD 9:

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

(le 2est devenu un 0)

Si vous souhaitez modifier les autorisations d'un fichier ou d'un répertoire, il peut être préférable de spécifier uniquement les bits que vous souhaitez modifier (par exemple chmod o= dirou chmod o-rwx dirdans l'exemple ci-dessus).

Mikel
la source
2

L’histoire explique pourquoi les modes octaux existent , mais je pense que la fonctionnalité est la raison pour laquelle la forme mnémonique existe. Et tous les points concernant d’autres outils utilisant exclusivement des modes octaux sont parfaitement valables et je pense que vous devez les apprendre et les connaître. Néanmoins, je trouve que les administrateurs conservateurs ne voient pas le véritable utilité de la forme mnémonique.

La forme octale, surtout lorsqu'elle est utilisée de manière récursive, a tendance à forcer les administrateurs à faire des choses stupides. Ou plutôt, une négligence supplémentaire a pour résultat qu'il s'avère stupide. Chaque fois que vous rencontrez un dossier avec beaucoup de fichiers texte et le xbit défini, vous avez la preuve.

Pourquoi quelqu'un définirait-il le xbit comme ça? Parce qu'il est difficile de ne pas utiliser la forme mnémonique pour les modes. Considérez que vous souhaitez réinitialiser les autorisations sur /var/wwwet que vous n'exécutez aucun fichier CGI de style ancien; le xbit doit donc être supprimé. Cependant, le xbit sert un autre but sur les annuaires. Donc, vous finissez par faire quelque chose rootcomme:

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

Si, toutefois, vous utilisiez la forme mnémonique, vous pouvez lui donner une "recette":

chmod -R a=rwX /var/www

qui est la forme courte de chmod -R ugo=rwX /var/www(obtenir le même chemin, mais un chemin différent:chmod -R a-x,a+rwX /var/www .

Mais il y a une autre chose plus triviale qui ne peut pas être réalisée avec les modes octaux. Vous ne pouvez pas ajuster le userou groupouother masque individuellement avec la forme octale.

En bref: c'est comme comparer un scalpel (mnémonique) et un couteau tranchant (octal) ... mais vous devez tout de même connaître les bits en mode octal pour d'autres raisons :)

Je pense que la raison pour laquelle les modes octaux sont toujours préférés n’est pas davantage liée à la dactylographie mais plutôt aux administrateurs trop conservateurs. Et oui, en 2013, ces administrateurs trop conservateurs existent toujours et sont là pour rester pendant un certain temps.

0xC0000022L
la source
0

Lorsque vous devez modifier les autorisations des fichiers à tout moment , vous appréciez les 3 caractères. J'utilise souvent le +ou- versions pour modifier les autorisations.

Par exemple, je crée un nouveau script PHP, Python ou autre dans mon dossier apache. chmod a+xC’est tout ce que je fais pour pouvoir le lancer. Je l'ai lu comme "tout plus exécuter". Maintenant, je sais que ça va marcher, et je n'avais besoin que de 3 caractères.

D'autres fois, j'utilise 644 et 755 automatiquement. Je pense simplement que cela 644signifie un fichier, 755un script.

Brigand
la source
0

Cela correspond parfaitement aux paramètres umask, qui sont généralement donnés en écriture octale (en pamou fstab).

Nikodemus RIP
la source
0

Je suggère que l'une des raisons importantes est que la représentation octale correspond étroitement à ce que vous voyez ls -l(ou plutôt, elle le fait lorsque vous convertissez mentalement entre octal et binaire).

Conor O'Neill
la source