web-dev-qa-db-fra.com

Y a-t-il une différence entre la valeur de mode 0777 et 777

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?

55
user1071840

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)

82
alexis

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.

4
alfredocambera

La réponse intéressante est:

  • il n'y a pas de différence entre 0700 et 700, comme expliqué dans les autres réponses
  • mais il y a une différence entre 00700 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 .

1
Alex O