Comment trouver la cible d'un lien symbolique

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce tutoriel vous guidera tout au long du processus de recherche de la cible d'un lien symbolique sur votre système Linux. Les liens symboliques, également connus sous le nom de « symlinks », sont des types spéciaux de fichiers qui servent de pointeurs vers d'autres fichiers ou répertoires. Ils sont couramment utilisés dans les systèmes Linux pour créer des raccourcis, organiser les fichiers et gérer les versions de logiciels.

À la fin de ce tutoriel, vous serez en mesure d'identifier les liens symboliques et de déterminer les fichiers ou répertoires vers lesquels ils pointent en utilisant diverses commandes Linux. Cette connaissance est essentielle pour une navigation et une gestion efficaces du système de fichiers dans les environnements Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/ln("Link Creating") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/find("File Searching") subgraph Lab Skills linux/ls -.-> lab-392854{{"Comment trouver la cible d'un lien symbolique"}} linux/ln -.-> lab-392854{{"Comment trouver la cible d'un lien symbolique"}} linux/cat -.-> lab-392854{{"Comment trouver la cible d'un lien symbolique"}} linux/cd -.-> lab-392854{{"Comment trouver la cible d'un lien symbolique"}} linux/find -.-> lab-392854{{"Comment trouver la cible d'un lien symbolique"}} end

Comprendre les liens symboliques

Les liens symboliques (symlinks) sont des fichiers spéciaux dans Linux qui pointent vers d'autres fichiers ou répertoires. Ils fonctionnent de manière similaire aux raccourcis dans d'autres systèmes d'exploitation, mais sont plus puissants et intégrés au système de fichiers.

Commençons par explorer les liens symboliques qui ont été configurés pour ce tutoriel. Tout d'abord, accédez au répertoire du projet :

cd ~/project/symlink-tutorial

Maintenant, listons les fichiers de ce répertoire pour voir ce que nous avons :

ls -la

Vous devriez voir une sortie similaire à celle-ci :

total 20
drwxr-xr-x 3 labex labex 4096 Jul 15 10:00 .
drwxr-xr-x 3 labex labex 4096 Jul 15 10:00 ..
lrwxrwxrwx 1 labex labex   12 Jul 15 10:00 broken-link.txt -> ../nonexistent-file.txt
lrwxrwxrwx 1 labex labex   13 Jul 15 10:00 dir-link -> test-directory
lrwxrwxrwx 1 labex labex   13 Jul 15 10:00 nested-link.txt -> simple-link.txt
-rw-r--r-- 1 labex labex   35 Jul 15 10:00 original.txt
lrwxrwxrwx 1 labex labex   10 Jul 15 10:00 passwd-link -> /etc/passwd
lrwxrwxrwx 1 labex labex   12 Jul 15 10:00 simple-link.txt -> original.txt
drwxr-xr-x 2 labex labex 4096 Jul 15 10:00 test-directory

Remarquez que les liens symboliques ont une apparence différente dans la liste :

  • Ils commencent par l dans les permissions de fichier (première colonne)
  • Leur nom est suivi d'une flèche (->) pointant vers leur cible
  • Ils ont généralement les permissions lrwxrwxrwx

Examinons le fichier simple-link.txt, qui est un lien symbolique vers original.txt. Vous pouvez voir le contenu de ce lien en utilisant la commande cat :

cat simple-link.txt

Sortie :

This is the original file content.

Même si vous accédez à simple-link.txt, vous voyez en fait le contenu de original.txt. C'est ainsi que fonctionnent les liens symboliques - ils redirigent transparemment l'accès vers leur cible.

Maintenant, essayons également le lien symbolique de répertoire :

ls -la dir-link

Sortie :

total 12
drwxr-xr-x 2 labex labex 4096 Jul 15 10:00 .
drwxr-xr-x 3 labex labex 4096 Jul 15 10:00 ..
-rw-r--r-- 1 labex labex   42 Jul 15 10:00 test-file.txt
lrwxrwxrwx 1 labex labex   16 Jul 15 10:00 relative-link.txt -> ../original.txt

Comme vous pouvez le voir, lorsque vous listez le contenu de dir-link, vous voyez en fait le contenu du répertoire test-directory vers lequel il pointe.

Utilisation de la commande ls pour identifier les liens symboliques

La commande ls avec des options spécifiques est l'un des moyens les plus simples d'identifier les liens symboliques et de voir vers quoi ils pointent. Explorons diverses façons d'utiliser ls à cette fin.

Liste avec l'option -l

L'option -l fournit une liste détaillée, montrant le lien et sa cible :

ls -l simple-link.txt

Sortie :

lrwxrwxrwx 1 labex labex 12 Jul 15 10:00 simple-link.txt -> original.txt

La flèche (->) montre que simple-link.txt pointe vers original.txt.

Liste de tous les fichiers avec l'option -la

Les options -la combinées listent tous les fichiers (y compris les fichiers cachés) avec des informations détaillées :

ls -la

Cela affiche tous les fichiers dans le répertoire actuel, y compris les liens symboliques et leurs cibles.

