logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Ceci est une ancienne révision du document !


LN

La commande ln établit un lien symbolique ou un lien physique entre 2 fichiers ou répertoires créés ou ajoutés.

Son utilisation correspond à une redirection active entre deux fichiers désignés.

Les modifications opérées sur/dans l'un sont visibles immédiatement depuis l'un ou l'autre des fichiers liés.

Synopsis

 ln [option] <cible> <lien>
Lien symbolique :
 ln -s <fichier_cible> <fichier_symbole>
 ln -s <répertoire_cible> <répertoire_symbole>
 ln -s <point_cible> <point_symbole>
Lien physique :
 ln <fichier_cible> <fichier_lié>

Remarque Importante

Les liens symboliques (symlink) peuvent lier :

  • des fichiers
  • des répertoires
  • et tout ce qui se nomment…

entre des systèmes différents, car ils sont gérés au niveau de l'OS (Operating System = Système d'exploitation = Linux ici).



Les liens physiques (hardlink) ne peuvent lier :

  1. que des fichiers
  2. et que dans le même système de fichiers (une partition par exemple, ou un même système de fichiers en réseau…),

car ils sont eux gérés au niveau du FS (File System = Système de fichiers).

Nota :
Il semble que le système de fichier privateur ntfs ne soit pas capable de gérer des hardlink (ni des symlink) avec lui-même, sinon d'une manière incomplète et très très à la con en fait. :-)

