Créer un lien symbolique sous Linux
I. Présentation
Dans ce tutoriel, nous allons apprendre à faire des liens symboliques entre des répertoires et des fichiers.
Un lien symbolique se rapproche d’une copie directe ou d’un raccourci. Un répertoire ou un fichier est l’exacte copie (en temps réelle) d’un autre. Souvent les liens symboliques sont utilisés pour simplifier les arborescences (nom de répertoire ou de fichier trop complexe ou mal placés).
II. Lien symbolique entre répertoire
D'une manière générale, voici comment utiliser la commande "ln" pour créer un lien symbolique :
ln -s dossier_cible nom_du_lien
Dans le contexte de mon exemple, je souhaite qu'en allant sur le répertoire /opt/jdk, j'atterrisse en réalité sur /opt/jdk1_7.2. Cela permet de facilement gérer le changement de version de JAVA. Mais ce n'est qu'un exemple 🙂
Nous allons commencer par créer lien symbolique entre deux répertoires. Nous utiliserons pour cela la commande « ln » (links) :
ln –s /root/jdk1_7.2 /root/jdk
Le lien symbolique "/root/jdk" sera alors créé.
Note : Il faut que le dossier « /root/jdk» n’existe pas au moment de la création du lien, il sera créé lors de la construction du lien.
Nous verrons alors avec la commande « ls –l » le résultat de notre lien :
root@debian:/opt# ls -al total 1600 drwxr-xr-x 9 root root 4096 sept. 5 13:45 . drwxr-xr-x 22 root root 4096 oct. 22 2015 .. lrwxrwxrwx 1 root root 14 sept. 5 13:45 jdk -> /opt/jdk1_7.2/ drwxr-xr-x 2 root root 4096 sept. 5 13:44 jdk1_7.2
On voit donc bien ici que le dossier « jdk» se réfère au dossier « jdk_1_7.2». On remarque d’ailleurs bien que lors de la commande « ls –l », nous voyons un « l » au tout début qui indique que le dossier est un lien. Pour un test supplémentaire, nous pouvons créer un fichier « file1 » dans le dossier « jdk » et nous verrons qu’il sera créé également dans « jdk1_7.2» :
Pour supprimer un lien symbolique, il faut supprimer le répertoire de destination (ici « dest »).
III. Lien symbolique entre deux fichiers
Nous allons maintenant créer un lien symbolique entre deux fichiers. Le principe sera le même, un fichier « file_001_lien_symbolique» sera un lien (raccourci) vers un autre « file_001» :
ln –s file_001 file_001_lien_symbolique
C'est tout pour cet article, les liens symboliques sont très utiles pour simplifier la gestion d'un serveur, notamment lors des migrations, un lien symbolique pointant vers une instance N ou N-1 à modifier en cas de volonté de rollback par exemple 🙂
J’ai peut-être mal compris, mais tu écris dans II. que « source » sera un lien symbolique vers « dest », donc dest serait un répertoire existant ?
On créé un lien symbolique « source », qui pointera vers un répertoire existant « dest » si on comprend bien cette phrase, non ?
Puis dans le cadre rouge il y a écrit que dest ne doit pas exister et sera créé avec le lien….
La commande ln est ainsi si je ne me trompe pas :
ln -s [existing/directory] [new/link/directory] non ? donc ce que tu as écrit est faux : selon ta commande, c’est dest qui sera le lien symbolique vers source, ce pourquoi en effet il n’existe pas avant la création du lien, comme précisé dans le cadre rouge…
Je pense qu’il y a une confusion entre dest et source, soit dans la première phrase, soit dans la commande et dans le cadre rouge. D’ailleurs, je trouverais ça plus logique que ton lien soit au final « source -> dest », plutôt que « dest -> source » comme ce que l’on retrouve dans la capture …
En fait je pense que le terme « source » est ambigüe selon le point de vue, d’où la confusion : dans une certaine mesure la source peut être le lien sur lequel on pointe pour aller qq part, ou il peut être l’origine vers laquelle on veut aller avec le lien. Tandis que le terme « destination » lui n’est pas ambigüe, c’est là où on va, cad le répertoire existant.
Erreur dans la commande:
ln –s /root/source/ /root/dest
La correction est:
ln –s /root/source /root/dest
Premier lien google et l ‘explication est fausse
ln -s dossier_cible nom_du_lien
Bonjour, la dénomination « source » et « dest » pose en effet des problèmes de compréhension de l’article. Celui-ci a été modifié en conséquence.
Merci pour votre remarque.
Bonjour,
D’abord, cette commande a quelle endroit doit-on la mettre.
Dans quel fichier ?
Et par exemple :
si on veut que le dossier image du s-domaine A soit un répertoire raccourci du dossier image du domaine.
idem pour b, c etc
à quel endroit et dans quel fichier doit-on écrire ce code.
à la racine du serveur.
dans le .htaccess de chaque s-domaine ?
Suis nul mais je me corrige(smile)
excellent article franchement j’ai bien compris ce notion de lien symbolique il fallait just mentionner comme quoi que le fichier source et le fichier qui pointe sur ce dernier vont partager le meme inode du coup si en supprime le fichier source en aura plus de contenue dans le lien symbolique
effectivement, le lien symbolique d’un fichier (ou répertoire) synchronise les modifications d’un fichier d’un sens comme dans l’autre et si on supprime le fichier source, le lien symbolique pointant sur ce fichier source ne fonctionnera plus car il ne pointe sur aucun fichier à présent.
Néanmoins, il est possible de garder les données contenues dans un dossier ou fichier en utilisant la commande ln (sans l’option -s) :
$ ln source destination
Cela va créer un lien en dure, un fichier (ou dossier) sera créé, la synchronisation se fera normalement, mais quand le fichier (ou dossier) source sera supprimé, le fichier qui pointait sur ce fichier source conservera les données synchronisé et on pourra l’ouvrir, le modifier, etc…
Rectification : la commande ln pour les lien en dure ne fonctionne qu’avec les fichiers et non les répertoires !