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?
permissions
user-management
Bonjour mon cher
la source
la source
Réponses:
Je vais essayer de parler de la raison sous-jacente pour laquelle il s’agit du 777, plutôt que de l’aa ou du 999.
N'oubliez pas que les autorisations sont au format suivant:
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:
Maintenant, si vous connaissez le binaire, vous réaliserez que lorsque vous convertissez
111
du binaire en décimal, vous obtenez7
.Ainsi, vous pouvez représenter un accès complet en tant que
777
.Note: Nous convertissons vraiment du binaire en octal. Voir l'édition ci-dessous.
Cela fonctionne également pour tous les autres modes d'accès.
Par exemple, nous pouvons facilement déterminer les
555
moyens en convertissant chacun5
en binaire et en l’écrivant au format ci-dessus.5
en binaire101
, nous avons donc les permissions suivantes:De même, si nous voulons donner toutes les autorisations à l'utilisateur, mais permettre uniquement à d'autres personnes de lire, nous pouvons trouver une représentation numérique.
Nous savons maintenant que
111
binaire est7
en décimal et que100
binaire est4
en décimal. Ainsi, les autorisations seront744
.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 en fait regrouper les trois groupes en un seul nombre binaire et les convertir en octal.
Par exemple, voici quelques conversions binaires en octales:
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
-vous puis jouez avec les commandes suivantes: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 prendra le chiffre de base 10.)
la source
7
est le même en décimal et octal - mais777
ne l’est pas. Lorsque vous parlez d'inverser des bits, cela fait une différence.777
parfois désignées par Dieu.Lecture des autorisations de fichier
4
, écriture des autorisations de fichier2
et exécution des autorisations de fichier1
.Donc, le total de ceci est
7
.Maintenant, ce qui est 777: le premier
7
concerne 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 possède également toutes les autorisations de lecture, d'écriture et d'exécution.Et 3ème
7
est pour la permission des autresSi vous donnez l’autorisation au fichier,
555
alors le fichierowner, group and others
n’a qu’uneread
et uneexecute
autorisationnot write
, car permission en lecture signifie 4 et exécution signifie 1, ainsi le total est obtenu.5
la source
En moins de mots que la réponse principale:
Chaque fichier dispose de 3 options d'autorisations: lecture, écriture et exécution. Vous ne pouvez choisir aucun de ceux-ci, un de ceux-ci, deux de ceux-ci ou tous ceux-ci:
C (3,0) + C (3,1) + C (3,2) + C (3,3) = 8
1 + 3 + 3 + 1 = 8
Donc, en tout, il y a 8 combinaisons; 8 options pour les autorisations. En comptant à partir de 0, le dernier nombre est 7 (de 0 à 7). Donc, représentés par des nombres, voici toutes les options:
Il y a trois nombres parce que l'ordre va [autorisations utilisateur] [autorisations de groupe] [autres autorisations]
Ainsi, 777 signifie que les trois groupes disposent des autorisations de lecture, d'écriture et d'exécution.
Aussi (indirectement lié pour que vous n'ayez pas nécessairement à lire cette partie), car je pense que sa pertinence est importante: pourquoi le
read
numéro 4 est-il remplacé par le numéro 3?La seule façon d'obtenir des combinaisons uniques pour toutes les possibilités est d'utiliser des puissances de 2 pour les options de base. 2 0 = 1 (exécuter), 2 1 = 2 (écrire), 2 2 = 4 (lire), et s'il existait une 4ème option de base, elle serait numérotée 2 3 = 8. Notez que cette option
write
n'est répertoriée que lorsque toutes les combinaisons de les options précédentes ont été listées (ce qui n’est qu’une option, puisque c’est justeexecute
).read
n'est répertorié que lorsque toutes les combinaisons des options précédentes ont été répertoriées (encore une, car il n'y a qu'une combinaison avec deux options -execute
+write
).execute
+write
+read
n'est pas répertorié jusqu'à ce que toutes les combinaisons précédentes soient répertoriées, ce qui correspond à 3, car il existe désormais deux choix parmi trois autorisations. La liste continuerait ainsi, quel que soit le nombre d'options de base disponibles. Par exemple, avec 4 options de base (notons que nous savons aussi qu'il y aura 16 combinaisons au total puisqu'il y a 4 options et 2 4 = 16):la source
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) pour minimiser l'espace nécessaire à la gestion du système de fichiers .
la source
Pour une raison quelconque, les concepteurs UNIX ont décidé d'utiliser les numéros OCTAL pour les autorisations de fichiers. 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".
la source
De nos jours, nous savons tous qu'un octet est composé de 8 bits : cela fait l'objet d'un accord universel depuis des décennies. Mais ce n’était pas toujours le cas, et Unix (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 pour les systèmes utilisant des octets de 6 bits ou des octets de 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 qui utilise à la place 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. Alors 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 utilisaient Base-8 (octal). Il présente des avantages similaires à ceux de l'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, il y a trois choses que vous pouvez faire avec un fichier: vous pouvez le lire, vous pouvez l'écrire, ou vous pouvez 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. Étant donné que trois éléments sont suivis, vous avez besoin de trois bits et, comme Unix le suit selon 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 6 bits - a déclaré: "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 encoder 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. Une fois cela fait, il ne leur restait plus qu'à compter.
Étant donné 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 contrôle 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 vidages binaires d'un fichier sous forme octale (il a un cousin hexadécimal, appeléxxd
, mais ce n'est pas aussi connu et n'est pas disponible partout). C'est aussi pourquoi 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.la source