Merci de ces remarques habiles au concert de Mahoru`Tsunemi et de captnfab sur l'IRC.

Illustration pratique

Débutant - À savoir :

Et oui, tout ça cher Débutant ! Il reste que la plupart de ces commandes sont les commandes en ligne principales usuelles à utiliser dans un terminal. :-)

Créer les répertoires et fichiers tests que nous allons utiliser

Dans /home/votre_user/, créez un répertoire nommé test_lien avec mkdir et s'y positionner avec cd :

 $ cd ~
 $ mkdir test_lien
 $ cd test_lien/
 test_lien$

Créer dans ce répertoire un fichiers vide, test1.txt, avec touch, puis ajoutez-y le texte Bonjour toto avec la commande echo.

 test_lien$ touch test1.txt
 test_lien$ echo Bonjour Jojo > test1.txt 

On vérifie avec la commande cat que notre texte est bien écrit dans le fichier test1.txt :

 test_lien$ cat test1.txt 
 Bonjour Jojo

Situation de départ :

martin@madebian:~/test_lien$ ls -l
total 4
-rw-r--r-- 1 martin martin 13 déc 14 22:02 test1.txt

On crée le lien symbolique :

 test_lien$ ln -s test1.txt lien1.txt

Ce qui nous fait maintenant :

martin@madebian:~/test_lien$ ls -l
total 4
lrwxrwxrwx 1 martin martin  9 déc 14 22:05 lien1.txt -> test1.txt
-rw-r--r-- 1 martin martin 13 déc 14 22:02 test1.txt

Attardons-nous un peu sur la ligne : lrwxrwxrwx 1 martin martin 9 déc 14 22:05 lien1.txt test1.txt

  1. l indique un lien symbolique sur ce fichier
  2. 9 indique l'occupation réelle du fichier sur le disque
  3. → test1.txt indique le fichier pointé par le lien symbolique

Précisons aussi que :

  • Un fichier symbole créé avec la commande ln ne contient pas l'occupation disque affichée qui est contenue dans le fichier cible.
  • Les modifications qui sont portées dans le contenu apparent d'un fichier symbole seront portés uniquement dans le fichier cible.
  • La destruction totale d'un fichier symbole ne détruit rien dans le fichier cible.

Modification du contenu des fichiers liés

 test_lien$ echo Comment vas-tu ? >> lien1.txt
 test_lien$ cat lien1.txt 
 Bonjour toto
 Comment vas-tu ?
 test_lien$ cat test1.txt 
 Bonjour toto
 Comment vas-tu ?
martin@madebian:~/test_lien$ ls -l
total 4
lrwxrwxrwx 1 martin martin  9 déc 14 22:05 lien1.txt -> test1.txt
-rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt

Nous pouvons voir que seul le fichier cible test1.txt s'est trouvé modifié, passant de 13 à 30 octets d'occupation !

Modifier directement le fichier cible donnera le même résultat :
  1. nul pour le fichier symbole
  2. effectif pour le fichier cible

Occupation concrète sur le disque

À l'aide de la commande ls -li, nous pouvons voir l'occupation disque générée par un lien symlink en constatant les chiffres indiquant les index respectifs des inodes de chacun des fichiers liés :

martin@madebian:~/test_lien$ ls -li
total 4
8667148 lrwxrwxrwx 1 martin martin  9 déc 14 22:05 lien1.txt -> test1.txt
8667139 -rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt

Cela implique qu'il y a bien deux occupations différentes sur le disque, avec une occupation qui restera toujours fixe et minimale pour le fichier symbole. :-)

Modification par effacement du fichier symbole

L'effacement du fichier symbole lien1.txt ne détruit ni le contenu, ni l'apparence du fichier cible test1.txt :

 test_lien$ rm lien1.txt 
martin@madebian:~/test_lien$ ls -l
total 4
-rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt

Modification du nom des fichiers liés :

Recréons le même fichier symbole lien1.txt :

 test_lien$ ln -s test1.txt lien1.txt
martin@madebian:~/test_lien$ ls -l
total 4
lrwxrwxrwx 1 martin martin  9 déc 14 22:13 lien1.txt -> test1.txt
-rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt

Modifier le nom du fichier symbole

Modifions le nom du fichier symbole lien1.txt :

 test_lien$ mv lien1.txt lien2.txt
martin@madebian:~/test_lien$ ls -l
total 4
lrwxrwxrwx 1 martin martin  9 déc 14 22:13 lien2.txt -> test1.txt
-rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt

Tout reste fonctionnel et en place. :-)

Pour poursuivre cette illustration dans la clarté, remettons le nommage du fichier symbole lien2.txt en lien1.txt.
 test_lien$ mv lien2.txt lien1.txt

Modifier le nom du fichier cible

Modifions le nom du fichier cible test1.txt :

 test_lien$ mv test1.txt test2.txt
martin@madebian:~/test_lien$ ls -l
total 4
lrwxrwxrwx 1 martin martin  9 déc 14 22:13 lien1.txt -> test1.txt
-rw-r--r-- 1 martin martin 30 déc 14 22:08 test2.txt

Patatras ! Nous voyons alors que le fichier cible lien1.txt se met en carafe - il devient écrit en rouge dans le terminal bash) dès le rafraîchissement du terminal ouvert.

Il suffit :

  1. de renommer le fichier cible test2.txt en test1.txt,

- ou bien de recréer le fichier symbole lien1.txt en le pointant sur le fichier cible test2.txt par reformulation de la commande : test_lien$ ln -s test2.txt lien1.txt

Et tout redevient effectif.

Pour la suite du tuto, choisir de remettre le fichier en test1.txt

 test_lien$ mv test2.txt test1.txt 

Modifications des droits des fichiers liés :

Depuis le début de cette illustration, nous voyons que les droits restent immuablement complets pour le fichier symbole lien1.txt.

 rwx rwx rwx

Essayons de les modifier.
Modifions la propriété du fichier symbole lien1.txt pour que root devienne le propriétaire.

Modification des droits d'un fichier symbole

Situation de départ :

martin@madebian:~/test_lien$ ls -l
total 4
lrwxrwxrwx 1 martin martin  9 déc 14 23:00 lien1.txt -> test1.txt
-rw-r--r-- 1 martin martin 13 déc 14 22:59 test1.txt

En terminal root, changez les droits sur le fichier avec la commande chmod :

 test_lien# chmod 700 lien1.txt

On obtient alors :

martin@madebian:~/test_lien$ ls -l
total 4
lrwxrwxrwx 1 martin martin  9 déc 14 23:00 lien1.txt -> test1.txt
-rwx------ 1 martin martin 13 déc 14 22:59 test1.txt

Nous voyons que le fichier symbole lien1.txt n'est pas affecté par cette modifications des droits :

lrwxrwxrwx 1 martin martin  9 déc 14 23:00 lien1.txt -> test1.txt

et que le fichier cible test1.txt s'en trouve directement rectifié par cette commande exécuter sur le fichier symbole lien1.txt :

rwx------ 1 martin martin 13 déc 14 22:59 test1.txt

Un lien physique est la création d'un fichier à l'identique de celui qu'il pointe.

Mais outre d'évoluer à l'identique, comme avec un lien symbolique, les deux fichiers se nourrissent mutuellement et concrètement de toutes les modifications apportées à l'un ou à l'autre.

ATTENTION : Un lien physique à la particularité de devoir se situer sur le même système de fichier que sa cible !

Créer un lien physique

Commençons par supprimer les fichiers liés symboliquement et créer un fichier de départ vide, test2, :

 test_lien$ rm *1.txt
 touch test2.txt

Au départ, nous avons donc la situation suivante :

martin@madebian:~/test_lien$ ls -l
total 0
-rw-r--r-- 1 martin martin 0 déc 15 00:02 test2.txt

Pour créer un lien physique, on utilise la commande ln sans l'option -s.

martin@madebian:~/test_lien$ ln test2.txt lien2.txt
martin@madebian:~/test_lien$ ls -l
total 0
-rw-r--r-- 2 martin martin 0 déc 15 00:02 lien2.txt
-rw-r--r-- 2 martin martin 0 déc 15 00:02 test2.txt

Ah ! Plus de lettre “l” ni de “flèches” pour indiquer le lien physique.

Nous pouvons toutefois distinguer un changement dans le listage des droits des fichiers liés physiquement :

Le chiffre 1 devient 2 dans la ligne du fichier cible test2.txt :

Pareillement dans la ligne du fichier symbole physique lien2.txt créé :

-rw-r--r-- **2** martin martin 0 déc 15 00:02 lien2.txt

Une autre différence est le partage des droits qui sont là tout à fait identiques entre les fichiers liés physiquement.

Modifions le contenu des fichiers liés physiquement

Ajout

Ajoutons du contenu dans l'un puis un second ajout dans l'autre des fichiers liés physiquement en vérifiant les contenus à chaque fois :

martin@madebian:~/test_lien$ echo Très bien titi ! > lien2.txt

martin@madebian:~/test_lien$ ls -l
total 8
-rw-r--r-- 2 martin martin 18 déc 15 13:49 lien2.txt
-rw-r--r-- 2 martin martin 18 déc 15 13:49 test2.txt

martin@madebian:~/test_lien$ cat test2.txt
Très bien titi !

martin@madebian:~/test_lien$ echo Et toi Jojo ? >> test2.txt

martin@madebian:~/test_lien$ cat lien2.txt
Très bien titi !
Et toi Jojo ?

martin@madebian:~/test_lien$ ls -l
total 8
-rw-r--r-- 2 martin martin 32 déc 15 13:52 lien2.txt
-rw-r--r-- 2 martin martin 32 déc 15 13:52 test2.txt

Toutes les modifications, ajoutées ou retranchées dans chacun des fichiers agira de même dans l'autre.

Occupation concrète sur le disque

À l'aide de la commande ls -li, nous pouvons voir l'occupation disque générée par un lien hardlink en constatant les chiffres indiquant les index respectifs des inodes de chacun des fichiers liés :

martin@madebian:~/test_lien$ ls -li
total 8
8667149 -rw-r--r-- 2 martin martin 32 déc 15 13:52 lien2.txt
8667149 -rw-r--r-- 2 martin martin 32 déc 15 13:52 test2.txt

Ah ! Le même index d'inode pour les deux fichiers !

Cela implique qu'il n'y a pas deux occupations différentes sur le disque mais une seule occupation vers laquelle pointe les deux fichiers liés en même temps ! :-)

On va pas s'gêner avec pour les gonfler de données car cela ne doublera pas l'occupation physique du disque ! :-D

Suppression

Suppression du fichier cible test2.txt :

test_lien$ rm test2.txt

martin@madebian:~/test_lien$ ls -l
total 4
-rw-r--r-- 1 martin martin 32 déc 15 13:52 lien2.txt

Comme dit le captnfab dans sa relecture :
Il est à remarquer que le chiffre 2 est passé à 1 car il n'y a plus de second fichier lié.

Chacun des fichiers liés par un lien physique survit nominalement et physiquement à l'effacement de l'autre.

Pour supprimer définitivement les deux fichiers et leurs contenus, nous devons les effacer tous deux.

 test_lien$ rm *2.txt
 test_lien$ ls -l
 total 0

Voilà pour la commande ln dans tous ses états !



Merci au captnfab pour sa bienveillante et rigolote attention ! :-D

TP01 - Nommer une partition

Vous pouvez nommer facilement vos partitions et organiser ainsi votre espace de travail.

Situation de départ : vous avez sur votre disque dur une partition /dev/sda5 qui est une partition contenant toutes vos photos de famille et de voyage. Cette partition est indiquée dans votre fichier /etc/fstab. Vous voulez réorganiser un peu les partitions sur votre disque dur et vous aimeriez que cette partition soit plus facilement identifiable pour vous. Pour ce faire, vous voulez que cette partition soit dorénavant nommée /dev/photos.

Attention. Avant de travailler sur une partition se trouvant dans votre fichier /etc/fstab et montée automatiquement au démarrage de votre ordi, il est nécessaire de la démonter avant toute chose.

Démonter la partition que l'on veut renommer

# umount /dev/sda5

Vérifier que /media/sda5 n'est plus monté

ls /media/sda5
   total 0

Créer le répertoire de montage

Créer le répertoire photos :

# mkdir /media/photos

Vérifier la création du répertoire stock et les droits d'accès :

ls -l /media
        total 8
        drwxr-xr-x 2 root root 4096 jan 12 19:18 photos

Éditer le fichier /etc/fstab avec Nano :

# nano /etc/fstab

Aller par les flèches du clavier sur /media/sda5 et remplacer sda5 par photos soit :

/dev/sda5   /media/sda5      ext3       defaults         0             2

devient :

/dev/sda5   /media/photos      ext3      defaults         0             2

Enregistrez et quittez.

Créer le lien symbolique

Préalable :

Par exemple, si vous aviez utilisé avant : media/sda5, il est possible que de nombreuses applications aient mémorisé des fichiers créés ou consultés sous le chemin :

 media/sda5/suiteblabla...

Plutôt que de modifier tous ces chemins,



Car un bon linuxien est un linuxien qui laisse faire la bécane AU MAXIMUM.
Ça repose et évite les erreurs.



En utilisant un lien symbolique, il est heureusement possible de faire en sorte que :

 media/sda5/blabla

se traduise, dans notre exemple, systématiquement pour toutes ces applications par :

 /media/photos/blabla



Non ?
Siiii !
Alleluia !
Dieu m'tripote.

Desprogien, j'adore ! ;-)

Démonter la partition

Démonter la partition à lier :

umount /dev/sda5

Vérifier que /media/sda5 n'est plus monté:

ls /media/sda5
   total 0
rmdir /media/sda5 (cela détruit le répertoire vide sda5)
ln -s /media/photos /media/sda5 (cela créé le répertoire stock en mettant un lien
symbolique entre l'ancien répertoire sda5 et le nouveau répertoire photos)

Remonter la partition

Pour réactiver la partition sda5.

mount /dev/sda5
ls -l /media

Tester

Ça marche ? Ouvrez un de ces logiciels (Gimp…) nourri avec l'ancien nom sda5 pour voir si y r'trouve pas ses p'tits cailloux !
(traduction pour les grands : Si le chemin se fait correctement…)

Qu'esch' qu'ça dit ?
Et ben moi, c'est :
Bye bye, que j'vous dis ! :-D

doc/systeme/ln.1355602072.txt.gz · Dernière modification: 15/12/2012 21:07 par martin_mtl

Pied de page des forums

Propulsé par FluxBB