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

51

J'ai vu un code changer au travail, où les valeurs de mode ont été changées de 777 à 0777 pour que nfs setattr fonctionne. Quelle est la différence entre les 2 valeurs?

utilisateur1071840
la source
Je suis tombé sur le même problème lors de l’utilisation de fonctions PHP apparentées telles que mkdir(). 0777 vs 777
Niket Pathak

Réponses:

76

Si vous les transmettez à chmod(le programme en ligne de commande), il n'y a pas de différence. Mais dans un programme C ou similaire, 0777est octal (trois ensembles de trois 1 bits, ce qui est ce que vous souhaitez), tandis que 777est décimal, et c’est un motif binaire assez différent. ( chmodinterprétera n'importe quel argument numérique comme octal, aucun zéro n'est donc 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)

alexis
la source
14
Soyons clairs: la valeur que vous transmettez à la chmodcommande est toujours interprétée comme une valeur octale. Utiliser chmod 888donnera une erreur.
Mattdm
mais chaque chiffre est octal, pas le nombre entier lui-même.
Drake Clarris
1
Une chaîne de chiffres octaux est un nombre octal. chmodinterprète un argument numérique en octal, quel que soit le préfixe. (Mais en réalité, le nombre lui-même n'a pas de fonction; juste les chiffres, ou plutôt les bits.)
alexis
Donc, dans un programme C, si vous voulez réussir 1777, vous devez écrire 01777?
Faheem Mitha
1
@Faheem, c'est vrai. Octal 1777est écrit 01777en C. (Ou vous pourriez écrire 1023, qui est le même nombre en décimal. Mais ne le faites pas :-)
alexis
4

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.

Alfredo Cambera
la source
3
Le bit collant n'est pas le premier bit mais le troisième. Le premier est le bit suid et le second est le sgid. Si vous définissez des autorisations à l'aide de trois chiffres, le premier chiffre manquant affectera également (c'est-à-dire supprimera) ces trois bits.
Jlliagre
Tu as raison. Ergo, la "réponse fournie par alexis est
tentante
2
@jlliagre A partir de la page de manuel chmod - "Les chiffres omis sont considérés comme des zéros non significatifs.". En outre, le premier chiffre de 4 est le bit collant. De la page de manuel: "Le premier chiffre sélectionne les attributs d’ID utilisateur (4) et ID de groupe (2) et de suppression restreinte ou" sticky "(1). Le deuxième chiffre sélectionne les autorisations de l’utilisateur propriétaire du fichier: read ( 4), write (2), et execute (1); le troisième sélectionne les autorisations pour les autres utilisateurs du groupe de fichiers, avec les mêmes valeurs, et le quatrième pour les autres utilisateurs n'appartenant pas au groupe du fichier, avec les mêmes valeurs. ".
Faheem Mitha
1
@FaheemMitha, les chiffres omis sont supposés être des zéros en tête, ainsi les bits susmentionnés seront supprimés. En outre, vous semblez confondre les bits et les chiffres, je parlais du premier bit, pas du premier chiffre.
jlliagre
1
@ jlliagre Ok, assez bien.
Faheem Mitha
1

La réponse intéressante est:

  • il n'y a pas de différence entre 0700et 700, comme expliqué dans les autres réponses
  • mais il y a une différence entre 00700et 0700(pour les annuaires)

C'est du moins le cas pour la version chmod de GNU 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 permet d'éviter la suppression accidentelle de bits setuid / setgid pour les répertoires. Pour plus de détails, voir la documentation de chmod .

Alex O
la source
-1

Dans le système Linux, il existe deux types d'autorisations:

  1. Permission de fichier
  2. Permission spéciale

Dans l'autorisation de fichier, nous définissons l'autorisation sur les fichiers et les dossiers:

Les permissions sont:

  • lire (4)
  • écrire (2)
  • exécuter (1)

Sous autorisation spéciale, trois types d’autorisation sont:

  • SUID (4)
  • SGID (2)
  • Peu collant (1)

Dans votre question, vous demandez quelle est la différence, il n'y a donc aucune différence entre les deux chmod 777 and 0777parce qu'il y a la no any octal valuevaleur d'affichage de (0) zéro.

Digue Purushottam
la source