web-dev-qa-db-fra.com

Pourquoi 777 est-il attribué à chmod pour tout autoriser dans un fichier?

Lors d’une interview, on m’a demandé pourquoi 777 est affecté à l’utilisation de toutes les autorisations pour un fichier. Pourquoi pas 555? Il a dit qu'il y a une raison pour tout. Alors, quelle est la raison de 777? Pourquoi pas un autre numéro? Y a-t-il une signification dans ce nombre?

54
hellodear

Je vais essayer de traiter la raison sous-jacente du fait que correspond à 777 plutôt qu'à aaa ou 999.

N'oubliez pas que les autorisations sont au format suivant:

 u   g   o
rwx rwx rwx

où u = utilisateur, g = groupe, o = autre.

Maintenant, imaginez que vous représentiez chacun de ces groupes sous forme binaire. 1 est vrai, 0 est faux.

Si vous voulez donner un accès complet à tout le monde, vous devez attribuer les autorisations suivantes en binaire:

 u   g   o
rwx rwx rwx
111 111 111

Maintenant, si vous connaissez le binaire, vous réaliserez que lorsque vous convertissez 111 de binaire en décimal, vous obtenez 7.

Ainsi, vous pouvez représenter un accès complet sous la forme 777.

Note: Nous convertissons vraiment de binaire en octal. Voir l'édition ci-dessous.

Cela fonctionne également pour tous les autres modes d'accès.

Par exemple, nous pouvons facilement comprendre ce que signifie 555 en convertissant chaque 5 en binaire et en l'écrivant au format ci-dessus. 5 en binaire est 101, nous avons donc les autorisations suivantes:

 u   g   o
r-x r-x r-x
101 101 101
 5   5   5

De même, si nous voulons donner toutes les autorisations à l'utilisateur, mais ne permettre qu'à d'autres personnes de lire, nous pouvons trouver une représentation numérique.

 u   g   o
rwx r-- r--
111 100 100
 7   4   4

Nous savons maintenant que 111 en binaire est 7 en décimal et 100 en binaire est 4 en décimal. Ainsi, les autorisations seront 744.

Modifier:

Techniquement, comme le soulignent @ LưuVĩnhPhúc et @Braiam, nous effectuons la conversion de binaire en octal, comme décrit ci-dessous. Toutefois, les représentations décimales et octales des nombres <8 sont identiques. Ainsi, pour les nombres binaires de 3 chiffres ou moins, les représentations décimale et octale sont identiques.

Lorsqu'ils sont représentés sous forme de nombres octaux, plutôt que de se scinder en groupes de trois et d'effectuer une conversion binaire en décimale sur chaque groupe, vous pouvez regrouper les trois groupes en un seul nombre binaire et les convertir en octal.

Par exemple, voici quelques conversions binaires à octales:

0b111111111 == 0o777
0b101101101 == 0o555
0b111100100 == 0o744

Notez que je fais précéder "0b" et "0o" pour distinguer les nombres binaires et octaux.

Si vous voulez jouer avec cela, ouvrez un terminal, lancez python puis jouez avec les commandes suivantes:

oct(0b111111111)
bin(0o555)

N'oubliez pas de faire précéder les nombres de "0b" ou "0o" pour que l'ordinateur sache à quelle base vous êtes intéressé. (Si vous ne le faites pas, il utilisera la base 10.)

129
daviewales

Lecture de l'autorisation de fichier signifie 4, de l'écriture de l'autorisation de fichier à 2 et de l'exécution de l'autorisation de fichier à 1.

Donc, le total de ceci est 7.

Maintenant, ce qui est 777: 7 est d'abord pour le propriétaire du fichier, ce qui signifie que le propriétaire du fichier a les droits de lecture, de droit et d'exécution.

2nd 7 est pour le groupe auquel le fichier appartient, cela signifie que le groupe a également tous les droits de lecture, d’écriture et d’exécution.

Et 3rd 7 est pour les autres permission

Si vous donnez l'autorisation 555 au fichier, alors le fichier owner, group and others n'aura que readet executepermission not write permission car read permission signifie 4 et execute signifie 1 afin que le total obtienne 5

16
Prakash V Holkar

Je suis surpris de tant de réponses similaires qui manquent complètement la cible.

Après avoir déterminé les 3 classes nécessaires, lisez, écrivez et exécutez. Ils sont allés avec octal (3 bits) à minimiser l'espace requis pour gérer le système de fichiers.

4
Ununique

Pour une raison quelconque, les concepteurs UNIX ont décidé d'utiliser numéros OCTAL pour les autorisations de fichier. Comme vous le savez, la valeur maximale pour un nombre octal à un chiffre est de 7. Il s’est avéré qu’un chiffre octal pour l’accès des utilisateurs, un pour l’accès aux groupes et un pour l’accès mondial suffit pour presque tout. Le nombre octal de 3 chiffres maximum est 777, et il est logique que cela dénote "accès à tout le monde/tout".

3
DejanLekic

