Les liens sous Linux

Les liens sous linux sont des fichiers qui pointent vers le même fichier.

Il en existe de 2 types

  • lien matériel (hard link)
  • lien symbolique (soft|symbolic link)

Les liens

Un hard link est juste un autre nom de fichier qui pointe vers les mêmes données.

Pour créer un hard link :

# ln myfile.txt myfile-hardLink01.txt

Spécificités

Les hard link :

  • Pointent vers les mêmes données
  • Ont les mêmes numéros d’inode
    • Donc si un fichier linké modifié alors tous le seront
    • Les données seront consultables depuis n’importe quels fichiers s’il en reste au moins un
  • Ne s’utilisent qu’avec les fichiers de type file (Pas de dossier, pas de pipe, etc.)
  • Ne s’utilisent que sur le même système de fichiers

Un lien symbolique est un type de fichier spécial qui pointe vers un fichier ou un répertoire existant.

Pour créer un soft link :

# ln myfile.txt -s myfile-softLink01.txt

Spécificités

Les soft link :

  • Type de fichier spécial pointant vers un fichier ou un répertoire existant
  • Ont des numéros d’inode différents
  • S’utilisent avec n’importe quels types de fichiers
  • S’utilisent sur des systèmes de fichiers différents

Listing

Pour voir s’il s’agit d’un soft ou d’un hard link, l’option -i de ls permet de voir les inodes identiques :

# ls -li
total 20
18887 -rw-r--r--. 2 root root 0 Oct 18 10:21 file01
18888 -rw-r--r--. 4 root root 12 Oct 18 10:23 file02 // inode de 18888
18889 -rw-r--r--. 1 root root 45 Oct 18 11:06 file03
18887 -rw-r--r--. 2 root root 0 Oct 18 10:21 hard_file01-a
18888 -rw-r--r--. 4 root root 12 Oct 18 10:23 hard_file02-a // inode de 18888
18888 -rw-r--r--. 4 root root 12 Oct 18 10:23 hard_file02-b // inode de 18888
18888 -rw-r--r--. 4 root root 12 Oct 18 10:23 hard_file02-e // inode de 18888
18890 lrwxrwxrwx. 1 root root 6 Oct 18 10:31 softLink-file03 -> file03
18891 lrwxrwxrwx. 1 root root 6 Oct 18 10:34 softLink-file04 -> file03

On peut voir 4 hard links sur les fichiers ayant l’inode de 18888.

/!\ Résumé des commandes

HardLink SoftLink
Accessible en utilisant plusieurs noms Références pointant vers le fichier originel
Données supprimées = lien accessible Fichier d’origine supprimé = lien invalide
N° d’inode simlaire N° d’inode différent
ln fichier nomHardLink ln -s fichier nomSoftLink
Consomme moins de mémoire Consomme plus de mémoire
Même systèmes de fichiers Différents systèmes de fichiers et en réseaux
Pas de chemin relatif Chemin relatif

Affiche les n° d’inodes :

# ls -li

Supprimer un lien :

# unlink <NomFichier>

Attention : s’il s’agit d’un hardlink, le fichier ciblé sera supprimé.

Cas pratiques

Création d’un lien matériel MyFile.txt pour le fichier MyFile.txt.backup :

[aline@SERVER01 ~]$ ln MyFile.txt MyFile.txt.backup

Afficher le nombre de liens du fichier d’origine MyFile.txt et du nouveau fichier lié MyFile.txt.backup. Le nombre de liens est de 2 pour les fichiers :

[aline@SERVER01 ~]$ ls -li
total 0
33558816 -rw-r--r--. 2 aline aline 0 Sep 8 09:41 MyFile.txt
33558816 -rw-r--r--. 2 aline aline 0 Sep 8 09:41 MyFile.txt.backup

Suppression :

[aline@SERVER01 ~]$ unlink MyFile.txt.backup

Le fichier a été supprimé :

[aline@SERVER01 ~]$ ls -li
total 0
33558816 -rw-r--r--. 1 aline aline 0 Sep 8 09:41 MyFile.txt

Création de liens symboliques appelés MyTemp0* qui pointent vers le répertoire /tmp :

[aline@SERVER01]$ ln -s /tmp MyTemp01
[aline@SERVER01]$ ln -s /tmp MyTemp02
[aline@SERVER01]$ ln -s /tmp MyTemp03

Vérification :

