J'ai vu un changement de code au travail, où les valeurs de mode ont été changées de 777 à 0777 pour faire fonctionner nfs setattr. Quelle est la différence entre les 2 valeurs?
Si vous les passez à chmod
(le programme en ligne de commande), il n'y a pas de différence. Mais dans un programme C ou similaire, 0777
est octal (trois ensembles de trois bits 1, ce que vous voulez), tandis que 777
est décimal, et c'est un modèle de bits assez différent. (chmod
interprètera tout argument numérique comme octal, donc aucun zéro de tête n'est nécessaire.)
0777 (octal) == binaire 0b 111 111 111
== autorisations rwxrwxrwx
(== décimal 511
)
777 (décimal) == binaire 0b 1 100 001 001
== autorisations sr----x--x
(== octal 1411
)
Le premier bit est utilisé pour le bit collant http://en.wikipedia.org/wiki/Sticky_bit
Si vous définissez l'autorisation à l'aide de 4 chiffres, le premier définira ou supprimera ce bit.
La réponse intéressante est:
0700
et 700
, comme expliqué dans les autres réponses00700
et 0700
(pour les répertoires)C'est du moins le cas pour GNU version chmod de coreutils, qui est la version par défaut sous Linux.
Voir cet exemple:
$ 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
Ceci afin d'éviter la suppression accidentelle des bits setuid/setgid pour les répertoires. Pour plus de détails, consultez la documentation chmod .