Aujourd'hui, nous savons tous qu'un octet est de 8 bits: cela fait l'objet d'un accord universel depuis des décennies. Mais ce n’était pas toujours le cas, et nix (qui a inspiré Linux à bien des égards) a été écrit à une époque où cela faisait encore l’objet d’un débat. En particulier, il devait être portable sur des systèmes qui utilisaient Octets 6 bits ou 8 bits. Certains de ceux qui l'ont écrit étaient d'un côté du débat, d'autres de l'autre.

Sur une note connexe, Base-2 (binaire) n’est pas une notation très pratique pour écrire des valeurs. De nos jours, la plupart des programmeurs écrivent une notation plus compacte utilisant Base-16 (hexadécimal). 16 est juste assez grand pour que vous puissiez compresser exactement quatre bits dans un chiffre hexadécimal: par exemple, "0000" en binaire est 0x0 en hexadécimal (que "0x" est un moyen courant de noter que vous êtes sur le point de écrire un nombre hexadécimal), tandis que "1111" est 0xF (ou 15 en décimal). Vous pouvez réellement écrire n'importe quelle combinaison possible de quatre bits en utilisant un seul chiffre hexadécimal, simplement en comptant en binaire, et en raison du fonctionnement de l'arithmétique positionnelle, vous pouvez l'empiler: deux chiffres hexadécimaux peuvent coder toute combinaison possible de huit bits, juste en comptant, et ainsi de suite. Donc, les gens de 8 bits ont adoré ça.

Les gens de 6 bits avaient leur propre façon de faire cela, mais au lieu d’utiliser Base-16, ils ont utilisé Base-8 (octal). Il a des avantages similaires à hexadécimal: vous pouvez stocker n’importe quelle position de trois bits dans un chiffre octal, et vous pouvez empiler des chiffres de la même manière. Donc, tout comme les personnes de 8 bits utilisaient deux chiffres hexadécimaux pour un octet, les personnes de 6 bits utilisaient deux chiffres octaux pour un octet. Vous ne voyez plus très souvent l'octal, mais il est généralement signalé par un zéro: par exemple, "111" est 07 en octal.

Maintenant, qu'est-ce que tout cela a à voir avec les autorisations Unix? En ce qui concerne Unix, vous pouvez faire trois choses avec un fichier: vous pouvez le lire, vous pouvez l'écrire ou l'exécuter en tant que programme. Si vous souhaitez restreindre cela avec des autorisations, vous avez besoin d'un peu pour chacune d'elles: activez-la pour les tâches que quelqu'un est autorisé à faire et laissez-la pour celles qu'elle n'est pas autorisée à faire. Comme il y a trois choses suivies, vous avez besoin de trois bits, et comme Unix les suit sur trois lignes (propriétaire, groupe et tout le monde), vous avez besoin d'un total de neuf bits.

À un moment donné de la ligne, quelqu'un - probablement dans le camp de 6 bits - a dit "Hé, nous pouvons utiliser des chiffres octaux pour cela". Et cela s’est avéré être une notation très pratique: trois chiffres en octal suffisent pour coder toutes les combinaisons possibles de champs de bits. Une fois qu'ils ont décidé de le faire, le destin de 777 (et des milliers) a été scellé, car ces chiffres seraient les mêmes quelle que soit leur organisation, mais l'ordre importait pour tous les autres numéros. Ils ont donc décidé de le faire.

Ils ont organisé les autorisations en champs de trois bits: lecture au début, écriture au milieu et exécution à la fin. Ensuite, ils ont organisé les champs eux-mêmes: le propriétaire au début, le groupe au milieu et les autres à la fin. ne fois cela fait, il ne restait plus qu'à compter pour attribuer le reste des nombres.

Parce que ce sont des champs de 3 bits, vous pouvez dire que chaque chiffre octal contrôle l'un des champs: le premier chiffre contrôle les autorisations du propriétaire, le second chiffre les autorisations du groupe et le troisième chiffre les autres autorisations. Ainsi, 777 (111 111 111) sont toutes les autorisations pour tout le monde, alors que 700 (111 000 000) sont toutes les autorisations uniquement pour le propriétaire. D'autres combinaisons sont également courantes: 666 (110 110 110) est en lecture/écriture pour tout le monde mais pas exécuter), tandis que 555 (101 101 101) est en lecture/exécution pour tout le monde mais pas en écriture, et 400 (100 000 000) en lecture seulement pour le propriétaire et pas d'accès pour quelqu'un d'autre.

Et c'est pourquoi 777 signifie toutes les autorisations. De nos jours, c'est probablement la raison la plus populaire pour laquelle les gens utilisent octal, bien qu'Unix et ses descendants en aient encore quelques vestiges. Par exemple, od ou Octal Dump est un moyen d'obtenir des sauvegardes binaires d'un fichier sous forme octale (il possède un cousin hexadécimal, appelé xxd, mais il n'est pas aussi connu et disponible partout). C'est aussi la raison pour laquelle vous devez faire attention aux zéros non significatifs dans certains langages de programmation, car ils pourraient penser que vous avez l'intention d'écrire des nombres en octal, alors que ce n'est pas vraiment votre intention.

2
The Spooniest