cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu
đŸ˜€ Ce billet a Ă©tĂ© Ă©ditĂ© le : 2024-09-02

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

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog