logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
utilisateurs:enicar:tutos:peregrination-autour-de-ls-l [20/03/2015 20:35]
enicar [La sortie de ls -l]
utilisateurs:enicar:tutos:peregrination-autour-de-ls-l [21/03/2015 19:01]
enicar [Type de fichier et permissions]
Ligne 6: Ligne 6:
   * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)   * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
      * [[doc:​systeme:​ls|commande ls]]      * [[doc:​systeme:​ls|commande ls]]
 +     * [[doc:​systeme:​ln|commande ln]]
      * [[doc:​systeme:​droits-unix|droit unix]]      * [[doc:​systeme:​droits-unix|droit unix]]
 +     * [[doc:​systeme:​chmod|commande chmod]]
 +     * [[doc:​systeme:​chown|commande chown]]
 +     * [[doc:​systeme:​touch|commande touch]]
  
 ===== Introduction ===== ===== Introduction =====
 Je propose d'​aborder les concepts de droits unix et de type de fichier en prenant exemple Je propose d'​aborder les concepts de droits unix et de type de fichier en prenant exemple
 sur la sortie de la commande : sur la sortie de la commande :
-[code=user]+<code user>
 ls -l ls -l
-[/code]+</code>
 Ceci permettra d'​aborder les droits sur les fichiers, les notions de propriétaires et de groupe et Ceci permettra d'​aborder les droits sur les fichiers, les notions de propriétaires et de groupe et
-les divers type de fichiers qui existent sur un système de fichier linux (ext2/​ext3/​ext4/btrfs). +les divers type de fichiers qui existent sur un système de fichier linux (ext2/​ext3/​ext4). 
-Certaines ​de ces notions sont aussi vraies pour d'​autres systèmes de fichiers unix, bien sûr ;)+La plupart ​de ces notions sont aussi vraies pour d'​autres systèmes de fichiers unix, bien sûr ;)
  
 +Donc je vais d'​abord exposer ces notions essentielles,​ et ensuite on va revenir sur des exemples
 +pour entériner tout cela.
 ===== La sortie de ls -l ===== ===== La sortie de ls -l =====
 Faisons : Faisons :
Ligne 24: Ligne 30:
 </​code>​ </​code>​
  
-<​file ​bash Ce qui me donne>+<​file ​Ce qui me donne>
 -rw-r--r-- 1 enicar enicar 1436 avril 23  2014 /​home/​enicar/​.bashrc -rw-r--r-- 1 enicar enicar 1436 avril 23  2014 /​home/​enicar/​.bashrc
 </​file>​ </​file>​
Ligne 32: Ligne 38:
 Nous avons, de la gauche vers la droite : Nous avons, de la gauche vers la droite :
 ^ champ ^ signification^ ^ champ ^ signification^