Liste colorée

La plupart des distributions Linux modernes configurent ls pour afficher différents types de fichiers en différentes couleurs. Les liens symboliques sont généralement affichés en bleu clair ou cyan. Vous pouvez utiliser :

ls --color=always

La sortie affichera les liens symboliques dans une couleur distincte.

Liste uniquement des liens symboliques

Vous pouvez utiliser la commande find pour lister uniquement les liens symboliques dans le répertoire actuel :

find . -maxdepth 1 -type l

Sortie :

./broken-link.txt
./dir-link
./nested-link.txt
./passwd-link
./simple-link.txt

Cette commande liste tous les liens symboliques dans le répertoire actuel (.) sans descendre dans les sous-répertoires (-maxdepth 1).

Examen d'un lien symbolique imbriqué

Regardons nested-link.txt, qui pointe vers un autre lien symbolique :

ls -l nested-link.txt

Sortie :

lrwxrwxrwx 1 labex labex 13 Jul 15 10:00 nested-link.txt -> simple-link.txt

Et simple-link.txt pointe vers :

ls -l simple-link.txt

Sortie :

lrwxrwxrwx 1 labex labex 12 Jul 15 10:00 simple-link.txt -> original.txt

Donc nested-link.txt pointe vers simple-link.txt, qui à son tour pointe vers original.txt. C'est un exemple de chaîne de liens symboliques.

Alors que la commande ls peut vous montrer vers quoi un lien symbolique pointe, la commande readlink est spécifiquement conçue à cet effet. Elle affiche la valeur d'un lien symbolique ou le nom canonique d'un fichier.

L'utilisation la plus basique de readlink consiste à fournir le nom du lien symbolique :

readlink simple-link.txt

Sortie :

original.txt

Cela montre que simple-link.txt pointe vers original.txt.

Lecture de liens symboliques imbriqués

Pour les liens symboliques imbriqués, la commande de base readlink ne vous donne que la cible immédiate :

readlink nested-link.txt

Sortie :

simple-link.txt

Pour suivre toute la chaîne de liens jusqu'à la cible finale, utilisez l'option -f (suivre) :

readlink -f nested-link.txt

Sortie :

/home/labex/project/symlink-tutorial/original.txt

Cela montre le chemin complet jusqu'au fichier cible final.

Gestion des chemins relatifs

Examinons un lien symbolique avec un chemin relatif :

ls -l test-directory/relative-link.txt

Sortie :

lrwxrwxrwx 1 labex labex 16 Jul 15 10:00 test-directory/relative-link.txt -> ../original.txt

L'utilisation de readlink avec l'option -f résout le chemin relatif :

readlink -f test-directory/relative-link.txt

Sortie :

/home/labex/project/symlink-tutorial/original.txt

Traitement des liens brisés

Parfois, les liens symboliques pointent vers des fichiers qui n'existent pas. Vérifions notre lien brisé :

readlink broken-link.txt

Sortie :

../nonexistent-file.txt

La commande readlink montre toujours vers quoi le lien brisé pointe, même si la cible n'existe pas.

L'utilisation de readlink -f avec un lien brisé tentera de résoudre le chemin mais indiquera toujours qu'il est brisé :

readlink -f broken-link.txt

Sortie :

/home/labex/project/nonexistent-file.txt

La commande readlink propose plusieurs options utiles :

  • -e : Retourne le chemin canonisé uniquement s'il existe
  • -m : Ne pas déréférencer les liens symboliques, afficher le chemin du lien symbolique même s'il pointe vers un fichier inexistant
  • -n : Ne pas afficher le caractère de fin de ligne
  • -v : Sortie détaillée

Exemple d'utilisation de l'option -e :

readlink -e broken-link.txt

Cela ne donnera aucune sortie car le fichier cible n'existe pas.

Méthodes alternatives pour trouver les cibles des liens symboliques

En plus de ls et readlink, il existe plusieurs autres commandes que vous pouvez utiliser pour déterminer la cible d'un lien symbolique. Explorons ces alternatives.

Utilisation de la commande file

La commande file identifie le type d'un fichier, y compris les liens symboliques :

file simple-link.txt

Sortie :

simple-link.txt: symbolic link to original.txt

Cela indique clairement que simple-link.txt est un lien symbolique pointant vers original.txt.

Essayons avec un lien de répertoire :

file dir-link

Sortie :

dir-link: symbolic link to test-directory

La commande file fonctionne avec les liens de fichiers et de répertoires.

Utilisation de la commande realpath

La commande realpath affiche le chemin résolu d'un fichier, ce qui est utile pour trouver la cible finale des liens symboliques :

realpath simple-link.txt

Sortie :

/home/labex/project/symlink-tutorial/original.txt

Cela montre le chemin absolu du fichier cible.

Pour les liens imbriqués, realpath suit automatiquement toute la chaîne :

realpath nested-link.txt

Sortie :

/home/labex/project/symlink-tutorial/original.txt

Utilisation de la commande stat

La commande stat fournit des informations détaillées sur un fichier, y compris s'il s'agit d'un lien symbolique :

