Série du billet sur les liens sous Linux :
- (partie 1) Présentation des concepts,
- (partie 2) Mise en Ćuvres des liens symboliques,
- (partie 3) Une alternative : les montages de répertoires,
- (partie 4) SynthĂšse.
Les commandes permettant de gérer les liens symboliques
Dans le jargon Linux câest la seule mĂ©thode pour crĂ©er un lien, pour les autres solutions un autre vocabulaire est utilisĂ©.
Dans cette partie, nous ne parlerons pas des liens directs (â hard linkâ) car leur usage est dĂ©licat.
- Créer un lien
ln -s chemin/dossier_ou_fichier_existant le_lien
- RĂ©soudre le lien : câest-Ă -dire retrouver le chemin vers le fichier (ou le dossier) ce lien pointe.
readlink le_lien
Supprimer le lien. Notez que si le fichier donnĂ© nâest pas un lien, il nây aura pas de suppression. Je vous recommande dâutiliser cette commande lorsque vous dĂ©buter avec les liens.
unlink le_lien
Une autre façon de voir un lien se fait Ă lâaide de la commande ls
ls -l le_lien
Un lien Ă©tant un fichier comme un autre, il est possible de le supprimer en utilisant la commandes standard : rm â Notez que lâutilisation cette solution est plus ambiguĂ« en particulier lorsquâon supprime un lien vers un dossierâŠ
rm le_lien
Une derniÚre commande trÚs utile, similaire à readlink est : realpath
realpath le_lien
ou
realpath un_vrai_fichier
En effet, cette commande permettra de vous rĂ©soudre le vrai chemin Ă fichier (ou rĂ©pertoire), quelle que soit la partie du chemin contenant un lien, et Ă©galement si le chemin ne contient pas de lien. Cette commande est un moyen sĂ»r permettant de retrouver le chemin canonique dâun objet prĂ©sent sur le disque.
Exemple dâutilisation de ln -s
Lien vers un fichier
On va créer dans votre répertoire personnel ($HOME
) un répertoire nommé « dossier_reel » (évitez les accents) contenant un fichier « le-fichier.txt ».
Pour aller vite, utiliser le code ci-dessous.
mkdir "${HOME}/dossier_reel"
echo "Contentu du fichier" >"${HOME}/dossier_reel/le-fichier.txt"
Regardons le dossier « dossier_reel » :
ls -ld --color "${HOME}/dossier_reel"
Vous devez avoir quelque chose comme :
drwxrwxr-x 2 username username 4096 mai 26 10:24 dossier_reel
Regardons son contenu :
ls -la --color "${HOME}/dossier_reel"
Voici Ă quoi ressemble le dossier dâorigine :
total 20
drwxrwxr-x 2 username username 4096 mai 26 10:24 .
drwxr----- 135 username username 12288 mai 26 10:24 ..
-rw-rw-r-- 1 username username 20 mai 26 10:24 le-fichier.txt
Pour commencer créons un lien vers le fichier qui se trouvera directement sous votre dossier ${HOME}
. Il y a deux maniÚres de créer un lien, on peut le faire soit de maniÚre absolue (avec le chemin du fichier depuis la racine du systÚme), soit depuis
cd "${HOME}"
ln -s "${HOME}/dossier_reel/le-fichier.txt" un-lien-vers-fichier-absolu
cd "${HOME}"
ln -s dossier_reel/le-fichier.txt un-lien-vers-fichier-relatif
Pour examiner les liens, on peut utiliser :
ls -l --color un-lien-vers-fichier-*
On obtiendra :
lrwxrwxrwx 1 username username 32 mai 26 11:12 un-lien-vers-fichier-absolu -> /home/username/dossier_reel/le-fichier.txt
lrwxrwxrwx 1 username username 19 mai 26 11:12 un-lien-vers-fichier-relatif -> dossier_reel/le-fichier.txt
On constate le l
en début de ligne qui indique un lien et en fin de ligne on trouve ->
suivit de la valeur du lien (lâoption --color
) permet de voir le lien en rouge lorsquâil ne peut pas ĂȘtre rĂ©solu.
Lien vers un répertoire
Avec la commande ln
, le processus est identique :
cd "${HOME}"
ln -s "${HOME}/dossier_reel" un-lien-sur-repertoire-absolu
cd "${HOME}"
ln -s dossier_reel un-lien-sur-repertoire-relatif
Examinons les liens :
ls -l --color un-lien-sur-repertoire-*
Cela donne :
lrwxrwxrwx 1 username username 17 mai 26 18:12 un-lien-sur-repertoire-absolu -> /home/username/dossier_reel
lrwxrwxrwx 1 username username 4 mai 26 18:11 un-lien-sur-repertoire-relatif -> dossier_reel
Regardons le contenu de ces liens, par exemple Ă lâaide de :
ls -laR --color un-lien-sur-repertoire-*/
Comme attendu, ils contiennent la mĂȘme chose :
un-lien-sur-repertoire-absolu/:
total 20
drwxrwxr-x 2 username username 4096 mai 26 22:03 .
drwxr----- 136 username username 12288 mai 28 07:08 ..
-rw-rw-r-- 1 username username 20 mai 28 07:10 le-fichier.txt
un-lien-sur-repertoire-relatif/:
total 20
drwxrwxr-x 2 username username 4096 mai 26 22:03 .
drwxr----- 136 username username 12288 mai 28 07:08 ..
-rw-rw-r-- 1 username username 20 mai 28 07:10 le-fichier.txt
Essayons de changer de rĂ©pertoire courant Ă lâaide de la commande cd
en utilisant lâun des liens vers un rĂ©pertoire :
cd "${HOME}/un-lien-sur-repertoire-absolu"
Cela se passe bien.
Eh bien, regardons quel est le chemin du dossier courant ?
pwd
Le chemin est celui qui passe par le lien, le systÚme traite les liens comme tout autre répertoire (enfin presque).
/home/username/un-lien-sur-repertoire-absolu
Si pour la suite vous utilisez la commande :
cd ..
Vous serez bien dans le répertoire parent du lien.
Lien symbolique vers un répertoire versus répertoire réel
Pour Ă©viter les parcours infinis, certaines commandes ne traitent pas les liens vers les rĂ©pertoires de la mĂȘme maniĂšre quâun rĂ©pertoire physique. Câest le cas en particulier de la commande find :
Si on recherche notre fichier
find "${HOME}"/ -maxdepth 3 -name 'le-fichier.txt' -ls
Le prédicat -maxdepth
sert à limiter le temps de recherche, sinon il y a de grande chance que find examine presque tout votre disque dur avec cet exemple. Là , il ne descend que 3 niveaux de répertoire.
Le prédicat '-ls' demande à la commande find
dâafficher son rĂ©sultat Ă la façon de la commande ls
.
On ne trouve quâun seul fichier sur le disque. Dâailleurs, câest vrai, il nây en a quâun seul prĂ©sent sur le disque.
11010885 4 -rw-rw-r-- 1 username username 20 mai 28 07:10 /home/username/dossier_reel/le-fichier.txt
Alors que
En ajoutant lâoption -L
(paramÚtre que vous devez mettre avant le chemin de départ de la recherche):
find -L "${HOME}"/ -maxdepth 3 -name 'le-fichier.txt' -ls
On obtient tous les moyens dâaccĂ©der au fichier :
11010885 4 -rw-rw-r-- 1 username username 20 mai 28 07:10 /home/username/un-lien-sur-repertoire-absolu/le-fichier.txt
11010885 4 -rw-rw-r-- 1 username username 20 mai 28 07:10 /home/username/dossier_reel/le-fichier.txt
11010885 4 -rw-rw-r-- 1 username username 20 mai 28 07:10 /home/username/un-lien-sur-repertoire-relatif/le-fichier.txt
Lâoption -L
demande Ă find de suivre les liens symboliques. Quand find analyse ou affiche les informations concernant un fichier, ce sont celles extraites des caractĂ©ristiques du fichier vers lequel mĂšne le lien, et non celle du lien lui-mĂȘme (sauf sâil sâagit dâun lien cassĂ©, ou si find est incapable dâanalyser le fichier vers lequel pointe le lien).
La commande find nâest pas la seule Ă ĂȘtre concernĂ©e par ce type dâexception.
En gĂ©nĂ©ral les commandes traitent les liens comme un fichier ou un rĂ©pertoire, sauf lorsque la commande sâintĂ©resse Ă la typologie du systĂšme de fichier.
Références
- đ Raccourcis Ă la Windows sous Linux
- đ Linux et les liens symboliques mortsâŠ
- Explaining Soft Link And Hard Link In Linux With Examples
- How do I do 'mount --bind' in /etc/fstab?
኿