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
utilisateurs:enicar:tutos:peregrination-autour-de-ls-l [15/11/2019 21:49]
enicar supprimée
— (Version actuelle)
Ligne 1: Ligne 1:
- 
- 
-===== La sortie de ls -l ===== 
-Faisons : 
-<code user> 
-ls -l ~/.bashrc 
-</​code>​ 
- 
-<file - Ce qui me donne> 
--rw-r--r-- 1 enicar enicar 1436 avril 23  2014 /​home/​enicar/​.bashrc 
-</​file>​ 
- 
-Donc nous allons décoder tout cela, en exposant quelques notions, puis nous reviendrons sur 
-des exemples pratiques. 
-Nous avons, de la gauche vers la droite : 
-^ champ ^ signification^ 
-|-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 ([[peregrination-autour-de-ls-l?&#​liens-et-inodes|Liens et inodes]])| 
-|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 ([[peregrination-autour-de-ls-l?&#​proprietaire-et-groupe|Propriétaire et groupe]])| 
-|1436|La [[peregrination-autour-de-ls-l?&#​taille-du-fichier|taille du fichier]] en octets| 
-|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| 
- 
-<​note> ​ 
-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 : 
-<file bash>​-rw-r--r--</​file>​ 
-Il est composé de 4 sous-champs. De la gauche vers la droite : 
-  * **-**   : C'est un fichier normal (voir  Types de fichiers ci-dessous) 
-  * **rw-** : Permissions pour le propriétaire du fichier 
-  * **r--** : Permissions pour le groupe auquel appartient le fichier 
-  * **r--** : Permissions pour les autres (ceux qui ne sont ni le propriétaire,​ ni le groupe). 
- 
-==== Types de fichiers ==== 
-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 : 
-^Code^ Type de fichier^ 
-|-|Fichier normal| 
-|d|Répertoire (**d**irectory) ([[peregrination-autour-de-ls-l?&#​les-repertoires|Les répertoires]])| 
-|l|Lien symbolique (symbolic **l**ink) ([[peregrination-autour-de-ls-l?&#​les-liens-symboliques|Les liens symboliques)]]| 
-|p|Tube nommé (**p**ipe)| 
-|s|**S**ocket unix| 
-|b|Périphérique avec accès de type **b**loc| 
-|c|Périphérique avec accès de type **c**aractère| 
- 
-==== Permissions ==== 
-Les permissions sont stockées dans le premier inode (au moins) du fichier sous la forme 
-d'un entier. Cet entier est un vecteur de bits. C'est à dire que chaque bit de cet entier 
-à 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, 
-par exemple, du bit de lecture pour le propriétaire. FIXME MAL DIT 
-<​note>​Voir [[peregrination-autour-de-ls-l?&#​liens-et-inodes|ici]] ce que sont les inodes</​note>​ 
- 
-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^ 
-|r|Accès en lecture autorisé| 
-|w|Accès en écriture autorisé| 
-|x|Droits d'​exécution ou droit de faire un « cd »| 
-|-|L'​attribut n'est pas positionné| 
- 
-Quelques exemples éclairciront les choses : 
-^Code^Signification^ 
-|rwx|Les droits en lecture, en écriture et en exécution sont positionnés| 
-|---| Aucun droit| 
-|r--| Droit en lecture uniquement| 
-|r-x| Droit en lecture et en exécution| 
- 
- 
-À la place du x dans le champ **rwx** du propriétaire ou du groupe nous pouvons avoir : 
-^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é 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 : 
-<code user> 
-ls -l /bin/su 
-</​code>​ 
-<file - Affiche> 
--rwsr-xr-x 1 root root 38868 nov.  19 22:03 /bin/su 
-</​file>​ 
-Ici, nous voyons que la commande « su » a son bit setuid positionné. 
-<​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,​ 
-ni le groupe) peut prendre deux autres formes. À la place du x nous pouvons avoir. 
-^code^Signification pour les répertoires^ 
-|T|Dans ce répertoire seul les propriétaires des fichiers peuvent supprimer ces fichiers. Le bit en exécution pour les autres n'est pas 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 
-les répertoires temporaires,​ par exemple ((L'​option **-d** demande à **ls** de ne pas afficher le contenu des répertoires,​ mais de lister leur nom comme avec les autres fichiers))((Nous pouvons grouper les options courtes dans ls. Ainsi **ls -ld** est équivalent à **ls -l -d**)) : 
-<code user> 
-ls -ld /tmp 
-</​code>​ 
-<file - Affiche> 
-drwxrwxrwt 9 root root 8192 mars  20 20:25 /tmp 
-</​file>​ 
-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'​utilisateurs 
-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ée 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 dernier accès et de dernier changement avec « **ls -l** ». Une option 
-longue de la forme « **--time=//​mode//​** » permet de choisir quelle date afficher. 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| 
-| |-t|date de dernière modification| 
- 
-De plus, les options courtes trient selon la date sélectionnée. 
- 
-===== 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 contenue dans un ensemble 
-d'​inodes (sous forme de numéros de blocs). 
- 
- 
-<​note>​ inode peut être traduit par i-nœud, c'est à dire nœud 
-d'​information. J'ai préféré garder 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 cette 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 modifications,​ le nombre de lien et les 
-permissions. 
- 
- 
-Supposons à présent, que l'on ait 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ériences pratiques 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 trouver dans le répertoire **essai-de-liens**. 
-Créons un nouveau fichier que nous allons appeler **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'​inodes 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 liens 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 derniers accès sont les mêmes. Il en 
-est de même pour les dates de changements et dernière modifications. 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 ===== 
-Les répertoires sont des fichiers avec l'​attribut « répertoire » ((Presque tout est fichier dans un 
-système linux. Il existe une exception notable : les interfaces réseaux. En effet ces interfaces 
-n'ont aucun périphérique correspondant dans /dev/)) 
- 
-Les répertoires permettent de faire la correspondance entre les noms des fichiers et les inodes. 
-Les répertoires ont eux mêmes un nom dans un répertoire,​ à l'​exception du répertoire racine 
-qui n'a pas de nom. 
- 
-Nous allons voir que les répertoires sont aussi des liens sur des inodes, et qu'un répertoire 
-possède d'​office plusieurs liens physiques (à par la racine, mais ça ne dure pas longtemps ;-)). 
-Donc, voyons le nombre de liens d'un répertoire. Pour cela nous allons utiliser, l'​option 
-**-d** de **ls**, par exemple : 
-<code user> 
-ls -ld .  
-</​code>​ 
-Cela donne dans mon home : 
-<file -> 
-drwxr-xr-x 246 enicar enicar 36864 mars  26 06:42 . 
-</​file>​ 
-Nous voyons que le répertoire courant a bien l'​attribut répertoire (ouf !). Le nombre de 
-liens est 246, et sa taille 36864 octets. 
- 
- 
-Le nombre de liens d'un répertoire est au moins deux ((sauf pour la racine, mais je n'y reviendrai plus ;) )). En effet, le premier lien est celui du répertoire parent. Le second est celui qu'il a sur lui 
-même, c'est le point. Alors nous en arrivons à la question : d'où vient ce 246 ? À chaque nouveau 
-sous-répertoire créé dans un répertoire est associé un lien noté **..**. Ce lien pointe sur le répertoire parent. Donc on en déduit, qu'il y a 244 sous-répertoires dans le répertoire courant de mon exemple. 
-Prouvons le ! Je vais utiliser pour ce faire les commandes **find** et **wc**. 
-<code user> 
-find . -maxdepth 1 -type d |wc -l 
-</​code>​ 
-**find** permet de chercher des fichiers selon divers critères. Ici, je vais lui demander de trouver les répertoires du répertoire courant (**-type d**) et de ne pas parcourir ces sous-répertoires en profondeur 
-comme il le fait normalement (**-maxdepth 1**). **wc** compte les caractères,​ les mots et les lignes. 
-Ici, je lui demande de compter les lignes uniquement (**-l**). En effet, par défaut, **find** affiche un fichier par ligne. Mais surprise ! Cela affiche : 
-<file -> 
-245 
-</​file>​ 
-Me serais-je fourvoyer ? Non, pas du tout ! En fait, avec **find** nous avons aussi compté le répertoire 
-courant (c'est à dire **.**). Vous pouvez le vérifier en faisant : 
-<code user> 
-find . -maxdepth 1 -type d |less 
-</​code>​ 
-Le répertoire **.** devrait être listé au début. Une autre façon de voir, est que **find** liste tous les répertoires du répertoires courant sauf **..**, ça nous fait 246-1. ;-) Le compte est bon ! 
- 
-===== Les liens symboliques ===== 
-FIXME à suivre. 
  

Pied de page des forums

Propulsé par FluxBB