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 →
Ci-dessous, les différences entre deux révisions de la page.
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 [21/03/2015 06:36] enicar [La sortie de ls -l] |
utilisateurs:enicar:tutos:peregrination-autour-de-ls-l [22/03/2015 09:23] enicar |
||
---|---|---|---|
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 ===== | ||
Ligne 15: | Ligne 19: | ||
</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 types de fichiers qui existent sur un système de fichiers 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 | Donc je vais d'abord exposer ces notions essentielles, et ensuite on va revenir sur des exemples | ||
Ligne 34: | 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?&#types-de-fichiers-et-permissions|Types de fichiers, et permissions]] (c'est à dire les 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 autres) 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> | ||
+ | ===== Types de fichiers 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 Types de fichiers ci-dessous) |
- | * **rw-** : Permission pour le propriétaire du fichier | + | * **rw-** : Permissions pour le propriétaire du fichier |
- | * **r--** : Permission pour le groupe auquel appartient le fichier | + | * **r--** : Permissions pour le groupe auquel appartient le fichier |
- | * **r--** : Permission pour les autres (ceux qui ne sont ni le propriétaire, ni le groupe). | + | * **r--** : Permissions pour les autres (ceux qui ne sont ni le propriétaire, ni le groupe). |
- | == Type de fichier == | + | ==== Types de fichiers ==== |
- | Dans un système de fichier de type unix, il existe plusieurs types de fichiers. La commande « ls -l » | + | Dans un système de fichiers 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ées 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 est 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 pour le propriétaire, soit pour le groupe, soit pour les autres |
pour un droit en lecture, en écriture ou en exécution. C'est pour cela que je parlerai, | 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. | + | par exemple, du bit de lecture pour le propriétaire. FIXME MAL DIT |
- | <note>J'expliquerai plus tard ce que sont les inodes</note> | + | <note>Voir [[peregrination-autour-de-ls-l?&#liens-et-inodes|ici]] 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és ou non. | ||
+ | |||
+ | La signification pour les trois groupes 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 éclairciront les choses : |
- | Quelques exemples éclaircirons les choses : | + | |
^Code^Signification^ | ^Code^Signification^ | ||
|rwx|Les droits en lecture, en écriture et en exécution sont positionnés| | |rwx|Les droits en lecture, en écriture et en exécution sont positionnés| | ||
Ligne 88: | Ligne 99: | ||
- | À la place du x dans le champ rwx du propriétaire ou du groupe nous pouvons avoir : | + | À la place du x dans le champ **rwx** du propriétaire ou du groupe nous pouvons avoir : |
^Code^signification^ | ^Code^signification^ | ||
|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 quand c'est l'attribut du propriétaire qui est positionné, et de setgid | ||
+ | quand c'est l'attribut du groupe. | ||
Par exemple : | Par exemple : | ||
Ligne 119: | Ligne 133: | ||
Nous voyons bien que le bit **t** est positionné. | Nous voyons bien que le bit **t** est positionné. | ||
- | === Propriétaire et groupe === | + | ===== Propriétaire et groupe ===== |
Dans un système unix chaque fichier appartient à un utilisateur (que l'on appelle son propriétaire) et à | 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** » | un groupe. Chaque utilisateur fait aussi partie d'un groupe au moins (Voyez ce qu'affiche la commande « **groups** » | ||
Ligne 129: | Ligne 143: | ||
sur les systèmes qui sont vraiment utilisés par plusieurs personnes. | sur les systèmes qui sont vraiment utilisés par plusieurs personnes. | ||
- | === Taille du fichier === | + | ===== Taille du fichier ===== |
Par défaut « **ls -l** » affiche la taille en octets. On peut obtenir un affichage plus parlant avec l'option | 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): | « **-h** » (comme **h**uman readable, c'est à dire lisible pour un humain): | ||
Ligne 144: | Ligne 158: | ||
alors que un méga = 1000 * 1000.</note> | alors que un méga = 1000 * 1000.</note> | ||
- | === Date de dernière modification === | + | ===== Date de dernière modification ===== |
Par défaut « **ls -l** » affiche la date de dernière modification. Chaque fichiers, possèdent | Par défaut « **ls -l** » affiche la date de dernière modification. Chaque fichiers, possèdent | ||
plusieurs horodatages. Il en existe 3 : | plusieurs horodatages. Il en existe 3 : | ||
Ligne 175: | Ligne 189: | ||
|ctime ou status|-c|date de dernier changement| | |ctime ou status|-c|date de dernier changement| | ||
- | === Nom du fichier === | + | ===== Nom du fichier ===== |
Nous avons ici : | Nous avons ici : | ||
Ligne 190: | Ligne 204: | ||
Nous voyons que **ls** met en forme la sortie alors que **echo** fait juste un… écho ! | 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 leurs 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... |