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 →
Ci-dessous, les différences entre deux révisions de la page.
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 [28/01/2021 09:34] Croutons [Illustration pratique] |
doc:systeme:ln [04/07/2024 12:00] agp91 [Illustration pratique] |
||
---|---|---|---|
Ligne 73: | Ligne 73: | ||
Dans ''/home/votre_user/'', créez un répertoire nommé //test_lien// avec [[:doc:systeme:mkdir|mkdir]] et s'y positionner avec [[:doc:programmation:shell:cd | cd]] : | Dans ''/home/votre_user/'', créez un répertoire nommé //test_lien// avec [[:doc:systeme:mkdir|mkdir]] et s'y positionner avec [[:doc:programmation:shell:cd | cd]] : | ||
- | <code user>cd ~</code> | + | <code user>cd |
- | + | mkdir test_lien | |
- | <code user>mkdir test_lien</code> | + | cd test_lien/ |
- | + | </code> | |
- | <code user>cd test_lien/</code> | + | |
- | test_lien$ | + | |
Créer dans ce répertoire un fichiers vide, //test1.txt//, avec [[:doc:systeme:touch|touch]], puis ajoutez-y le texte //Bonjour toto// avec la commande [[:doc:systeme:echo|echo]]. | Créer dans ce répertoire un fichiers vide, //test1.txt//, avec [[:doc:systeme:touch|touch]], puis ajoutez-y le texte //Bonjour toto// avec la commande [[:doc:systeme:echo|echo]]. | ||
- | <code user>test_lien$ touch test1.txt</code> | + | <code user> |
- | + | touch test1.txt | |
- | <code user>test_lien$ echo Bonjour Jojo > test1.txt</code> | + | echo Bonjour Jojo > test1.txt |
+ | </code> | ||
On vérifie avec la commande [[:doc:systeme:cat|cat]] que notre texte est bien écrit dans le fichier test1.txt : | On vérifie avec la commande [[:doc:systeme:cat|cat]] que notre texte est bien écrit dans le fichier test1.txt : | ||
- | <code user>test_lien$ cat test1.txt</code> | + | <code user> |
- | <file config retour de la commande>Bonjour Jojo</file> | + | cat test1.txt |
+ | </code><code> | ||
+ | Bonjour Jojo | ||
+ | </code> | ||
- | ==== Créer un lien symbolique (symlink) : ==== | + | ===== Créer un lien symbolique (symlink) : ===== |
Situation de départ : | Situation de départ : | ||
- | <code user> | + | <code user>ls -l</code> |
- | martin@madebian:~/test_lien$ ls -l</code> | + | <code>total 4 |
- | <file config retour de la commande>total 4 | + | |
-rw-r--r-- 1 martin martin 13 déc 14 22:02 test1.txt | -rw-r--r-- 1 martin martin 13 déc 14 22:02 test1.txt | ||
- | </file> | + | </code> |
On crée le lien symbolique : | On crée le lien symbolique : | ||
- | <code user>test_lien$ ln -s test1.txt lien1.txt</code> | + | <code user>ln -s test1.txt lien1.txt</code> |
Ce qui nous fait maintenant : | Ce qui nous fait maintenant : | ||
<code user> | <code user> | ||
- | martin@madebian:~/test_lien$ ls -l</code> | + | ls -l</code> |
- | <file config retour de la commande>total 4 | + | <code>total 4 |
lrwxrwxrwx 1 martin martin 9 déc 14 22:05 lien1.txt -> test1.txt | 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 | -rw-r--r-- 1 martin martin 13 déc 14 22:02 test1.txt | ||
- | </file> | + | </code> |
Attardons-nous un peu sur la ligne : | Attardons-nous un peu sur la ligne : | ||
Ligne 128: | Ligne 129: | ||
==== Modification du contenu des fichiers liés ==== | ==== Modification du contenu des fichiers liés ==== | ||
- | <code user>test_lien$ echo Comment vas-tu ? >> lien1.txt</code> | + | <code user> |
+ | echo Comment vas-tu ? >> lien1.txt | ||
+ | cat lien1.txt | ||
+ | </code><code> | ||
+ | Bonjour toto | ||
+ | Comment vas-tu ? | ||
+ | </code> | ||
- | <code user>test_lien$ cat lien1.txt</code> | + | <code user> |
- | <file config retour de la commande>Bonjour toto | + | cat test1.txt |
- | Comment vas-tu ?</file> | + | </code><code> |
- | + | Bonjour toto | |
- | <code user>test_lien$ cat test1.txt</code> | + | Comment vas-tu ? |
- | <file config retour de la commande>Bonjour toto | + | </code> |
- | Comment vas-tu ?</file> | + | |
<code user> | <code user> | ||
- | martin@madebian:~/test_lien$ ls -l</code> | + | ls -l |
- | <file config retour de la commande>total 4 | + | </code><code> |
+ | total 4 | ||
lrwxrwxrwx 1 martin martin 9 déc 14 22:05 lien1.txt -> test1.txt | 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 | -rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt | ||
- | </file> | + | </code> |
Nous pouvons voir que seul le fichier cible //test1.txt// s'est trouvé modifié, passant de **13** à **30** octets d'occupation ! | Nous pouvons voir que seul le fichier cible //test1.txt// s'est trouvé modifié, passant de **13** à **30** octets d'occupation ! | ||
Ligne 155: | Ligne 162: | ||
À 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 : | À 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 user> | <code user> | ||
- | martin@madebian:~/test_lien$ ls -li</code> | + | ls -li |
- | <file config retour de la commande>total 4 | + | </code><code> |
+ | total 4 | ||
8667148 lrwxrwxrwx 1 martin martin 9 déc 14 22:05 lien1.txt -> test1.txt | 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 | 8667139 -rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt | ||
- | </file> | + | </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. :-) | 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. :-) | ||
Ligne 167: | Ligne 176: | ||
L'effacement du fichier symbole ''lien1.txt'' ne détruit ni le contenu, ni l'apparence du fichier cible ''test1.txt'' : | L'effacement du fichier symbole ''lien1.txt'' ne détruit ni le contenu, ni l'apparence du fichier cible ''test1.txt'' : | ||
- | |||
- | <code user>test_lien$ rm lien1.txt</code> | ||
<code user> | <code user> | ||
- | martin@madebian:~/test_lien$ ls -l</code> | + | rm lien1.txt |
- | <file config retour de la commande>total 4 | + | ls -l |
+ | </code><code> | ||
+ | total 4 | ||
-rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt | -rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt | ||
- | </file> | + | </code> |
==== Modification du nom des fichiers liés : ==== | ==== Modification du nom des fichiers liés : ==== | ||
Recréons le même fichier symbole //lien1.txt// : | Recréons le même fichier symbole //lien1.txt// : | ||
- | <code user>test_lien$ ln -s test1.txt lien1.txt</code> | ||
- | |||
<code user> | <code user> | ||
- | martin@madebian:~/test_lien$ ls -l</code> | + | ln -s test1.txt lien1.txt |
- | <file config retour de la commande>total 4 | + | ls -l |
+ | </code><code> | ||
+ | total 4 | ||
lrwxrwxrwx 1 martin martin 9 déc 14 22:13 lien1.txt -> test1.txt | 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 | -rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt | ||
- | </file> | + | </code> |
=== Modifier le nom du fichier symbole === | === Modifier le nom du fichier symbole === | ||
Modifions le nom du fichier symbole lien1.txt à l'aide de la [[:doc:systeme:mv |commande mv]] : | Modifions le nom du fichier symbole lien1.txt à l'aide de la [[:doc:systeme:mv |commande mv]] : | ||
- | <code user>test_lien$ mv lien1.txt lien2.txt</code> | + | <code user>mv lien1.txt lien2.txt</code> |
<code user> | <code user> | ||
- | martin@madebian:~/test_lien$ ls -l</code> | + | ls -l |
- | <file config retour de la commande>total 4 | + | </code><code> |
+ | total 4 | ||
lrwxrwxrwx 1 martin martin 9 déc 14 22:13 lien2.txt -> test1.txt | 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 | -rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt | ||
- | </file> | + | </code> |
Tout reste fonctionnel et en place. :-) | Tout reste fonctionnel et en place. :-) | ||
<note>Pour poursuivre cette illustration dans la clarté, remettons le nommage du fichier symbole ''lien2.txt'' en ''lien1.txt''.</note> | <note>Pour poursuivre cette illustration dans la clarté, remettons le nommage du fichier symbole ''lien2.txt'' en ''lien1.txt''.</note> | ||
- | <code user>test_lien$ mv lien2.txt lien1.txt</code> | + | <code user>mv lien2.txt lien1.txt</code> |
=== Modifier le nom du fichier cible === | === Modifier le nom du fichier cible === | ||
Modifions le nom du fichier cible ''test1.txt'' : | Modifions le nom du fichier cible ''test1.txt'' : | ||
- | <code user>test_lien$ mv test1.txt test2.txt</code> | + | <code user>mv test1.txt test2.txt |
- | + | ls -l | |
- | <code user> | + | </code><code> |
- | martin@madebian:~/test_lien$ ls -l</code> | + | total 4 |
- | <file config retour de la commande>total 4 | + | |
lrwxrwxrwx 1 martin martin 9 déc 14 22:13 lien1.txt -> test1.txt | 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 | -rw-r--r-- 1 martin martin 30 déc 14 22:08 test2.txt | ||
- | </file> | + | </code> |
//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. | //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. | ||
Ligne 222: | Ligne 231: | ||
- de renommer le fichier cible ''test2.txt'' en ''test1.txt'', | - de renommer le fichier cible ''test2.txt'' en ''test1.txt'', | ||
<del> - ou bien de recréer le fichier symbole ''lien1.txt'' en le pointant sur le fichier cible ''test2.txt'' par reformulation de la commande : | <del> - 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</del> | + | ln -s test2.txt lien1.txt</del> |
Et tout redevient effectif. | Et tout redevient effectif. | ||
Pour la suite du tuto, choisir de remettre le fichier en test1.txt | Pour la suite du tuto, choisir de remettre le fichier en test1.txt | ||
- | <code user>test_lien$ mv test2.txt test1.txt</code> | + | <code user>mv test2.txt test1.txt</code> |
==== Modifications des droits des fichiers liés : ==== | ==== Modifications des droits des fichiers liés : ==== | ||
Ligne 242: | Ligne 251: | ||
Situation de départ : | Situation de départ : | ||
<code user> | <code user> | ||
- | martin@madebian:~/test_lien$ ls -l</code> | + | ls -l |
- | <file config retour de la commande>total 4 | + | </code><code> |
+ | total 4 | ||
lrwxrwxrwx 1 martin martin 9 déc 14 23:00 lien1.txt -> test1.txt | 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 | -rw-r--r-- 1 martin martin 13 déc 14 22:59 test1.txt | ||
- | </file> | + | </code> |
En terminal root, changez les droits sur le fichier avec la commande [[:doc:systeme:chmod|chmod]] : | En terminal root, changez les droits sur le fichier avec la commande [[:doc:systeme:chmod|chmod]] : | ||
- | <code user>test_lien$ chmod 700 lien1.txt</code> | + | <code root>chmod 700 lien1.txt</code> |
On obtient alors : | On obtient alors : | ||
<code user> | <code user> | ||
- | martin@madebian:~/test_lien$ ls -l</code> | + | ls -l |
- | <file config retour de la commande>total 4 | + | </code><code> |
+ | total 4 | ||
lrwxrwxrwx 1 martin martin 9 déc 14 23:00 lien1.txt -> test1.txt | 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 | -rwx------ 1 martin martin 13 déc 14 22:59 test1.txt | ||
- | </file> | + | </code> |
Nous voyons que le fichier symbole ''lien1.txt'' n'est pas affecté par cette modifications des droits : | Nous voyons que le fichier symbole ''lien1.txt'' n'est pas affecté par cette modifications des droits : | ||
Ligne 266: | Ligne 277: | ||
rwx------ 1 martin martin 13 déc 14 22:59 test1.txt | rwx------ 1 martin martin 13 déc 14 22:59 test1.txt | ||
- | ==== Créer un lien physique (hardlink) : ==== | + | ===== Créer un lien physique (hardlink) : ===== |
Un lien physique est la création d'un fichier à l'identique de celui qu'il pointe. | Un lien physique est la création d'un fichier à l'identique de celui qu'il pointe. | ||
Ligne 274: | Ligne 285: | ||
<note important>**ATTENTION :** Un lien physique à la particularité de devoir se situer __sur le même système de fichier__ que sa cible !</note> | <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 ==== | ==== Créer un lien physique ==== | ||
Commençons par supprimer les fichiers liés symboliquement et créer un fichier de départ vide, test2, : | Commençons par supprimer les fichiers liés symboliquement et créer un fichier de départ vide, test2, : | ||
- | <code user>test_lien$ rm *1.txt</code> | + | |
- | <file config retour de la commande>touch test2.txt</file> | + | <code user> |
+ | rm *1.txt | ||
+ | touch test2.txt | ||
+ | </code> | ||
Au départ, nous avons donc la situation suivante : | Au départ, nous avons donc la situation suivante : | ||
<code user> | <code user> | ||
- | martin@madebian:~/test_lien$ ls -l</code> | + | ls -l |
- | <file config retour de la commande>total 0 | + | </code><code> |
+ | total 0 | ||
-rw-r--r-- 1 martin martin 0 déc 15 00:02 test2.txt | -rw-r--r-- 1 martin martin 0 déc 15 00:02 test2.txt | ||
- | </file> | + | </code> |
Pour créer un lien physique, on utilise la commande ''ln'' sans l'option ''-s''. | Pour créer un lien physique, on utilise la commande ''ln'' sans l'option ''-s''. | ||
<code user> | <code user> | ||
- | martin@madebian:~/test_lien$ ln test2.txt lien2.txt</code> | + | ln test2.txt lien2.txt |
- | <code user>martin@madebian:~/test_lien$ ls -lv</code> | + | ls -lv |
- | <file config retour de la commande>total 0 | + | </code><code> |
+ | 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 lien2.txt | ||
- | -rw-r--r-- 2 martin martin 0 déc 15 00:02 test2.txt</file> | + | -rw-r--r-- 2 martin martin 0 déc 15 00:02 test2.txt</code> |
Ah ! Plus de lettre "''l''" ni de "//flèches//" pour indiquer le lien physique. \\ | Ah ! Plus de lettre "''l''" ni de "//flèches//" pour indiquer le lien physique. \\ | ||
Ligne 302: | Ligne 319: | ||
Pareillement dans la ligne du fichier symbole physique lien2.txt créé : | Pareillement dans la ligne du fichier symbole physique lien2.txt créé : | ||
+ | |||
<code> | <code> | ||
-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 lien2.txt | ||
Ligne 314: | Ligne 332: | ||
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 : | 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 user> | <code user> | ||
- | martin@madebian:~/test_lien$ echo Très bien titi ! > lien2.txt</code> | + | echo Très bien titi ! > lien2.txt |
- | + | ls -l | |
- | <code user>martin@madebian:~/test_lien$ ls -l</code> | + | </code><code> |
- | <file config retour de la commande>total 8 | + | 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 lien2.txt | ||
- | -rw-r--r-- 2 martin martin 18 déc 15 13:49 test2.txt</file> | + | -rw-r--r-- 2 martin martin 18 déc 15 13:49 test2.txt |
+ | </code> | ||
- | <code user>martin@madebian:~/test_lien$ cat test2.txt</code> | + | <code user> |
- | <file config retour de la commande>Très bien titi !</file> | + | cat test2.txt |
+ | </code><code> | ||
+ | Très bien titi ! | ||
+ | </code> | ||
- | <code user>martin@madebian:~/test_lien$ echo Et toi Jojo ? >> test2.txt</code> | + | <code user> |
- | + | echo Et toi Jojo ? >> test2.txt | |
- | <code user>martin@madebian:~/test_lien$ cat lien2.txt</code> | + | cat lien2.txt |
- | <file config retour de la commande>Très bien titi ! | + | </code><code> |
- | Et toi Jojo ?</file> | + | Très bien titi ! |
+ | Et toi Jojo ? | ||
+ | </code> | ||
- | <code user>martin@madebian:~/test_lien$ ls -l</code> | + | <code user> |
- | <file config retour de la commande>total 8 | + | ls -l |
+ | </code><code> | ||
+ | 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 lien2.txt | ||
-rw-r--r-- 2 martin martin 32 déc 15 13:52 test2.txt | -rw-r--r-- 2 martin martin 32 déc 15 13:52 test2.txt | ||
- | </file> | + | </code> |
Toutes les modifications, __ajoutées ou retranchées__ dans chacun des fichiers agira de même dans l'autre. | Toutes les modifications, __ajoutées ou retranchées__ dans chacun des fichiers agira de même dans l'autre. | ||
Ligne 341: | Ligne 367: | ||
À 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 : | À 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 user> | <code user> | ||
- | martin@madebian:~/test_lien$ ls -li</code> | + | ls -li |
- | <file config retour de la commande>total 8 | + | </code><code> |
+ | 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 lien2.txt | ||
8667149 -rw-r--r-- 2 martin martin 32 déc 15 13:52 test2.txt | 8667149 -rw-r--r-- 2 martin martin 32 déc 15 13:52 test2.txt | ||
- | </file> | + | </code> |
Ah ! Le même index d'inode pour les deux fichiers ! | Ah ! Le même index d'inode pour les deux fichiers ! | ||
Ligne 358: | Ligne 386: | ||
Suppression du fichier cible ''test2.txt'' : | Suppression du fichier cible ''test2.txt'' : | ||
<code user> | <code user> | ||
- | test_lien$ rm test2.txt</code> | + | rm test2.txt |
- | + | ls -l | |
- | <code user>martin@madebian:~/test_lien$ ls -l</code> | + | </code><code> |
- | <file config retour de la commande>total 4 | + | total 4 |
-rw-r--r-- 1 martin martin 32 déc 15 13:52 lien2.txt | -rw-r--r-- 1 martin martin 32 déc 15 13:52 lien2.txt | ||
- | </file> | + | </code> |
Comme dit le captnfab dans sa relecture : \\ | 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é. | Il est à remarquer que le chiffre ''2'' est passé à ''1'' car il n'y a plus de second fichier lié. | ||
Ligne 370: | Ligne 399: | ||
Pour supprimer définitivement les deux fichiers et leurs contenus, nous devons les effacer tous deux. | Pour supprimer définitivement les deux fichiers et leurs contenus, nous devons les effacer tous deux. | ||
- | <code user>test_lien$ rm *2.txt</code> | + | <code user> |
- | + | rm *2.txt | |
- | <code user>test_lien$ ls -l</code> | + | ls -l |
- | <file config retour de la commande>total 0</file> | + | </code><code> |
+ | total 0 | ||
+ | </code> | ||
//Voilà pour la commande //''ln''// dans tous ses états !// | //Voilà pour la commande //''ln''// dans tous ses états !// | ||
- | \\ | + | |
- | \\ | + | |
//Merci au //**captnfab**// pour sa bienveillante et rigolote attention !// :-D | //Merci au //**captnfab**// pour sa bienveillante et rigolote attention !// :-D | ||