104.6 Leçon 1
Certification : |
LPIC-1 |
---|---|
Version : |
5.0 |
Thème : |
104 Disques, systèmes de fichiers Linux, arborescence de fichiers standard (FHS) |
Objectif : |
104.6 Créer et modifier des liens physiques et symboliques |
Leçon : |
1 sur 1 |
Introduction
Sous Linux, certains fichiers sont gérés différemment, soit du fait de l’endroit où ils sont stockés, comme les fichiers temporaires, soit de la manière dont ils interagissent avec le système de fichiers, comme les liens. Dans cette leçon, vous apprendrez ce que sont les liens et comment les gérer.
Comprendre les liens
Comme nous l’avons déjà dit, tout est traité comme un fichier sous Linux. Mais il existe un type spécial de fichier, appelé lien, et il y a deux types de liens sur un système Linux :
- Liens symboliques
-
Également appelés soft links, ils pointent vers le chemin d’accès d’un autre fichier. Si vous supprimez le fichier vers lequel pointe le lien (appelé cible), ce dernier existera toujours, mais il ne "fonctionnera plus", car il pointera désormais vers "rien".
- Liens physiques
-
Un lien physique est un deuxième nom pour le fichier d’origine. Il ne s’agit pas d’un doublon, mais d’une entrée supplémentaire dans le système de fichiers qui pointe vers le même emplacement (inode) sur le disque.
Tip
|
Un inode est une structure de données qui stocke les attributs d’un objet (comme un fichier ou un répertoire) dans un système de fichiers. Parmi ces attributs figurent les droits d’accès, les propriétaires et les blocs du disque sur lesquels les données de l’objet sont stockées. Il s’agit d’une entrée dans un index, d’où le nom qui vient de "nœud d’index" (index node). |
Travailler avec les liens physiques
Créer des liens physiques
La commande pour créer un lien physique sous Linux est ln
. Voici la syntaxe de base :
$ ln TARGET LINK_NAME
La cible TARGET
doit déjà exister (c’est le fichier vers lequel le lien pointera), et si la cible n’est pas dans le répertoire courant, ou si vous voulez créer le lien ailleurs, vous devez impérativement spécifier le chemin complet vers ce fichier. Par exemple, la commande :
$ ln target.txt /home/carol/Documents/hardlink
va créer un fichier nommé hardlink
dans le répertoire /home/carol/Documents/
, lié au fichier target.txt
dans le répertoire courant.
Si vous omettez le dernier paramètre (LINK_NAME
), un lien portant le même nom que la cible sera créé dans le répertoire courant.
Gérer les liens physiques
Les liens physiques sont des entrées du système de fichiers avec des noms différents mais qui pointent vers les mêmes données sur le disque. Tous ces noms se valent et peuvent être utilisés pour faire référence à un fichier. Si vous modifiez le contenu de l’un des noms, le contenu de tous les autres noms pointant vers ce fichier change puisque tous les noms pointent vers les mêmes données. Si vous supprimez l’un des noms, les autres noms continueront à fonctionner.
En effet, lorsque vous "supprimez" un fichier, les données ne sont pas réellement effacées du disque. Le système supprime simplement l’entrée de la table du système de fichiers pointant vers l'inode correspondant aux données sur le disque. Mais si vous avez une deuxième entrée pointant vers le même inode, vous pouvez toujours accéder aux données. Imaginez deux routes qui convergent vers le même point. Même si vous bloquez ou redirigez l’une des routes, vous pouvez toujours atteindre la destination en utilisant l’autre.
Vous pouvez vérifier en utilisant l’option -i
de ls
. Prenons le contenu suivant d’un répertoire :
$ ls -li total 224 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 hardlink 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 target.txt
Le nombre qui précède les droits d’accès est le numéro de l'inode. Vous voyez que le fichier hardlink
et le fichier target.txt
ont le même numéro (3806696
) ? C’est parce que l’un est un lien physique de l’autre.
Mais lequel est l’original et lequel est le lien ? Impossible de le savoir, dans la mesure où les deux sont identiques sur le plan pratique.
Notez que chaque lien physique pointant vers un fichier augmente le compte de liens (link count) du fichier. C’est le nombre situé juste après les droits d’accès dans l’affichage de ls -l
. Par défaut, chaque fichier a un compte de liens de 1
(les répertoires ont un compte de 2
), et chaque lien physique pointant vers lui augmente d’un cran ce compte. Ce qui explique le nombre de liens 2
pour les fichiers de la liste ci-dessus.
Contrairement aux liens symboliques, vous pouvez créer des liens physiques vers des fichiers uniquement, et le lien et la cible doivent résider dans le même système de fichiers.
Déplacer et supprimer des liens physiques
Étant donné que les liens physiques sont traités comme des fichiers normaux, ils peuvent être supprimés avec rm
et renommés ou déplacés dans le système de fichiers avec mv
. Et comme un lien physique pointe vers le même inode que la cible, il peut être déplacé librement, sans risquer de "casser" le lien.
Les liens symboliques
Créer des liens symboliques
La commande utilisée pour créer un lien symbolique est également ln
, mais avec l’ajout de l’option -s
. Voici ce que ça donne :
$ ln -s target.txt /home/carol/Documents/softlink
Cette opération va créer un fichier nommé softlink
dans le répertoire /home/carol/Documents/
, pointant vers le fichier target.txt
dans le répertoire courant.
Tout comme pour les liens physiques, vous pouvez omettre le nom du lien en argument pour créer un lien qui porte le même nom que la cible dans le répertoire courant.
Gérer les liens symboliques
Les liens symboliques pointent vers un autre chemin dans le système de fichiers. Vous pouvez créer des liens symboliques vers des fichiers aussi bien que des répertoires, même sur des partitions différentes. Il est assez facile de repérer un lien symbolique dans l’affichage de la commande ls
:
$ ls -lh total 112K -rw-r--r-- 1 carol carol 110K Jun 7 10:13 target.txt lrwxrwxrwx 1 carol carol 12 Jun 7 10:14 softlink -> target.txt
Dans l’exemple ci-dessus, le premier caractère avant les droits d’accès au fichier softlink
est l
, ce qui signifie qu’il s’agit d’un lien symbolique. Par ailleurs, juste après le nom du fichier, vous voyez le nom de la cible vers laquelle pointe le lien, en l’occurrence le fichier target.txt
.
Notez que dans les listings de fichiers et de répertoires, les liens symboliques eux-mêmes affichent toujours les droits rwx
pour l’utilisateur, le groupe et les autres, mais en pratique leurs droits d’accès correspondent à ceux de la cible.
Déplacer et supprimer des liens symboliques
Comme les liens physiques, les liens symboliques peuvent être supprimés avec rm
et déplacés ou renommés avec mv
. Cependant, il faut faire très attention lors de leur création, pour éviter de "casser" le lien lorsqu’on le déplace depuis son emplacement d’origine.
Lorsque vous créez des liens symboliques, sachez qu’à moins qu’un chemin d’accès ne soit complètement spécifié, l’emplacement de la cible est interprété comme étant relatif à l’emplacement du lien. Ce qui peut poser des problèmes quand on déplace le lien ou le fichier vers lequel il pointe.
Un exemple permet de mieux comprendre ce principe. Supposons que vous ayez un fichier nommé original.txt
dans le répertoire courant, et que vous vouliez créer un lien symbolique appelé softlink
vers ce fichier. Vous pourriez utiliser :
$ ln -s original.txt softlink
Apparemment, tout va bien. Vérifions avec ls
:
$ ls -lh total 112K -r--r--r-- 1 carol carol 110K Jun 7 10:13 original.txt lrwxrwxrwx 1 carol carol 12 Jun 7 19:23 softlink -> original.txt
Voyez comment le lien est construit : softlink
pointe vers (→
) original.txt
. Maintenant, voyons ce qui se passe lorsque vous déplacez le lien vers le répertoire parent et que vous essayez d’afficher son contenu en utilisant la commande less
:
$ mv softlink ../ $ less ../softlink ../softlink: No such file or directory
Comme le chemin vers original.txt
n’a pas été spécifié, le système part du principe qu’il se situe dans le même répertoire que le lien. À partir du moment où ce n’est plus le cas, le lien ne fonctionne plus.
Pour éviter cette situation, il suffit de spécifier le chemin d’accès complet à la cible lors de la création du lien :
$ ln -s /home/carol/Documents/original.txt softlink
Ainsi, quel que soit l’endroit où vous déplacez le lien, il fonctionnera toujours, étant donné qu’il pointe vers l’emplacement absolu de la cible. Vérifiez avec ls
:
$ ls -lh total 112K lrwxrwxrwx 1 carol carol 40 Jun 7 19:34 softlink -> /home/carol/Documents/original.txt
Exercices guidés
-
Quel est le paramètre de
chmod
en mode symbolique pour activer le sticky bit sur un répertoire ? -
Prenons un fichier nommé
document.txt
dans le répertoire/home/carol/Documents
. Quelle est la commande pour créer un lien symbolique vers ce fichier nommétext.txt
dans le répertoire courant ? -
Expliquez la différence entre un lien physique vers un fichier et une copie de ce fichier.
Exercices d’approfondissement
-
Imaginez que dans un répertoire vous créez un fichier appelé
recipes.txt
. À l’intérieur de ce répertoire, vous allez également créer un lien physique vers ce fichier, appeléreceitas.txt
, et un lien symbolique (soft link) vers ce fichier, appelérezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s recipes.txt rezepte.txt
Le contenu du répertoire devrait ressembler à ceci :
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 0K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 17 17:25 rezepte.txt -> receitas.txt
Rappelez-vous qu’en tant que lien physique,
receitas.txt
pointe vers le même inode querecipes.txt
. Que va devenir le lien symboliquerezepte.txt
si l’on supprime le fichierreceitas.txt
? Pourquoi ? -
Imaginez que vous ayez une clé USB branchée sur votre système, montée sur
/media/youruser/FlashA
. Vous voulez créer un lien nomméschematics.pdf
dans votre répertoire personnel, et qui pointe vers le fichieresquema.pdf
à la racine de la clé USB. Vous tapez donc la commande :$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Que se passerait-il ? Pourquoi ?
-
Considérez l’affichage suivant de
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Combien de liens pointent vers le fichier
document.txt
? -
S’agit-il de liens symboliques ou de liens physiques ?
-
Quelle option devez-vous passer à
ls
pour savoir à quel inode correspond chaque fichier ?
-
-
Imaginez que vous ayez dans votre répertoire
~/Documents
un fichier nomméclients.txt
avec quelques noms de clients, et un répertoire nommésomedir
. À l’intérieur de ce répertoire, il y a un fichier différent également nomméclients.txt
, avec des noms distincts. Vous pouvez reproduire cette structure avec les commandes suivantes.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Ensuite, vous créez un lien nommé
partners.txt
danssomedir
et qui pointe vers ce fichier, avec les commandes suivantes :$ cd somedir/ $ ln -s clients.txt partners.txt
La structure de l’arborescence est donc :
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Maintenant, vous déplacez
partners.txt
desomedir
vers~/Documents
, et vous affichez son contenu.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Est-ce que le lien sera toujours fonctionnel ? Si oui, quel fichier verra son contenu affiché ? Pourquoi ?
-
Prenez les fichiers suivants :
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
Quels sont les droits d’accès pour
partners.txt
? Pourquoi ?
Résumé
Dans cette leçon, vous avez appris à :
-
Savoir ce que c’est qu’un lien.
-
Comprendre la différence entre un lien symbolique et un lien physique.
-
Créer des liens.
-
Déplacer, renommer et supprimer ces liens.
Les commandes suivantes ont été abordées dans cette leçon :
-
ln
: La commande qui permet de créer un lien. En elle-même, la commande crée un lien physique. L’option-s
permet de créer un lien symbolique (soft link). Rappelez-vous que les liens physiques ne peuvent résider que sur la même partition et le même système de fichiers, et que les liens symboliques peuvent aller au-delà d’une partition et d’un système de fichiers (et même d’un stockage en réseau). -
L’option
-i
dels
, qui permet d’afficher le numéro d'inode d’un fichier.
Réponses aux exercices guidés
-
Quel est le paramètre de
chmod
en mode symbolique pour activer le sticky bit sur un répertoire ?Le symbole du sticky bit en mode symbolique est
t
. Puisque nous voulons activer (ajouter) cette permission au répertoire, le paramètre doit être+t
. -
Prenons un fichier nommé
document.txt
dans le répertoire/home/carol/Documents
. Quelle est la commande pour créer un lien symbolique vers ce fichier nommétext.txt
dans le répertoire courant ?ln -s
est la commande pour créer un lien symbolique. Comme vous devriez spécifier le chemin complet du fichier vers lequel vous créez un lien, voici la commande :$ ln -s /home/carol/Documents/document.txt text.txt
-
Expliquez la différence entre un lien physique vers un fichier et une copie de ce fichier.
Un lien physique est simplement un autre nom pour un fichier. Même s’il ressemble à un doublon du fichier original, les deux sont identiques, puisqu’ils renvoient aux mêmes données sur le disque. Les modifications apportées au contenu du lien seront répercutées sur l’original, et vice-versa. En revanche, une copie est une entité complètement indépendante, qui occupe un emplacement différent sur le disque. Les modifications apportées à la copie ne seront pas répercutées sur l’original, et vice-versa.
Réponses aux exercices d’approfondissement
-
Imaginez que dans un répertoire vous créez un fichier appelé
recipes.txt
. À l’intérieur de ce répertoire, vous allez également créer un lien physique vers ce fichier, appeléreceitas.txt
, et un lien symbolique (soft link) vers ce fichier, appelérezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s receitas.txt rezepte.txt
Le contenu du répertoire devrait ressembler à ceci :
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 0K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 17 17:25 rezepte.txt -> receitas.txt
Rappelez-vous qu’en tant que lien physique,
receitas.txt
pointe vers le même inode querecipes.txt
. Que va devenir le lien symboliquerezepte.txt
si l’on supprime le fichierreceitas.txt
? Pourquoi ?Le lien symbolique
rezepte.txt
cesserait de fonctionner. En effet, les liens symboliques pointent vers des noms, et non pas vers des inodes, et le nomreceitas.txt
n’existe plus, même si les données sont toujours sur le disque sous le nomrecipes.txt
. -
Imaginez que vous ayez une clé USB branchée sur votre système, montée sur
/media/youruser/FlashA
. Vous voulez créer un lien nomméschematics.pdf
dans votre répertoire personnel, et qui pointe vers le fichieresquema.pdf
à la racine de la clé USB. Vous tapez donc la commande :$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Que se passerait-il ? Pourquoi ?
La commande échouerait. Le message d’erreur serait
Invalid cross-device link
, et la raison est évidente : les liens physiques ne peuvent pas pointer vers une cible située dans une partition ou sur un périphérique différent. La seule façon de créer un tel lien est d’utiliser un lien symbolique (soft link) en ajoutant l’option-s
àln
. -
Considérez l’affichage suivant de
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Combien de liens pointent vers le fichier
document.txt
?Chaque fichier commence avec un décompte de liens de
1
. Puisque le nombre de liens pour ce fichier est4
, il y a trois liens qui pointent vers ce fichier. -
S’agit-il de liens symboliques ou de liens physiques ?
Ce sont des liens physiques, étant donné que les liens symboliques n’apparaissent pas dans le décompte des liens d’un fichier.
-
Quelle option devez-vous passer à
ls
pour savoir à quel inode correspond chaque fichier ?L’option
-i
. L'inode s’affichera dans la première colonne de l’affichage dels
, comme ceci :$ ls -lahi total 3,1M 5388773 drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . 5245554 drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. 5388840 -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt 5388837 -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
-
Imaginez que vous ayez dans votre répertoire
~/Documents
un fichier nomméclients.txt
avec quelques noms de clients, et un répertoire nommésomedir
. À l’intérieur de ce répertoire, il y a un fichier différent également nomméclients.txt
, avec des noms distincts. Vous pouvez reproduire cette structure avec les commandes suivantes.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Ensuite, vous créez un lien nommé
partners.txt
danssomedir
et qui pointe vers ce fichier, avec les commandes suivantes :$ cd somedir/ $ ln -s clients.txt partners.txt
La structure de l’arborescence est donc :
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Maintenant, vous déplacez
partners.txt
desomedir
vers~/Documents
, et vous affichez son contenu.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Est-ce que le lien sera toujours fonctionnel ? Si oui, quel fichier verra son contenu affiché ? Pourquoi ?
Ce cas de figure est un peu épineux, mais le lien sera fonctionnel. Le fichier affiché sera celui qui se trouve dans
~/Documents
, avec les nomsJohn
,Michael
,Bob
.Rappelez-vous que puisque vous n’avez pas spécifié le chemin complet de la cible
clients.txt
lors de la création du lien symboliquepartners.txt
, l’emplacement de la cible sera interprété comme étant relatif à l’emplacement du lien, qui est ici le répertoire courant.Lorsque le lien a été déplacé de
~/Documents/somedir
vers~/Documents
, il aurait dû cesser de fonctionner, puisque la cible n’était plus dans le même répertoire que le lien. Cependant, il se trouve qu’il y a un autre fichier nomméclients.txt
dans~/Documents
. Le lien pointera donc vers ce fichier au lieu de la cible originale dans~/somedir
.Pour éviter ce genre de situation, indiquez toujours le chemin d’accès complet vers la cible lorsque vous créez un lien symbolique.
-
Prenez les fichiers suivants :
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
Quels sont les droits d’accès pour
partners.txt
? Pourquoi ?Les droits d’accès pour
partners.txt
sontrw-r—r--
, étant donné que les liens héritent toujours des mêmes permissions que la cible.