-|-rw-r--r--| Type de fichier, et permissions (c'est à dire droits)| +|-rw-r--r--| [[peregrination-autour-de-ls-l?&#​type-de-fichier-et-permissions|Type de fichier, et permissions]] (c'est à dire droits)| 
-| 1|Le nombre de liens| +| 1|Le nombre de liens ([[peregrination-autour-de-ls-l?&#​liens-et-inodes|Liens et inodes]])
-|enicar|Le propriétaire du fichier| +|enicar|Le propriétaire du fichier ​([[peregrination-autour-de-ls-l?&#​proprietaire-et-groupe|Propriétaire et groupe]])
-|enicar|Le groupe à qui appartient le fichier| +|enicar|Le groupe à qui appartient le fichier ​([[peregrination-autour-de-ls-l?&#​proprietaire-et-groupe|Propriétaire et groupe]])
-|1436|La taille du fichier en octects+|1436|La ​[[peregrination-autour-de-ls-l?&#​taille-du-fichier|taille du fichier]] ​en octets
-|avril 23 2014|La date de dernière modification|+|avril 23 2014|[[peregrination-autour-de-ls-l?&#​date-de-derniere-modification|La date de dernière modification]]|
 |/​home/​enicar/​.bashrc| Le nom du fichier| |/​home/​enicar/​.bashrc| Le nom du fichier|
  
-Détaillons tout cela un peu plus. +<​note>​  
-=== Type de fichier et permissions ===+Deux options (entre autre) permettent de modifier l'​affichage de **ls -l** 
 +  * **-i** permet d'​afficher en plus le numéro d'​inode 
 +  * **-g** est identique ​ à **-l**, mis à part qu'​elle n'​affiche pas le nom du propriétaire. 
 +</​note>​ 
 +===== Type de fichier et permissions ​=====
 Détaillons,​ le champ : Détaillons,​ le champ :
 <file bash>​-rw-r--r--</​file>​ <file bash>​-rw-r--r--</​file>​
 Il est composé de 4 sous champs. De la gauche vers la droite : Il est composé de 4 sous champs. De la gauche vers la droite :
-  * -   : C'​est ​une fichier normal +  ​* **-**   : C'​est ​un fichier normal ​(voir  Type de fichier ci-dessous) 
-  * rw- : Permission pour le propriétaire du fichier +  ​* **rw-** : Permission pour le propriétaire du fichier 
-  * r-- : Permission pour le groupe auquel appartient le fichier +  ​* **r--** : Permission pour le groupe auquel appartient le fichier 
-  * r-- : Permission pour les autres (ceux qui ne sont ni le propriétaire,​ ni le groupe).+  ​* **r--** : Permission pour les autres (ceux qui ne sont ni le propriétaire,​ ni le groupe).
  
-== Type de fichier ==+==== Type de fichier ​====
 Dans un système de fichier de type unix, il existe plusieurs types de fichiers. La commande « ls -l » Dans un système de fichier de type unix, il existe plusieurs types de fichiers. La commande « ls -l »
 utilise un caractère pour nous informer sur ce type : utilise un caractère pour nous informer sur ce type :
 ^Code^ Type de fichier^ ^Code^ Type de fichier^
 |-|Fichier normal| |-|Fichier normal|
-|d|Répertoire (**d**irectory)|+|d|Répertoire (**d**irectory) ([[peregrination-autour-de-ls-l?&#​les-repertoires|Les répertoires]])|
 |l|Lien symbolique (symbolic **l**ink)| |l|Lien symbolique (symbolic **l**ink)|
 |p|Tube nommé (**p**ipe)| |p|Tube nommé (**p**ipe)|
-|s|Socket ​unix|+|s|**S**ocket ​unix|
 |b|Périphérique avec accès de type **b**loc| |b|Périphérique avec accès de type **b**loc|
 |c|Périphérique avec accès de type **c**aractère| |c|Périphérique avec accès de type **c**aractère|
  
-== Permissions ==+==== Permissions ​====
 Les permissions sont stockés dans le premier inode (au moins) du fichier sous la forme Les permissions sont stockés dans le premier inode (au moins) du fichier sous la forme
 d'un entier. Cet entier un vecteur de bits. C'est à dire que chaque bit de cet entier d'un entier. Cet entier un vecteur de bits. C'est à dire que chaque bit de cet entier
 à une signification soit le propriétaire,​ soit pour le groupe soit pour les autres à une signification soit le propriétaire,​ soit pour le groupe soit pour les autres
-pour un droit en lecture, en écriture ou en exécution.+pour un droit en lecture, en écriture ou en exécution. ​C'est pour cela que je parlerai, 
 +par exemple, du bit de lecture pour le propriétaire. 
 +<​note>​J'​expliquerai plus tard ce que sont les inodes</​note>​
  
-Signification ​pour les trois champs ​des lettres ​« rwx » sont :+Le champ des permissions est organisé en trois groupes qui correspondent aux permissions pour  
 +le propriétaire,​ pour le groupe et pour les autres. Pour chacun de ces groupes, trois attributs 
 +peuvent être positionné ou non. 
 + 
 +La signification ​pour les trois groupe ​des attributs ​« **rwx** » est :
 ^Code^Signification^ ^Code^Signification^
 |r|Accès en lecture autorisé| |r|Accès en lecture autorisé|
 |w|Accès en écriture autorisé| |w|Accès en écriture autorisé|
 |x|Droits d'​exécution ou droit de faire un « cd »| |x|Droits d'​exécution ou droit de faire un « cd »|
-|-|Aucun droit|+|-|L'​attribut n'est pas positionné|
  
-Les droits sont toujours dans le même ordre : lecture, écriture, exécution. 
 Quelques exemples éclaircirons les choses : Quelques exemples éclaircirons les choses :
 ^Code^Signification^ ^Code^Signification^
Ligne 88: Ligne 103:
 |S|Le bit setuid ou setgid est positionné,​ mais pas le droit en exécution| |S|Le bit setuid ou setgid est positionné,​ mais pas le droit en exécution|
 |s|Le bit setuid ou setgid est positionné ainsi que le droit en exécution| |s|Le bit setuid ou setgid est positionné ainsi que le droit en exécution|
 +
 +On parle de setuid pour c'est l'​attribut du propriétaire qui est positionné,​ et de setgid
 +quand c'est l'​attribut du groupe.
  
 Par exemple : Par exemple :
 <code user> <code user>
-ls -l bin/su+ls -l /bin/su
 </​code>​ </​code>​
-<​file ​bash Nous affiche>+<​file ​- Affiche>
 -rwsr-xr-x 1 root root 38868 nov.  19 22:03 /bin/su -rwsr-xr-x 1 root root 38868 nov.  19 22:03 /bin/su
 </​file>​ </​file>​
 Ici, nous voyons que la commande « su » a son bit setuid positionné. Ici, nous voyons que la commande « su » a son bit setuid positionné.
-Je reviendrais plus tard sur la signification et l'​usage des setuid et setgid.+<​note>​Je reviendrais plus tard sur la signification et l'​usage des setuid et setgid.</​note>​
  
 Pour terminer avec les droits, le champ « rwx » des autres (c'est à dire ceux qui ne sont ni le propriétaire,​ Pour terminer avec les droits, le champ « rwx » des autres (c'est à dire ceux qui ne sont ni le propriétaire,​
Ligne 105: Ligne 123:
 |t|Même chose que précédemment,​ mais le bit en exécution pour les autres est positionné| |t|Même chose que précédemment,​ mais le bit en exécution pour les autres est positionné|
  
-Dans linux, ce bit **t** n'est utilisé que pour les répertoires. ​IL est utilisé notamment pour+Dans linux, ce bit **t** n'est utilisé que pour les répertoires. ​Il est utilisé notamment pour
 les répertoires temporaires,​ par exemple : les répertoires temporaires,​ par exemple :
 <code user> <code user>
 ls -ld /tmp ls -ld /tmp
 </​code>​ </​code>​
-<​file ​bash Nous affiche>+<​file ​- Affiche>
 drwxrwxrwt 9 root root 8192 mars  20 20:25 /tmp drwxrwxrwt 9 root root 8192 mars  20 20:25 /tmp
 </​file>​ </​file>​
-Nous voyons bien que le bit **t** esst positionné. +Nous voyons bien que le bit **t** est positionné.
- +
  
- +===== Propriétaire et groupe ===== 
 +Dans un système unix chaque fichier appartient à un utilisateur (que l'on appelle son propriétaire) et à 
 +un groupe. Chaque utilisateur fait aussi partie d'un groupe au moins (Voyez ce qu'​affiche la commande « **groups** » 
 +pour votre utilisateur). La plupart du temps un fichier appartient à un groupe dont fait partie le propriétaire 
 +du fichier, mais ce n'est pas obligatoire. Aussi, il faut bien noter que le propriétaire et le groupe, même s'​ils 
 +se nomment de la même façon, sont deux choses différentes. 
 + 
 +Les groupes sont souvent utilisés pour gérer les droits plus finement ou pour réunir un ensemble d'​utilisateur 
 +sur les systèmes qui sont vraiment utilisés par plusieurs personnes. 
 + 
 +===== Taille du fichier ===== 
 +Par défaut « **ls -l** » affiche la taille en octets. On peut obtenir un affichage plus parlant avec l'​option 
 +« **-h** » (comme **h**uman readable, c'est à dire lisible pour un humain): 
 +<code user> 
 +ls -lh ~/.bashrc 
 +</​code>​ 
 +<file - Affiche>​ 
 + ​-rw-r--r-- 1 enicar enicar 1,5K avril 23  2014 /​home/​enicar/​.bashrc 
 +</​file>​ 
 +Nous obtenons la taille en kébi octets, dans ce cas mais pour des fichiers faisant plusieurs 
 +méga octets, « **ls -lh** » nous donnera la taille en mébi octets. C'est très pratique pour se 
 +faire une idée de la taille d'un fichier. 
 +<​note>​ un kébi = 1024, alors que un kilo = 1000. De même, un mébi = 1024 * 1024, 
 +alors que un méga = 1000 * 1000.</​note>​ 
 + 
 +===== Date de dernière modification ===== 
 +Par défaut « **ls -l** » affiche la date de dernière modification. Chaque fichiers, possèdent 
 +plusieurs horodatages. Il en existe 3 : 
 +  * Date de dernier accès (atime) 
 +  * Date de dernière modification (mtime) 
 +  * Date de dernier changement des droits (ctime) 
 +J'ai écrit entre parenthèses l’abréviation qui est employé pour chacune. 
 +On peut afficher ces trois dates à l'aide de la commande « **stat** » : 
 +<code user> 
 +stat ~/.bashrc 
 +</​code>​ 
 +<file - Affiche>​ 
 +  Fichier : « /​home/​enicar/​.bashrc » 
 +   ​Taille :​ 1436        Blocs : 8          Blocs d'​E/​S :​ 4096   ​fichier 
 +Périphérique :​ fe05h/​65029d ​    ​Inœud :​ 6293947 ​    ​Liens :​ 1 
 +Accès : (0644/​-rw-r--r--) ​ UID : ( 1000/     ​enicar) ​  ​GID :​ ( 1000/     ​enicar) 
 + ​Accès :​ 2015-03-19 22:​10:​12.848911153 +0100 
 +Modif. : 2014-04-23 10:​24:​33.099434481 +0200 
 +Changt : 2014-04-23 10:​24:​33.133434850 +0200 
 +  Créé : - 
 +</​file>​ 
 +On voit les trois différentes dates. ​ La date de dernière modification est changée lorsqu'​on modifie  
 +les données du fichier. La date de dernier changement indique la date dernier changement des méta données concernant le fichier (c'est à dire, les informations,​ comme sa taille, son propriétaire,​ son groupe, ses droits, son nombre de liens,​…)FIXME. La date de dernier accès est changé lors d'un accès en lecture et aussi quand l'une des dates de modification ou de changement est changée. FIXME 
 + 
 +On peut obtenir les dates de derniers accès et de dernier changement avec « **ls -l** ». Une option 
 +longue de la forme « **--time=//​mode//​** » permet de choisir quelle date affichée. Des options 
 +courtes sont aussi disponibles : 
 +^//​mode//​^option courte^affichage^ 
 +|atime, access ou use|-u|date de dernier accès| 
 +|ctime ou status|-c|date de dernier changement| 
 + 
 +===== Nom du fichier ===== 
 + 
 +Nous avons ici : 
 +<file bash> 
 +/​home/​enicar/​.bashrc 
 +</​file>​ 
 +**ls** n'​affiche pas le nom des fichiers avec le chemin en entier. C'est le shell qui a substitué le « **~** » en « /​home/​enicar ». 
 +La même chose se passe quand on utilise un méta caractère du shell comme «** * **». 
 +Pour vous en convaincre, comparez les sorties des deux commandes : 
 +<code user> 
 +ls * 
 +echo * 
 +</​code>​ 
 +Nous voyons que **ls** met en forme la sortie alors que **echo** fait juste un… écho ! 
 + 
 +===== Liens et inodes ===== 
 + 
 +Les données d'un fichier sont écrites sur le disque sous forme de blocs. 
 +L'​information où se trouve ces blocs, est contenu dans un ensemble 
 +d'​inodes (sous forme de numéro de bloc). 
 + 
 + 
 +<​note>​ inode peut être traduit par i-nœud, c'est à dire nœud 
 +d'​information. J'ai préféré gardé le terme employé couramment par les 
 +initiés. 
 +</​note>​ 
 + 
 + 
 +Cet ensemble d'​inodes a un premier inode qui sert à référencer le fichier. 
 +Un répertoire fait correspondre un chemin (le nom du fichier) avec ce 
 +premier inode. ​ De cet façon on peut avoir plusieurs noms pour le même 
 +fichier. Ces différents noms pointent sur le même premier inode. 
 + 
 + 
 +Le nombre d'​inodes utilisés par un fichier dépend évidemment de sa 
 +taille. Un seul inode ne suffit pas pour donner la liste de blocs, sauf 
 +pour les petits fichiers. 
 + 
 + 
 +Le premier inode contient aussi les métadonnées associées au fichier. 
 +C'est à dire, sa taille, son propriétaire,​ son groupe, les dates de 
 +derniers changements,​ accès et modification,​ le nombre de lien et les 
 +permissions. 
 + 
 + 
 +Supposons à présent, que l'on est deux noms de fichiers qui pointent sur 
 +le même inode. Donc, les données des « deux fichiers » sur le disque 
 +sont au même endroit. Et donc ils ont exactement les mêmes données. Leur  
 +métadonnées contenues dans le premier inode sont les mêmes également. ​  
 +On voit bien que les deux fichiers sont indiscernables. 
 + 
 + 
 + 
 +Nous allons faire quelques expérience pratique pour démontrer ce fonctionnement. 
 +J'ai dit plus [[peregrination-autour-de-ls-l?&#​la-sortie-de-ls--l|haut]] que l'​option **-i** permettait de 
 +connaître le numéro d'​inode. C'est cette option que nous allons utiliser. 
 +Mais avant, nous allons créer un répertoire de test afin d'​éviter de faire des 
 +bêtises… 
 +<code user> 
 +mkdir ~/​essai-de-liens 
 +cd ~/​essai-de-liens 
 +</​code>​ 
 + 
 +Vous devriez, à présent, vous trouvez dans le répertoire **essai-de-liens**. 
 +Créons un nouveau fichier que nous allons appelé **machin** 
 +<code user> 
 +touch machin 
 +</​code>​ 
 +Nous pouvons vérifier que machin existe bien : 
 +<code user> 
 +ls -l machin 
 +</​code>​ 
 +<file - Affiche>​ 
 +-rw-r--r-- 1 enicar enicar 0 mars  21 17:02 machin 
 +</​file>​ 
 +Donc le fichier existe, sa taille est nulle et son compteur de lien est &gale à 1. 
 +Bien, on va créer un lien sur **machin** avec la commande **ln** : 
 +<code user> 
 +ln machin bidule 
 +</​code>​ 
 +Regardons les numéros d'​inode de nos deux fichiers : 
 +<code user> 
 +ls -i machin bidule 
 +</​code>​ 
 +<file - Affiche>​ 
 +6488098 bidule ​ 6488098 machin 
 +</​file>​ 
 +Le numéro d'​inode sera différent chez vous, bien entendu. Mais ça devrait être le même 
 +numéro d'​inode. C'est ce qui est important. Ça démontre que les deux fichiers sont 
 +en fait les mêmes ! 
 +Essayons, de modifier **machin** : 
 +<code user> 
 +echo "je suis machin"​ >​machin 
 +cat machin 
 +</​code>​ 
 +<file - Affiche>​ 
 +je suis machin 
 +</​file>​ 
 +Voyons à présent ce qu'il y a dans **bidule** 
 +<code user> 
 +cat bidule 
 +</​code>​ 
 +<file - Affiche>​ 
 +je suis machin 
 +</​file>​ 
 +Voilà ! En modifiant, les données de **machin** nous avons modifié celle de **bidule**, car les deux 
 +fichiers ont les mêmes données sur le disque. Tenez, regardons le compteur de lien de nos deux fichiers : 
 +<code user> 
 +ls -l bidule machin 
 +</​code>​ 
 +<file - Affiche>​ 
 +-rw-r--r-- 2 enicar enicar 15 mars  21 17:11 bidule 
 +-rw-r--r-- 2 enicar enicar 15 mars  21 17:11 machin 
 +</​file>​ 
 +Oh ! Le compteur de lien de machin a été incrémenté de 1, celui de bidule est aussi de 2 ! 
 +On va aller plus loin, grâce à la commande **stat** : 
 +<code user> 
 +stat bidule machin 
 +</​code>​ 
 +<file - Affiche>​ 
 +   ​Fichier :​ « bidule » 
 +   ​Taille :​ 15          Blocs : 8          Blocs d'​E/​S :​ 4096   ​fichier 
 +Périphérique :​ fe05h/​65029d ​    ​Inœud :​ 6488098 ​    ​Liens :​ 2 
 +Accès : (0644/​-rw-r--r--) ​ UID : ( 1000/     ​enicar) ​  ​GID :​ ( 1000/     ​enicar) 
 + ​Accès :​ 2015-03-21 17:​11:​49.642004857 +0100 
 +Modif. : 2015-03-21 17:​11:​43.670004690 +0100 
 +Changt : 2015-03-21 17:​11:​43.670004690 +0100 
 +  Créé : - 
 +  Fichier : « machin » 
 +   ​Taille :​ 15          Blocs : 8          Blocs d'​E/​S :​ 4096   ​fichier 
 +Périphérique :​ fe05h/​65029d ​    ​Inœud :​ 6488098 ​    ​Liens :​ 2 
 +Accès : (0644/​-rw-r--r--) ​ UID : ( 1000/     ​enicar) ​  ​GID :​ ( 1000/     ​enicar) 
 + ​Accès :​ 2015-03-21 17:​11:​49.642004857 +0100 
 +Modif. : 2015-03-21 17:​11:​43.670004690 +0100 
 +Changt : 2015-03-21 17:​11:​43.670004690 +0100 
 +  Créé : - 
 +</​file>​ 
 +Vous pouvez vérifier que pour **bidule** et **machin** les dates de dernier accès sont les mêmes. Il en 
 +est de même pour les dates de changement et dernière modification. Les deux fichiers sont indiscernables,​ 
 +tant au niveau de leur données que de leur métadonnées. 
 + 
 +Supprimons **machin** : 
 +<code user> 
 +rm machin 
 +</​code>​ 
 +Voyons, ce qu'il y a dans **bidule** : 
 +<code user> 
 +cat bidule 
 +</​code>​ 
 +<file - Affiche>​ 
 +je suis machin 
 +</​file>​ 
 +Le fichier **bidule** existe toujours, ses données n'ont pas changé.
  
 +===== Les répertoires =====
 +FIXME À SUIVRE...

Pied de page des forums

Propulsé par FluxBB