web-dev-qa-db-fra.com

Comprendre les modes du système de fichiers Linux

J'ai lu plus de 10 articles et j'essaie de faire le tour du système de fichiers Linux. Il y a un point que j'essaie de comprendre que je ne peux pas comprendre. Pardonnez-moi d'avoir l'air très stupide:

Lorsque j'énumère les détails du fichier, j'obtiens un "mode" numérique d'un fichier, qui fait référence à ses autorisations. Quelques exemples de modes:

33206
16822

D'une manière ou d'une autre, ceux-ci semblent avoir besoin de se convertir en octales, et ressembler à quelque chose comme:

0777

De là, on peut apparemment déduire les autorisations lisibles par l'homme, telles que:

drwxr-xr-x
-rwxr--r--

J'essaie de comprendre comment passer de cette première étape à la troisième. Et je suis totalement perdu.

1
dthree

Le premier ensemble de nombres n'a probablement rien à voir avec l'ensemble d'autorisations pour le fichier. Si vous avez obtenu ces informations en utilisant ls -l alors ce nombre correspond à la taille du fichier en octets.

Les valeurs octales ne sont pas affichées dans ce format, mais la "lisibilité humaine" l'est. La façon dont je me souviens des octales est que le premier des quatre chiffres concerne les bits spéciaux (setuid, setgid, sticky), ils sont destinés à une utilisation plus avancée, donc je ne m'inquiéterais pas tout de suite pour eux. Ensuite, chaque ensemble lisible par l'homme de rwx constitue la valeur des 3 chiffres suivants, qui sont classés par propriétaire, groupe et tout le monde. r = 4, w = 2 et x = 1, donc lecture/écriture est 4 + 2 = 6.

La page d'aide Ubunt est assez claire je pense.

Je suggère également d'utiliser ls -lh pour répertorier les fichiers, car la taille du fichier est convertie en lisible par l'homme, donc sa sortie est en kilo-octets, mégaoctets et gigaoctets.

4
Arronical

Si vous entendez par "notation décimale" "notation octale": les notations octales et de caractères sont communiquées entre les utilisateurs de * nix.

En particulier, notez que les autorisations octales et les caractères peuvent être divisés en 3 parties. Ainsi:

rwx | r-x | r-x
7   | 5   | 5

Regardez maintenant la position de chaque lettre.

  • Dans la première partie, c'est vrai, vrai, vrai (ou ensemble, ensemble, ensemble). Quel est le numéro 7 en octal? 111.

  • Deuxième permission? définir, désélectionner, définir. 5 octobre? 101. Comme vous pouvez le voir, la notation octale en bits correspond aux lettres à activer/désactiver.

Quant aux 3 ensembles, c'est le propriétaire, le groupe de cet utilisateur et les autres autorisations d'utilisateurs et de groupes. Dans l'exemple ci-dessus, le propriétaire peut lire en écriture et exécuter, mais les utilisateurs du groupe de propriétaires et les autres utilisateurs ne peuvent pas écrire, ils peuvent uniquement lire et exécuter un fichier.

4

Vous pouvez obtenir la valeur octale avec:

stat -c "%a %n" file

Cependant, il existe une tonne de calculateurs d'autorisations de fichiers en ligne:

et beaucoup plus...

2
Arnon

Merci pour toute l'aide et les conseils des autres réponses. J'ai utilisé ces découvertes et quelques autres pour reconstituer les solutions de conversion suivantes dans JS:

converter = {

    listing: {
      '0': '---',
      '1': '--x',
      '2': '-w-',
      '3': '-wx',
      '4': 'r--',
      '5': 'r-x',
      '6': 'rw-',
      '7': 'rwx'
    },

    modeToRWX(mode) {
      let octal = this.modeToOctal(mode);
      let rwx = this.octalToRWX(octal);
      return rwx;
    },

    modeToOctal(mode) {
      let octal = '0' + (mode & 0o777).toString(8);
      return octal;
    },

    octalToRWX(octal) {
      if (!octal) { return void 0; }
      const list = this.listing;
      let full = String((octal.length === 4) ? octal : '0' + octal);
      let a = list[String(octal).charAt(1)];
      let b = list[String(octal).charAt(2)];
      let c = list[String(octal).charAt(3)];
      return a + b + c;
    }

}
1
dthree