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 [22/03/2015 09:35] enicar |
utilisateurs:enicar:tutos:peregrination-autour-de-ls-l [26/03/2015 07:52] enicar [Types de fichiers et permissions] |
||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
* Commentaires : Cet article n'a qu'un seul but, apprendre | * Commentaires : Cet article n'a qu'un seul but, apprendre | ||
* 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]] : lister les fichiers. |
- | * [[doc:systeme:ln|commande ln]] | + | * [[doc:systeme:ln|commande ln]] : faire des liens. |
- | * [[doc:systeme:droits-unix|droit unix]] | + | * [[doc:systeme:droits-unix|les droits unix]]. |
- | * [[doc:systeme:chmod|commande chmod]] | + | * [[doc:systeme:chmod|commande chmod]] : changer les permissions d'un fichier. |
- | * [[doc:systeme:chown|commande chown]] | + | * [[doc:systeme:chown|commande chown]] : changer le propriétaire et le groupe d'un fichier. |
- | * [[doc:systeme:touch|commande touch]] | + | * [[doc:systeme:touch|commande touch]] : changer les horodatage d'un fichier. |
+ | * [[doc:systeme:find|commande find]] : chercher des fichiers selon plusieurs critères. | ||
+ | * [[doc:systeme:wc|commande wc]] : compter le nombre de caractères, de mots et de lignes. | ||
+ | * [[doc:editeurs:less|commande less]] : visualiser un fichier texte. | ||
===== Introduction ===== | ===== Introduction ===== | ||
Ligne 124: | Ligne 127: | ||
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 ((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> | <code user> | ||
ls -ld /tmp | ls -ld /tmp | ||
Ligne 183: | Ligne 186: | ||
On peut obtenir les dates de dernier accès et de dernier changement avec « **ls -l** ». Une option | 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 affichée. Des options | + | longue de la forme « **--time=//mode//** » permet de choisir quelle date afficher. Des options |
courtes sont aussi disponibles : | courtes sont aussi disponibles : | ||
^//mode//^option courte^affichage^ | ^//mode//^option courte^affichage^ | ||
|atime, access ou use|-u|date de dernier accès| | |atime, access ou use|-u|date de dernier accès| | ||
|ctime ou status|-c|date de dernier changement| | |ctime ou status|-c|date de dernier changement| | ||
- | ||-t|date de dernière modification| | + | | |-t|date de dernière modification| |
De plus, les options courtes trient selon la date sélectionnée. | De plus, les options courtes trient selon la date sélectionnée. | ||
Ligne 210: | Ligne 213: | ||
Les données d'un fichier sont écrites sur le disque sous forme de blocs. | 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 | + | L'information où se trouve ces blocs, est contenue dans un ensemble |
- | d'inodes (sous forme de numéro de bloc). | + | d'inodes (sous forme de numéros de blocs). |
<note> inode peut être traduit par i-nœud, c'est à dire nœud | <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 | + | d'information. J'ai préféré garder le terme employé couramment par les |
initiés. | initiés. | ||
</note> | </note> | ||
Ligne 222: | Ligne 225: | ||
Cet ensemble d'inodes a un premier inode qui sert à référencer le fichier. | 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 | 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 | + | 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. | fichier. Ces différents noms pointent sur le même premier inode. | ||
Ligne 233: | Ligne 236: | ||
Le premier inode contient aussi les métadonnées associées au fichier. | 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 | 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 | + | derniers changements, accès et modifications, le nombre de lien et les |
permissions. | permissions. | ||
- | Supposons à présent, que l'on est deux noms de fichiers qui pointent sur | + | 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 | 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 | sont au même endroit. Et donc ils ont exactement les mêmes données. Leur | ||
Ligne 245: | Ligne 248: | ||
- | Nous allons faire quelques expérience pratique pour démontrer ce fonctionnement. | + | 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 | 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. | connaître le numéro d'inode. C'est cette option que nous allons utiliser. | ||
Ligne 255: | Ligne 258: | ||
</code> | </code> | ||
- | Vous devriez, à présent, vous trouvez dans le répertoire **essai-de-liens**. | + | Vous devriez, à présent, vous trouver dans le répertoire **essai-de-liens**. |
- | Créons un nouveau fichier que nous allons appelé **machin** | + | Créons un nouveau fichier que nous allons appeler **machin** |
<code user> | <code user> | ||
touch machin | touch machin | ||
Ligne 267: | Ligne 270: | ||
-rw-r--r-- 1 enicar enicar 0 mars 21 17:02 machin | -rw-r--r-- 1 enicar enicar 0 mars 21 17:02 machin | ||
</file> | </file> | ||
- | Donc le fichier existe, sa taille est nulle et son compteur de lien est &gale à 1. | + | 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** : | Bien, on va créer un lien sur **machin** avec la commande **ln** : | ||
<code user> | <code user> | ||
ln machin bidule | ln machin bidule | ||
</code> | </code> | ||
- | Regardons les numéros d'inode de nos deux fichiers : | + | Regardons les numéros d'inodes de nos deux fichiers : |
<code user> | <code user> | ||
ls -i machin bidule | ls -i machin bidule | ||
Ligne 298: | Ligne 301: | ||
</file> | </file> | ||
Voilà ! En modifiant, les données de **machin** nous avons modifié celle de **bidule**, car les deux | 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 : | + | fichiers ont les mêmes données sur le disque. Tenez, regardons le compteur de liens de nos deux fichiers : |
<code user> | <code user> | ||
ls -l bidule machin | ls -l bidule machin | ||
Ligne 306: | Ligne 309: | ||
-rw-r--r-- 2 enicar enicar 15 mars 21 17:11 machin | -rw-r--r-- 2 enicar enicar 15 mars 21 17:11 machin | ||
</file> | </file> | ||
- | Oh ! Le compteur de lien de machin a été incrémenté de 1, celui de bidule est aussi de 2 ! | + | 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** : | On va aller plus loin, grâce à la commande **stat** : | ||
<code user> | <code user> | ||
Ligne 329: | Ligne 332: | ||
Créé : - | Créé : - | ||
</file> | </file> | ||
- | Vous pouvez vérifier que pour **bidule** et **machin** les dates de dernier accès sont les mêmes. Il en | + | 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 changement et dernière modification. Les deux fichiers sont indiscernables, | + | 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. | tant au niveau de leur données que de leurs métadonnées. | ||
Ligne 347: | Ligne 350: | ||
===== Les répertoires ===== | ===== Les répertoires ===== | ||
- | FIXME À SUIVRE... | + | 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**. **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**) | ||
+ | <code user> | ||
+ | find . -maxdepth 0 -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** tous les répertoires du répertoires courant sauf **..**, ça nous fait 246-1. ;-) Le compte est bon ! | ||
+ | |||
+ | ===== Les liens symboliques ===== | ||
+ | FIXME à suivre. |