Comment différencier un lien symbolique (soft) d’un lien en dur sous Linux. Pour rappel, un lien se créé avec la commande ln
. Pour les dossiers, seuls les liens symboliques sont possibles :
# ln MonFichier hardLink |
Différences HardLink et SoftLink
HardLink | SoftLink |
---|---|
Accessible en utilisant plusieurs noms | Accessible par de nombreuses références pointant vers le fichier originel |
Si fichier d’origine supprimé : lien toujours accessible | Si fichier d’origine supprimé : lien invalide |
N° d’inode simlaire | N° d’inode différent |
ln fichier nomLien |
ln -s fichier nomLien |
Consomme moins de mémoire | Consomme plus de mémoire |
Lié qu’à sa propre partition | Peut être lié à d’autres systèmes de fichiers et être mis en réseau |
Pas de chemin relatif | Chemin relatif |
Suivre les liens symboliques
Il existe 4 commandes pouvant donner des détails sur un lien :
# ls |
Commande ls
Pour lister les liens symboliques, l’utilisation de -l
affichera la lettre l
en début de chaque ligne :
# ls -l |
Pour lister les liens symboliques, l’utilisation de -F
affichera le caratère @
en fin de chaque lien :
# ln -F |
Exemple :
# ls -F |
Les soft links ont des inodes différents alors que ceux des hard links sont similaires :
# ls -li |
Commande readlink
La commande readlink
affiche le chemin réel d’un lien symbolique ou le nom canonique d’un fichier
# readlink FichierSoftLink1 |
Commande realpath
La commande realpath
affiche le chemin absolu d’un fichier
# realpath repertoireSoftLink1 |
Commande file
La commande file
détermine le type d’un fichier
file FichierSoftLink2 |
Commande stat
La commande stat
affiche l’état d’un fichier ou d’un système de fichiers
# stat FichierSoftLink2 |
Lister les HardLink et les Softlink
Lister tous les liens en dur, la commande awk
permet de lister les mêmes inodes en récupérant le champs %i
de stat
:
stat -c '%i %n' * | awk 'Doublon[$1]++' | cut -d ' ' -f 2- |
En inversant la commande, uniquement tous les liens symboliques peuvent être listés, (mais ainsi que les répertoires et les fichiers, qui ont leur unique inode):
stat -c '%i %n' * | awk '!Doublon[$1]++' | cut -d ' ' -f 2- |
Documentation
https://unix.stackexchange.com/questions/167610/determining-if-a-file-is-a-hard-link-or-symbolic-link
https://linuxhandbook.com/symbolic-link-linux/
https://linuxhandbook.com/follow-symbolic-link/
https://www.tutorialspoint.com/unix_commands/ls.htm
https://www.tutorialspoint.com/difference-between-hard-link-and-soft-link
https://stackoverflow.com/questions/16282618/finding-files-that-are-not-hard-links-via-a-shell-script