[aline@SERVER01]$ ls -li
total 0
68406600 lrwxrwxrwx. 1 aline aline 4 Sep 8 09:54 MyTemp01 -> /tmp
68406617 lrwxrwxrwx. 1 aline aline 4 Sep 8 09:54 MyTemp02 -> /tmp
68406622 lrwxrwxrwx. 1 aline aline 4 Sep 8 09:54 MyTemp03 -> /tmp

Suppression :

[aline@SERVER01 ~]$ unlink MyTemp01

Le fichier a été supprimé :

[aline@SERVER01]$ ls -li
total 0
68406617 lrwxrwxrwx. 1 aline aline 4 Sep 8 09:54 MyTemp02 -> /tmp
68406622 lrwxrwxrwx. 1 aline aline 4 Sep 8 09:54 MyTemp03 -> /tmp

Création de liens symboliques appelés MyFileSoft0*.txt qui pointent vers le fichier MyFile.txt :

[aline@SERVER01]$ ln -s MyFile.txt MyFileSoft01.txt
[aline@SERVER01]$ ln -s MyFile.txt MyFileSoft02.txt
[aline@SERVER01]$ ln -s MyFile.txt MyFileSoft03.txt

Vérification :

[aline@SERVER01]$ ls -li
total 0
68406630 lrwxrwxrwx. 1 aline aline 10 Sep 8 09:57 MyFileSoft01.txt -> MyFile.txt
68406631 lrwxrwxrwx. 1 aline aline 10 Sep 8 09:57 MyFileSoft02.txt -> MyFile.txt
68406632 lrwxrwxrwx. 1 aline aline 10 Sep 8 09:57 MyFileSoft03.txt -> MyFile.txt

Suppression :

[aline@SERVER01 ~]$ unlink MyFileSoft01.txt

Le fichier a été supprimé :

[aline@SERVER01]$ ls -li
total 0
68406631 lrwxrwxrwx. 1 aline aline 10 Sep 8 09:57 MyFileSoft02.txt -> MyFile.txt
68406632 lrwxrwxrwx. 1 aline aline 10 Sep 8 09:57 MyFileSoft03.txt -> MyFile.txt

Création de FILE.txt et de 3 liens symboliques file*.txt :

[aline@SERVER01] ~ $ touch FILE.txt
[aline@SERVER01] ~ $ ln -s FILE.txt file1.txt
[aline@SERVER01] ~ $ ln -s FILE.txt file2.txt
[aline@SERVER01] ~ $ ln -s FILE.txt file3.txt

Vérification :

[aline@SERVER01] ~ $ ls -l
total 16
lrwxrwxrwx 1 aline sysadim 8 Sep 9 11:13 file1.txt -> FILE.txt
lrwxrwxrwx 1 aline sysadim 8 Sep 9 11:13 file2.txt -> FILE.txt
lrwxrwxrwx 1 aline sysadim 8 Sep 9 11:13 file3.txt -> FILE.txt
-rw-r--r-- 1 aline sysadim 0 Sep 9 11:11 FILE.txt

Ajout de texte dans FILE.txt et file2.txt, tous les fichiers on été modifiés :

[aline@SERVER01] ~ $ echo "SOME TEXT" >> FILE.txt
[aline@SERVER01] ~ $ echo "some text in file2" >> file2.txt
[aline@SERVER01] ~ $ tail *.txt
==> file1.txt <==
SOME TEXT
some text in file2

==> file2.txt <==
SOME TEXT
some text in file2

==> file3.txt <==
SOME TEXT
some text in file2

==> FILE.txt <==
SOME TEXT
some text in file2

En vérifiant on constate que la taille des liens symbolique ne change pas, seulement celle de FILE.txt à augmentée :

[aline@SERVER01] ~ $ ls -l
total 16
lrwxrwxrwx 1 aline sysadim 8 Sep 9 11:13 file1.txt -> FILE.txt
lrwxrwxrwx 1 aline sysadim 8 Sep 9 11:13 file2.txt -> FILE.txt
lrwxrwxrwx 1 aline sysadim 8 Sep 9 11:13 file3.txt -> FILE.txt
-rw-r--r-- 1 aline sysadim 29 Sep 9 11:31 FILE.txt

Documentation

https://n0tes.fr/2023/03/05/Commande-ln-liens/
https://n0tes.fr/2023/03/05/Snippet-Commande-lister-liens/

MAN ln(1)

> Partager <