Lors d'un entretien, on m'a demandé pourquoi le 777 est chargé de prendre toutes les permissions pour un fichier. Pourquoi pas 555 ? Il a répondu qu'il y a une raison à tout. Alors, quelle est la raison de 777 ? Pourquoi pas un autre numéro ? Y a-t-il une signification à ce numéro ?
Réponse
Trop de publicités?Aujourd'hui, nous savons tous qu'un octet est composé de 8 bits. : cela a été universellement reconnu depuis des décennies. Mais ça n'a pas toujours été le cas, et Unix (qui a inspiré Linux à bien des égards) a été écrit à une époque où cette question était encore débattue. En particulier, il devait être portable sur des systèmes utilisant des octets de 6 ou 8 bits. Certaines des personnes qui l'ont écrit étaient d'un côté du débat, et d'autres de l'autre.
Par ailleurs, la 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 base 16 (hexadécimale) à la place. La base 16 est juste assez grande pour que vous puissiez exactement faire tenir quatre bits dans un chiffre hexadécimal : par exemple, "0000" en binaire correspond à 0x0 en hexadécimal (ce "0x" est une façon courante de noter que vous êtes sur le point d'écrire un nombre hexadécimal), tandis que "1111" correspond à 0xF (ou 15 en décimal). En fait, il est possible d'écrire n'importe quelle combinaison possible de quatre bits à l'aide d'un seul chiffre hexadécimal, simplement en comptant en binaire, et, en raison de la façon dont l'arithmétique positionnelle fonctionne, il est possible de l'empiler : deux chiffres hexadécimaux peuvent coder n'importe quelle combinaison possible de huit bits, simplement en comptant, et ainsi de suite. Les adeptes du 8 bits ont donc adoré.
Les adeptes du 6 bits avaient leur propre façon de procéder, mais au lieu d'utiliser la base 16, ils utilisaient la base 8 (octal). Il présente des avantages similaires à l'hexadécimal : vous pouvez stocker n'importe quelle position de trois bits dans un chiffre octal, et vous pouvez empiler les chiffres de la même manière. Ainsi, tout comme les gens de 8 bits utilisaient deux chiffres hexadécimaux pour un octet, les gens de 6 bits utilisaient deux chiffres octaux pour un octet. On ne voit plus beaucoup d'octal, mais il était généralement noté avec un zéro en tête : par exemple, "111" correspond à 07 en octal.
Maintenant, qu'est-ce que tout cela a à voir avec les permissions Unix ? Pour Unix, il y a trois choses que l'on peut faire avec un fichier : le lire, y écrire ou l'exécuter en tant que programme. Si vous voulez restreindre cela avec des permissions, il faut un bit pour chacune d'entre elles : activez-les pour les choses que quelqu'un est autorisé à faire, et laissez-les désactivées pour les choses que quelqu'un n'est pas autorisé à faire. Puisque trois choses sont suivies, vous avez besoin de trois bits, et puisque Unix les suit sur trois lignes (propriétaire, groupe, et tout le monde), vous avez besoin de neuf bits au total.
À un moment donné, quelqu'un - probablement dans le camp des 6 bits - a dit "Hé, on peut utiliser des chiffres octaux pour ça". . Et cette notation s'est avérée très pratique : trois chiffres octaux suffisent à coder toutes les combinaisons possibles des champs de bits. Une fois qu'ils ont décidé de procéder ainsi, le sort du 777 (et du 000) était scellé, car ces nombres seraient les mêmes quelle que soit la façon dont ils disposaient les bits, mais l'ordre importait pour tous les autres nombres, et ils ont donc entrepris de le faire.
Ils ont organisé les permissions en champs de trois bits : lecture au début, écriture au milieu et exécution à la fin. Puis ils ont organisé les champs eux-mêmes : propriétaire au début, groupe au milieu et autres à la fin. Une fois cela fait, il ne leur restait plus qu'à compter pour attribuer le reste des numéros.
Comme il s'agit de champs de 3 bits, on peut dire que chaque chiffre octal contrôle un des champs. : le premier chiffre contrôle les permissions du propriétaire, le deuxième chiffre contrôle les permissions du groupe et le troisième chiffre contrôle les autres permissions. Ainsi, 777 (111 111 111) correspond à toutes les permissions pour tout le monde, tandis que 700 (111 000 000) correspond à toutes les permissions uniquement pour le propriétaire. D'autres combinaisons sont également courantes : 666 (110 110 110) correspond à une lecture/écriture pour tout le monde mais pas à une exécution, tandis que 555 (101 101 101) correspond à une lecture/exécution pour tout le monde mais pas à une écriture, et 400 (100 000 000) correspond à une lecture seule pour le propriétaire et aucun accès pour les autres.
Et c'est pourquoi 777 signifie toutes les permissions. De nos jours, c'est probablement la raison la plus populaire pour laquelle les gens utilisent l'octal, même si Unix et ses descendants en ont encore quelques vestiges. Par exemple, od
ou Octal Dump, est un moyen d'obtenir des vidages binaires d'un fichier sous forme octale (il existe un cousin hexadécimal appelé xxd
mais il n'est pas aussi connu et n'est pas disponible partout). C'est également la raison pour laquelle vous devez faire attention aux zéros non significatifs dans certains langages de programmation, car ils peuvent penser que vous avez l'intention d'écrire les nombres en octal alors que ce n'est pas vraiment votre intention.
- Réponses précédentes
- Plus de réponses