Les liens symboliques (symlinks) sont omniprésents sur Linux. Cette leçon vous montre comment les utiliser efficacement pour organiser vos fichiers et simplifier votre quotidien.
La commande ln -s crée un lien symbolique qui pointe vers un autre fichier ou dossier.
ln -s /chemin/vers/fichier lien_name# Créer un lien vers un fichier
ln -s /var/log/syslog logs_actuels
# Vérifier que le lien existe
ls -la logs_actuels
# lrwxrwxrwx 1 user user 13 Apr 28 08:00 /home/user/logs_actuels -> /var/log/syslog# Au lieu de taper le chemin complet à chaque fois
ln -s /mnt/sandbox/experiments/scripts mes_scripts
# Maintenant vous pouvez faire
cd mes_scripts
./deploy.sh# Vous avez plusieurs versions installées
ls /opt/mon_app/
# 1.0.0 2.1.0 3.0.0
# Créer un lien "version actuelle"
ln -s /opt/mon_app/3.0.0 /opt/mon_app/current
# Vos scripts utilisent toujours /opt/mon_app/current
# Pour changer de version, modifiez juste le lien# Organiser un projet
mkdir ~/mon_projet
cd ~/mon_projet
ln -s /media/donnees/partagees data
# Le contenu distant apparaît comme un dossier local
cd data && lsPlusieurs indices révèlent un lien symbolique :
-> dans ls -lal en premier caractère des permissions# Identifier visuellement
ls -la | grep "^l"
# Avec la commande file
file mon_lien
# mon_lien: symbolic link to /chemin/vers/cible| Caractéristique | Lien symbolique | Lien dur |
|---|---|---|
| Commande | ln -s | ln |
| Peut traverser partitions | Oui | Non |
| Peut pointer vers un dossier | Oui | Non |
| Survit si la cible est supprimée | Non (lien brisé) | Oui |
| Inode différent | Oui | Non (même inode) |
Quand une cible est supprimée, le lien devient "orphelin". Voici comment les détecter :
# Trouver les liens cassés dans le répertoire courant
find . -type l ! -exec test -e {} \; -print
# Ou avec une approche plus lisible
find . -type l -xtype l
# Dans tout le système (nécessite sudo)
sudo find /home -type l -xtype lLes liens ne sont pas modifiables — il faut les recréer :
# Supprimer un lien (ne supprime PAS le fichier cible)
rm mon_lien
# Ou
unlink mon_lien
# Recréer avec une nouvelle cible
ln -s /nouveau/chemin mon_lienQuand vous copiez un dossier contenant des liens, utilisez -L ou -P selon votre besoin :
# -L : copier le contenu des liens (suivre)
cp -Lr liens/ destination/
# -P : garder les liens tels quels
cp -Pr liens/ destination/
# -s : créer automatiquement des liens symboliques vers les fichiers copiés
cp -s * ../destination/# Structure typique d'un projet
~/projet/
├── code/ # Scripts sources
├── data/ # Lien vers données (montage réseau)
├── logs/ # Lien vers /var/log/projet
├── releases/ # Versions compilées
│ ├── current -> releases/3.2.1 # Lien vers version actuelle
│ └── 3.2.1/
└── README.md
# Le lien "current" permet de changer de version sans modifier les scripts
# Pour mettre à jour : rm current && ln -s releases/3.3.0 currentln -s cible nom | Créer un lien symbolique |
ls -la | grep "^l" | Trouver les liens dans le dossier |
file lien | Vérifier le type et la cible |
find . -type l -xtype l | Trouver les liens cassés |
rm lien | Supprimer le lien (pas la cible) |