Bien qu'un peu moins courante, la commande
ln
vous sera certainement utile un jour ou l'autre. Elle permet de créer des liens entre des fichiers, c'est-à-dire (pour employer des mots que vous connaissez) qu'elle permet de créer des raccourcis.
Ces « raccourcis », qu'on appelle des liens sous Linux, sont un peu plus complexes que ceux que vous avez l'habitude de voir sous Windows. En effet, on peut créer deux types de liens :
- des liens physiques ;
- des liens symboliques.
Ces deux types ne fonctionnent pas de la même manière. Pour comprendre ce qui les différencie, il faut savoir comment un OS tel que Linux gère les fichiers sur le disque dur.
Allons, allons, ne faites pas cette tête-là, un peu de théorie sur le fonctionnement des OS, c'est toujours très intéressant ! :-)
Allons, allons, ne faites pas cette tête-là, un peu de théorie sur le fonctionnement des OS, c'est toujours très intéressant ! :-)
Le stockage des fichiers
Sur le disque dur, chaque fichier est grosso-modo séparé en deux parties :
- son nom ;
- son contenu.
Vous avez bien lu : la liste des noms de fichiers est stockée à un autre endroit que leur contenu. Cette séparation aide Linux à s'organiser.
Chaque contenu de fichier se voit attribuer un numéro d'identification appelé inode (figure suivante). Chaque nom de fichier est donc associé à un inode (son contenu).
C'est tout ce que vous avez besoin de savoir pour comprendre la suite.
Nous allons maintenant découvrir comment créer des liens physiques puis des liens symboliques.
Créer des liens physiques
Ce type de lien est plus rarement utilisé que le lien symbolique, mais il faut tout de même le connaître car il peut se révéler pratique.
Un lien physique permet d'avoir deux noms de fichiers qui partagent exactement le même contenu, c'est-à-dire le même inode (figure suivante).
Ainsi, que vous passiez par
fichier1
ou par fichier2
, vous modifiez exactement le même contenu. En quelque sorte, le fichier est le même. On peut juste y accéder via deux noms de fichiers différents.
Pour créer un lien physique, nous allons utiliser la commande
ln
. Je vous propose tout d'abord de créer un répertoire pour nos tests :mkdir tests
cd tests
Une fois dans ce dossier, créez un fichier avec la commande
touch
par exemple :touch fichier1
Nous voulons maintenant créer un lien physique : nous allons créer un
fichier2
qui partagera le même inode (le même contenu) que fichier1
. Tapez :ln fichier1 fichier2
Si vous listez les fichiers du répertoire, vous avez l'impression d'avoir deux fichiers différents :
mateo21@mateo21-desktop:~/tests$ ls -l
total 0
-rw-r--r-- 2 mateo21 mateo21 0 2008-07-31 13:55 fichier1
-rw-r--r-- 2 mateo21 mateo21 0 2008-07-31 13:55 fichier2
A priori, rien ne nous permet ici de deviner que ces fichiers modifient le même contenu. Le lien physique est donc un lien dur, pas évident à détecter au premier coup d’œil.
Si vous supprimez un des deux fichiers, l'autre fichier reste en place et le contenu sera toujours présent sur le disque. L'inode est supprimé uniquement quand plus aucun nom de fichier ne pointe dessus.
En clair, supprimez
En clair, supprimez
fichier1
pour voir. Vous verrez que fichier2
existe toujours et qu'il affiche toujours le même contenu. Il faut supprimer fichier1
ETfichier2
pour supprimer le contenu.Créer des liens symboliques
Les liens symboliques ressemblent plus aux « raccourcis » dont vous avez peut-être l'habitude sous Windows. La plupart du temps, on crée des liens symboliques sous Linux pour faire un raccourci, et non des liens physiques qui sont un peu particuliers.
Le principe du lien symbolique est que l'on crée un lien vers un autre nom de fichier. Cette fois, on pointe vers le nom de fichier et non vers l'inode directement .
Supprimez le
fichier2
que nous avons créé tout à l'heure (sous forme de lien physique) :rm fichier2
Créons maintenant un nouveau
fichier2
, cette fois sous forme de lien symbolique. On utilise là encore la commande ln
, mais avec le paramètre -s
(s comme symbolique) :ln -s fichier1 fichier2
Cette fois, la commande détaillée
ls -l
sera beaucoup plus précise :mateo21@mateo21-desktop:~/tests$ ls -l
total 0
-rw-r--r-- 1 mateo21 mateo21 0 2008-07-31 13:55 fichier1
lrwxrwxrwx 1 mateo21 mateo21 8 2008-07-31 14:15 fichier2 -> fichier1
On note deux choses :
- la toute première lettre de la seconde ligne est un
l
(comme link, c'est-à-dire lien) ; - tout à la fin de la seconde ligne, une flèche montre clairement que
fichier2
pointe versfichier1
.
Bref, les liens symboliques sont beaucoup plus faciles à repérer que les liens physiques !
Ok, mais quelles différences à part ça ? Le résultat revient au même, non ? Qu'on ouvre
fichier1
ou fichier2
, on éditera le même contenu au final !
Tout à fait. Il y a quand même quelques subtilités :
- par exemple, si vous supprimez
fichier2
, il ne se passe rien de mal. Par contre, si vous supprimezfichier1
,fichier2
pointera vers un fichier qui n'existe plus. Le lien symbolique sera cassé et ne servira donc plus à rien. On parle de « lien mort » ; - d'autre part, l'avantage des liens symboliques est qu'ils fonctionnent aussi sur des répertoires, contrairement aux liens physiques.
En résumé
cat
permet d'afficher tout le contenu d'un fichier, mais lorsque celui-ci est long, il est préférable d'utiliserless
qui affiche le fichier page par page.- On peut obtenir uniquement le début ou la fin d'un fichier avec
head
ettail
. En utilisanttail -f
on peut suivre l'évolution d'un fichier en temps réel, ce qui est utile sur les fichiers de log qui enregistrent l'activité du système. mkdir
permet de créer un dossier,touch
permet de créer un fichier vide.cp
permet de copier un fichier ou un dossier, tandis quemv
permet de les déplacer ou de les renommer.rm
supprime un fichier. Il n'y a pas de corbeille en console, la suppression est définitive ; il faut donc être prudent.- On peut créer des liens (raccourcis) vers des fichiers et dossiers à l'aide de la commande
ln
.