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 →
Ceci est une ancienne révision du document !
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.
ln [option] <cible> <lien>
ln -s <fichier_cible> <fichier_symbole> ln -s <répertoire_cible> <répertoire_symbole> ln -s <point_cible> <point_symbole>
ln <fichier_cible> <fichier_lié>
Les liens symboliques (symlink) peuvent lier :
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 :
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.
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.
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
Précisons aussi que :
ln
ne contient pas l'occupation disque affichée qui est contenue dans le fichier cible.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 !
À 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.
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
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
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.
lien2.txt
en lien1.txt
.
test_lien$ mv lien2.txt lien1.txt
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 :
test2.txt
en test1.txt
,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
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.
En terminal root, exécutez la commande :
test_lien# chmod 700 lien1.txt
test_lien$ $ ls -l total 4 l rwx rwx rwx 1 votre_user votre_user 9 jun 21 07:23 lien1.txt -> test1.txt - rw- --- --- 1 votre_user votre_user 13 jun 21 07:22 test1.txt - rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.txt
Nous voyons que le fichier symbole lien1.txt
n'est pas affecté par cette modifications des droits :
l rwx rwx rwx 1 votre_user votre_user 9 jun 21 07:23 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
:
- rw- — — 1 votre_user votre_user 13 jun 21 07:22 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.
Supprimons les fichiers liés symboliquement :
test_lien$ rm *1.txt
Pour créer un lien physique, on utilise la commande ln
sans l'option -s
.
test_lien$ ln test2.txt lien2.txt test_lien$ ls -l total 2 - rw- r-- r-- 2 admijoel admijoel 0 jun 21 11:04 lien2.txt - rw- r-- r-- 2 admijoel admijoel 0 jun 21 11:04 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 :
- rw- r-- r-- 1 admijoel admijoel 0 jun 21 11:04 test2.txt (avant) - rw- r-- r-- 2 admijoel admijoel 0 jun 21 11:04 test2.txt (après)
Pareillement dans la ligne du fichier symbole physique lien2.txt créé :
- rw- r-- r-- 2 admijoel admijoel 0 jun 21 11:04 lien2.txt
Une autre différences est le partage des droits qui sont là tout à fait identiques entre les fichiers liés physiquement.
- rw- r-- r-- 2 admijoel admijoel 0 jun 21 11:04 lien2.txt - rw- r-- r-- 2 admijoel admijoel 0 jun 21 11:04 test2.txt
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 :
test_lien$ echo Très bien titi ! > lien2.txt test_lien$ ls -l total 8 - rw- r-- r-- 2 admijoel admijoel 18 jun 21 11:04 lien2.txt - rw- r-- r-- 2 admijoel admijoel 18 jun 21 11:04 test2.txt test_lien$ cat test2.txt Très bien titi ! test_lien$ echo Et toi toto ? >> test2.txt test_lien$ cat lien2.txt Très bien titi ! Et toi toto ? test_lien$ ls -l total 8 - rw- r-- r-- 2 admijoel admijoel 32 jun 21 11:04 lien2.txt - rw- r-- r-- 2 admijoel admijoel 32 jun 21 11:04 test2.txt
Toutes les modifications, ajoutées ou retranchées dans chacun des fichiers agira de même chez l'autre.
À 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 :
test_lien$ ls -li 604492 - rw- r-- r-- 2 admijoel admijoel 32 jun 21 11:04 lien2.txt 604492 - rw- r-- r-- 2 admijoel admijoel 32 jun 21 11:04 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 !
Suppression du fichier cible test2.txt
:
test_lien$ rm test2.txt test_lien$ ls -l total 4 - rw- r-- r-- 1 admijoel admijoel 32 jun 21 11:04 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é.
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 !
Vous pouvez nommer facilement vos partitions et organiser ainsi votre espace de travail.
Créer le répertoire stock
:
mkdir /media/stock
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 stock
Éditer le fichier /etc/fstab avec Nano :
nano /etc/fstab
Aller par les flèches du clavier sur /media/sda5 et remplacer sda5 par stock soit :
/dev/sda5 /media/sda5 ext3 defaults 0 2
devient :
/dev/sda5 /media/stock ext3 defaults 0 2
Enregistrez et quittez.
(à suivre)… palpitant, hein ?
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/stock/blabla
Non ?
Siiii !
Alleluia !
Dieu m'tripote.
Desprogien, j'adore !
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/stock /media/sda5 (cela créé le répertoire stock en mettant un lien symbolique entre l'ancien répertoire sda5 et le nouveau répertoire stock)
Pour réactiver la partition sda5.
mount /dev/sda5
ls -l /media
Ca 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 !