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

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
doc:systeme:ln [21/06/2010 19:42]
smolski
doc:systeme:ln [15/12/2012 03:05]
martin_mtl [Illustration pratique]
Ligne 1: Ligne 1:
 +====== 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) ==
 +
 +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) ==
 +
 +Les liens physiques (hardlink) ne peuvent lier :
 +
 +  - que des fichiers
 +  - 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 :
 +
 +  * [[commande:>​ | La commande chevron ">"​]]
 +  * [[commande:​ls | La commande LS]]
 +  * [[commande:​rm | La commande RM]]
 +  * [[commande:​a_savoir | Les Droits]]
 +  * [[commande:​mv | La commande MV]]
 +  * [[commande:​pwd | La commande PWD]]
 +  * [[manuel:​nano | La commande d'​édition NANO]]
 +
 +//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 [[commande:​mkdir|mkdir]] et s'y positionner avec [[commande:​cd | cd]] :
 +
 +   $ cd ~
 +
 +   $ mkdir test_lien
 +
 +   $ cd test_lien/
 +   ​test_lien$
 +
 +Créer dans ce répertoire deux fichiers vides, //​test1.txt//​ et //​test2.txt//,​ avec [[commande:​touch|touch]],​ puis ajouter le texte //Bonjour toto// dans le premier avec [[commande:​echo|echo]] ; le fichier test2.txt est laissé vide :
 +
 +   ​test_lien$ touch test1.txt test2.txt ​
 +
 +   ​test_lien$ echo Bonjour toto > test1.txt ​
 +
 +On vérifie avec la commande [[commande:​cat|cat]] que notre texte est bien écrit dans le fichier test1.txt :
 +
 +   ​test_lien$ cat test1.txt ​
 +   ​Bonjour toto
 +
 +==== Créer un lien symbolique (symlink) : ====
 +
 +   ​test_lien$ ln -s test1.txt lien1.txt
 +
 +Visualisez le résultat :
 +
 +<​code>​
 +test_lien$ $ ls -l
 +total 4
 +lrwxrwxrwx 1 votre_user votre_user ​ 9 jun 21 07:23 lien1.txt -> test1.txt
 +- rw- r-- r-- 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
 +</​code>​
 +
 +//​**l**rwxrwxrwx 1 votre_user votre_user ​ **8** jun 21 07:23 lien1.txt **-> test1.txt**//​
 +  - **l** indique un lien symbolique sur ce fichier
 +  - **8** indique l'​occupation réelle du fichier sur le disque
 +  - **-> test1.txt** indique le fichier pointé par le lien symbolique
 +
 +Nous pouvons en déduire :
 +
 +  * 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 ?
 +
 +<​code>​
 +test_lien$ $ ls -l
 +total 4
 +lrwxrwxrwx 1 votre_user votre_user ​ **9** jun 21 07:23 lien1.txt -> test1.txt
 +- rw- r-- r-- 1 votre_user votre_user **30** jun 21 07:22 test1.txt
 +- rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.txt
 +</​code>​
 +
 +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 : ==
 +
 +  - nul pour le fichier symbole
 +  - 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 :
 +<​code>​
 +test_lien$ ls -li
 +604494 - rw- r-- r-- 2 admijoel admijoel ​ 32 jun 21 11:04 lien2.txt
 +604493 - rw- r-- r-- 2 admijoel admijoel ​ 32 jun 21 11:04 test2.txt
 +</​code>​
 +
 +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 ​
 +
 +<​code>​
 +test_lien$ $ ls -l
 +total 4
 +- rw- r-- r-- 1 votre_user votre_user **30** jun 21 07:22 test1.txt
 +- rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.txt
 +</​code>​
 +
 +==== Modification du nom des fichiers liés : ====
 +
 +Recréons le même fichier symbole //​lien1.txt//​ :
 +   ​test_lien$ ln -s test1.txt lien1.txt
 +
 +<​code>​
 +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- r-- r-- 1 votre_user votre_user **30** jun 21 07:22 test1.txt
 +- rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.txt
 +</​code>​
 +
 +=== Modifier le nom du fichier symbole ===
 +
 +Modifions le nom du fichier symbole lien1.txt :
 +   ​test_lien$ mv lien1.txt lien2.txt
 +
 +<​code>​
 +test_lien$ $ ls -l
 +total 4
 +l rwx rwx rwx 1 votre_user votre_user ​ **9** jun 21 07:23 lien2.txt -> test1.txt
 +- rw- r-- r-- 1 votre_user votre_user **30** jun 21 07:22 test1.txt
 +- rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.txt
 +</​code>​
 +
 +Tout reste fonctionnel et en place. :-)
 +
 +<​note>​Pour pousuivre cette illustration dans la clarté, remettons le nommage du fichier symbole ''​lien2.txt''​ en ''​lien1.txt''​.</​note>​
 +   ​test_lien$ mv lien2.txt lien1.txt
 +
 +=== Modifier le nom du fichier cible ===
 +
 +Modifions le nommage du fichier cible ''​test1.txt''​ :
 +   ​test_lien$ mv test1.txt test3.txt
 +
 +<​code>​
 +test_lien$ $ ls -l
 +total 4
 +lrwxrwxrwx 1 votre_user votre_user ​ **9** jun 21 07:23 <​del>​lien1.txt</​del>​ -> <​del>​test1.txt</​del>​
 +- rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.txt
 +- rw- r-- r-- 1 votre_user votre_user **30** jun 21 07:22 test3.txt
 +</​code>​
 +
 +//Patatras !// Nous voyons alors que le fichier cible ''​lien1.txt''​ se met en carafe (surligné et en rouge dans le terminal bash) dès le //​rafraîchissement//​ du terminal ouvert.
 +
 +Il suffit :
 +  - de renommer le fichier cible ''​test3.txt''​ en ''​test1.txt'',​
 +  - ou bien de recréer le fichier symbole ''​lien1.txt''​ en le pointant sur le fichier cible ''​test3.txt''​ par reformulation de la commande :
 +   ​test_lien$ ln -s test3.txt lien1.txt
 +
 +Et tout redevient effectif.
 +
 +Pour la suite du tuto, choisir de remettre le fichier en test1.txt
 +   ​test_lien$ mv test3.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 ===
 +
 +En terminal root, exécutez la commande :
 +   ​test_lien#​ chmod 700 lien1.txt
 +
 +<​code>​
 +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
 +</​code>​
 +
 +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''​
 +
 +==== Créer un lien physique (hardlink) : ====
 +
 +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.
 +
 +<note important>​**ATTENTION :** Un lien physique à la particularité de devoir se situer __sur le même système de fichier__ que sa cible !</​note>​
 +
 +==== Créer un lien physique ====
 +
 +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''​.
 +<​code>​
 +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
 +</​code>​
 +
 +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 :
 +
 +<​code>​
 +- 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)
 +</​code>​
 +
 +Pareillement dans la ligne du fichier symbole physique lien2.txt créé :
 +<​code>​
 +- rw- r-- r-- 2 admijoel admijoel ​ 0 jun 21 11:04 lien2.txt
 +</​code>​
 +
 +Une autre différences est le partage des droits qui sont là __tout à fait identiques__ entre les fichiers liés physiquement.
 +<​code>​
 +- 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
 +</​code>​
 +
 +==== 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 :
 +<​code>​
 +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
 +</​code>​
 +
 +Toutes les modifications,​ __ajoutées ou retranchées__ dans chacun des fichiers agira de même chez 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 :
 +<​code>​
 +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
 +</​code>​
 +
 +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''​ :
 +<​code>​
 +test_lien$ rm test2.txt
 +
 +test_lien$ ls -l
 +total 4
 +- rw- r-- r-- 1 admijoel admijoel ​ 32 jun 21 11:04 lien2.txt
 +</​code>​
 +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é.
 +
 +<note tip>​Chacun des fichiers liés par un lien physique survit nominalement et physiquement à l'​effacement de l'​autre.</​note>​
 +
 +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.
 +
 +==== Créer le répertoire de montage ====
 +
 +Créer le répertoire ''​stock''​ :
 +<code bash>
 +mkdir /​media/​stock</​code>​
 +
 +Vérifier la création du répertoire stock et les droits d'​accès :
 +<code bash>
 +ls -l /media
 +        total 8
 +        drwxr-xr-x 2 root root 4096 jan 12 19:18 stock</​code>​
 +
 +Éditer le fichier /etc/fstab avec [[manuel:​nano|Nano]] :
 +<code bash>
 +nano /​etc/​fstab</​code>​
 +
 +Aller par les flèches du clavier sur /media/sda5 et remplacer sda5 par stock soit :
 +<​code>​
 +/​dev/​sda5 ​  /​media/​sda5 ​     ext3       ​defaults ​        ​0 ​            ​2</​code>​
 +
 +devient :
 +<​code>​
 +/​dev/​sda5 ​  /​media/​stock ​     ext3      defaults ​        ​0 ​            ​2</​code>​
 +
 +Enregistrez et quittez.
 +
 +//(à suivre)... palpitant, hein ?//
 +
 +==== 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/​stock/​blabla
 +\\
 +\\
 +**Non** ? \\
 +//Siiii// ! \\
 +**Alleluia** ! \\
 +//Dieu m'​tripote.//​ \\
 +\\
 +Desprogien, j'​adore ! ;-)
 +
 +=== Démonter la partition ===
 +
 +Démonter la partition à lier :
 +<code bash>
 +umount /​dev/​sda5</​code>​
 +
 +Vérifier que /media/sda5 n'est plus monté:
 +<code bash>
 +ls /media/sda5
 +   total 0</​code>​
 +
 +=== Créer le nouveau répertoire symblink ===
 +
 +<code bash>
 +rmdir /media/sda5 (cela détruit le répertoire vide sda5)</​code>​
 +<code bash>
 +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)</​code>​
 +
 +=== Remonter la partition ===
 +
 +Pour réactiver la partition sda5.
 +<code bash>​mount /​dev/​sda5</​code>​
 +<code bash>ls -l /​media</​code>​
 +
 +=== Tester ===
 +
 +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 !// :-D
 +
  
doc/systeme/ln.txt · Dernière modification: 04/07/2024 19:29 par agp91

Pied de page des forums

Propulsé par FluxBB