stat simple-link.txt

Sortie (partielle) :

  File: simple-link.txt -> original.txt
  Size: 12        	Blocks: 0          IO Block: 4096   symbolic link
...

Cette sortie montre que simple-link.txt est un lien symbolique pointant vers original.txt.

Création d'un lien symbolique de test

Créons un nouveau lien symbolique pour pratiquer :

ln -s /etc/hostname my-hostname

Cela crée un lien symbolique appelé my-hostname qui pointe vers le fichier /etc/hostname.

Maintenant, utilisons les commandes que nous avons apprises pour examiner ce nouveau lien :

ls -l my-hostname

Sortie :

lrwxrwxrwx 1 labex labex 12 Jul 15 11:00 my-hostname -> /etc/hostname
readlink my-hostname

Sortie :

/etc/hostname
file my-hostname

Sortie :

my-hostname: symbolic link to /etc/hostname
cat my-hostname

Sortie (exemple, votre nom d'hôte peut être différent) :

labex-ubuntu

En utilisant ces diverses méthodes, vous pouvez facilement trouver la cible de n'importe quel lien symbolique dans votre système Linux.

Applications pratiques et utilisation avancée

Maintenant que vous savez comment trouver la cible des liens symboliques, explorons quelques applications pratiques et scénarios d'utilisation avancée.

Gestion des liens symboliques profondément imbriqués

Pour les liens profondément imbriqués (un lien pointant vers un autre lien, qui pointe à son tour vers un autre lien, et ainsi de suite), l'option -f de readlink est essentielle :

## Create a chain of links
ln -s original.txt link1.txt
ln -s link1.txt link2.txt
ln -s link2.txt link3.txt

## Check the chain
readlink -f link3.txt

Sortie :

/home/labex/project/symlink-tutorial/original.txt

Recherche de tous les liens symboliques dans un répertoire

Pour trouver tous les liens symboliques dans un répertoire et ses sous-répertoires :

find /home/labex/project/symlink-tutorial -type l

Cette commande recherche tous les éléments de type l (liens symboliques) dans le répertoire spécifié et ses sous-répertoires.

Recherche et suivi des liens symboliques

Pour trouver tous les liens symboliques et voir vers quoi ils pointent :

find /home/labex/project/symlink-tutorial -type l -ls

Cette commande combine find avec l'option -ls pour fournir une liste détaillée de chaque lien symbolique.

Modification de fichiers via des liens symboliques

Lorsque vous modifiez un fichier via un lien symbolique, vous modifiez en réalité le fichier cible. Illustrons cela :

## Display the original content
cat original.txt

Sortie :

This is the original file content.
## Append to the file through the symbolic link
echo "Line added through symlink." >> simple-link.txt

## Check the original file
cat original.txt

Sortie :

This is the original file content.
Line added through symlink.

La modification apportée via le lien symbolique apparaît dans le fichier original.

Remplacement de liens symboliques

Si vous avez besoin de mettre à jour un lien symbolique pour qu'il pointe vers une autre cible, vous pouvez utiliser l'option -f avec ln -s :

## Create a new file
echo "This is a new target file." > new-target.txt

## Update the symlink
ln -sf new-target.txt simple-link.txt

## Check what the link points to now
readlink simple-link.txt

Sortie :

new-target.txt

Nettoyage

Nettoyons les fichiers que nous avons créés dans cette étape :

rm link1.txt link2.txt link3.txt new-target.txt

Quand utiliser les liens symboliques

Les liens symboliques sont utiles dans de nombreuses situations :

  • Création de raccourcis vers des fichiers ou des répertoires fréquemment utilisés
  • Gestion de plusieurs versions de fichiers ou de logiciels
  • Création de chemins de fichiers plus intuitifs
  • Liaison avec des fichiers de configuration
  • Organisation de fichiers sur différents systèmes de fichiers

En maîtrisant les techniques de recherche des cibles de liens symboliques, vous serez mieux équipé pour gérer et naviguer efficacement dans le système de fichiers Linux.

Résumé

Dans ce tutoriel, vous avez appris à trouver la cible des liens symboliques dans Linux en utilisant diverses méthodes :

  1. Utilisation de la commande ls -l pour identifier les liens symboliques et voir leurs cibles
  2. Utilisation de la commande readlink pour afficher la valeur d'un lien symbolique
  3. Utilisation de readlink -f pour suivre toute la chaîne de liens symboliques jusqu'à la cible finale
  4. Exploration de méthodes alternatives telles que file, realpath et stat
  5. Traitement d'applications pratiques et de scénarios d'utilisation avancée

Ces compétences sont essentielles pour une gestion efficace du système de fichiers dans Linux. Les liens symboliques offrent de la flexibilité et de la commodité dans l'organisation des fichiers et des répertoires, et comprendre comment les manipuler est une partie importante de l'administration système Linux et de l'utilisation quotidienne.

Maintenant, vous avez les connaissances nécessaires pour identifier, créer et gérer avec confiance les liens symboliques dans votre environnement Linux.