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 [04/07/2024 11:36] agp91 |
doc:systeme:ln [04/07/2024 18:14] agp91 [Description] |
||
---|---|---|---|
Ligne 43: | Ligne 43: | ||
== Les liens symboliques (symlink) == | == Les liens symboliques (symlink) == | ||
- | Un lien symbolique est constitué d'un réel fichier de petite taille ; il contient le nom du fichier auquel il correspond. Par conséquent, la suppression du fichier d'origine, c'est-à-dire la cible du lien, rendra le lien symbolique inutilisable puisqu'il ne correspondra plus à un fichier valide ; le lien sera alors brisé. | + | Un lien symbolique est constitué d'un réel fichier de petite taille ; il contient le nom (chemin) du fichier auquel il correspond. Par conséquent, la suppression du fichier d'origine, c'est-à-dire la cible du lien, rendra le lien symbolique inutilisable puisqu'il ne correspondra plus à un fichier valide ; le lien sera alors brisé. |
== Les liens physiques ou durs (hardlink) == | == Les liens physiques ou durs (hardlink) == | ||
- | Un lien dur associe deux ou plusieurs fichiers à un même espace sur le disque tout en préservant leurs indépendances lors de modifications de leurs contenus. De même, la suppression d'un fichier n'affectera pas l'autre. | + | Un lien dur associe deux ou plusieurs fichiers à un même espace sur le disque. Ainsi un fichier peut disposer réellement de plusieurs noms (chemins). La suppression d'un fichier lié physiquement n'affectera pas les autres fichiers qui lui sont liés. |
**Nota :** \\ | **Nota :** \\ | ||
Ligne 54: | Ligne 54: | ||
//Merci de ces remarques habiles au concert de //**Mahoru`Tsunemi**// et de //**captnfab**// sur l'IRC.// | //Merci de ces remarques habiles au concert de //**Mahoru`Tsunemi**// et de //**captnfab**// sur l'IRC.// | ||
- | ===== Illustration pratique ===== | + | ===== Préparatifs ===== |
Afin de bien comprendre les principes que nous avons décrits ci-haut, nous allons illustrer tout cela à l'aide de quelques exemples simples. | Afin de bien comprendre les principes que nous avons décrits ci-haut, nous allons illustrer tout cela à l'aide de quelques exemples simples. | ||
- | Débutant - À savoir : | + | 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]] : |
- | + | ||
- | * [[:doc:programmation:shell:chevrons | La commande chevron ">"]] | + | |
- | * [[:doc:systeme:ls | La commande LS]] | + | |
- | * [[:doc:systeme:rm | La commande RM]] | + | |
- | * [[:doc:systeme:droits-unix | Les Droits]] | + | |
- | * [[:doc:editeurs: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 [[:doc:systeme:mkdir|mkdir]] et s'y positionner avec [[:doc:programmation:shell:cd | cd]] : | + | |
<code user>cd | <code user>cd | ||
mkdir test_lien | mkdir test_lien | ||
- | cd test_lien/ | + | cd test_lien |
</code> | </code> | ||
- | 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> | <code user> | ||
Ligne 93: | Ligne 80: | ||
</code> | </code> | ||
- | ==== Créer un lien symbolique (symlink) : ==== | + | ===== Les liens symboliques (symlink) : ===== |
Situation de départ : | Situation de départ : | ||
<code user>ls -l</code> | <code user>ls -l</code> | ||
- | <code>total 4 | + | <code> |
-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 | ||
</code> | </code> | ||
+ | |||
+ | ==== Créer un lien symbolique ==== | ||
On crée le lien symbolique : | On crée le lien symbolique : | ||
Ligne 109: | Ligne 98: | ||
<code user> | <code user> | ||
ls -l</code> | ls -l</code> | ||
- | <code>total 4 | + | <code> |
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 | ||
</code> | </code> | ||
- | Attardons-nous un peu sur la ligne : | + | Attardons-nous un peu sur la ligne : ''**l**rwxrwxrwx 1 martin martin **9** déc 14 22:05 lien1.txt **<nowiki>-></nowiki> test1.txt**'' |
- | **l**rwxrwxrwx 1 martin martin **9** déc 14 22:05 lien1.txt **->** test1.txt | + | |
- | - **l** indique un lien symbolique sur ce fichier | + | - Dans le 1er champ (''lrwxrwxrwx''), la première lettre : **''l''**, indique que ce fichier est un lien symbolique. |
- | - **9** indique l'occupation réelle du fichier sur le disque | + | - Dans le 5em champ, le chiffre **''9''**, indique l'occupation en octet du fichier. |
- | - **-> test1.txt** indique le fichier pointé par le lien symbolique | + | - **''<nowiki>-> test1.txt</nowiki>''** indique le fichier que désigne le lien symbolique. |
Précisons aussi que : | 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. | + | * La taille (occupation disque) d'un //fichier d'un lien symbolique// ne correspond pas à l'occupation disque affichée du fichier cible. |
- | * Les modifications qui sont portées dans le contenu apparent d'un fichier symbole seront portés uniquement dans le fichier cible. | + | * Les modifications apportées au contenu d'un fichier (cible) désigné par un lien symbolique seront portées uniquement dans le fichier cible. |
- | * La destruction totale d'un fichier symbole ne détruit rien dans le fichier cible. | + | * La destruction totale d'un lien symbolique ne détruit rien dans le fichier cible. |
- | ==== Modification du contenu des fichiers liés ==== | + | ==== Modification du contenu ==== |
<code user> | <code user> | ||
Ligne 147: | Ligne 135: | ||
ls -l | ls -l | ||
</code><code> | </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 | ||
</code> | </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 ! |
- | == Modifier directement le fichier cible donnera le même résultat : == | + | Modifier directement le fichier cible donnera le même résultat : |
- | - nul pour le fichier symbole | + | - Aucune modification pour le fichier du lien symbolique |
- | - effectif pour le fichier cible | + | - Effectif pour le fichier cible |
- | === Occupation concrète sur le disque === | + | ==== 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 : | + | À l'aide de la commande ''ls -li'', nous pouvons voir l'occupation disque et comparer les chiffres indiquant les indexs respectifs des inodes de chacun des fichiers liés : |
<code user> | <code user> | ||
ls -li | ls -li | ||
</code><code> | </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 | ||
</code> | </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 du lien symbolique. :-) |
- | ==== Modification par effacement du fichier symbole ==== | + | ==== Suppression d'un lien symbolique ==== |
- | 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 du lien symbolique ''lien1.txt'' ne détruit ni le contenu, ni l'apparence du fichier cible ''test1.txt'' : |
<code user> | <code user> | ||
Ligne 181: | Ligne 167: | ||
ls -l | ls -l | ||
</code><code> | </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 | ||
</code> | </code> | ||
- | ==== Modification du nom des fichiers liés : ==== | + | Recréons le même lien symbolique ''lien1.txt'' : |
- | + | ||
- | Recréons le même fichier symbole //lien1.txt// : | + | |
<code user> | <code user> | ||
ln -s test1.txt lien1.txt | ln -s test1.txt lien1.txt | ||
ls -l | ls -l | ||
</code><code> | </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 | ||
</code> | </code> | ||
- | === Modifier le nom du fichier symbole === | + | ==== Modification du nom d'un lien symbolique ==== |
- | Modifions le nom du fichier symbole lien1.txt à l'aide de la [[:doc:systeme:mv |commande mv]] : | + | Modifions le nom du fichier du lien symbolique ''lien1.txt'' à l'aide de la [[:doc:systeme:mv |commande mv]] : |
- | <code user>mv lien1.txt lien2.txt</code> | + | |
<code user> | <code user> | ||
+ | mv lien1.txt lien2.txt | ||
ls -l | ls -l | ||
</code><code> | </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 | ||
Ligne 212: | Ligne 193: | ||
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 lien symbolique ''lien2.txt'' en ''lien1.txt''.</note> |
<code user>mv lien2.txt lien1.txt</code> | <code user>mv lien2.txt lien1.txt</code> | ||
- | === Modifier le nom du fichier cible === | + | ==== Modification du nom d'un fichier cible ==== |
Modifions le nom du fichier cible ''test1.txt'' : | Modifions le nom du fichier cible ''test1.txt'' : | ||
- | <code user>mv test1.txt test2.txt | + | |
+ | <code user> | ||
+ | mv test1.txt test2.txt | ||
ls -l | ls -l | ||
</code><code> | </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 test2.txt | -rw-r--r-- 1 martin martin 30 déc 14 22:08 test2.txt | ||
</code> | </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 alors est écrit en rouge dans le terminal //bash//). |
Il suffit : | Il suffit : | ||
- | - 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 : | + | * Ou bien de recréer le lien symbolique ''lien1.txt'' avec la commande ''ln'',\\ En désignant le fichier cible ''test2.txt''\\ Et en utilisant l'option ''f'' (pour forcer l'écrasement du fichier de destination) :\\ ''ln -sf test2.txt lien1.txt''\\ :!: Attention de ne pas intervertir les deux noms, car sinon ce sera le fichier cible qui sera écrasé. |
- | 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 cible en ''test1.txt'' |
- | <code user>mv test2.txt test1.txt</code> | + | |
- | ==== Modifications des droits des fichiers liés : ==== | + | <code user> |
+ | mv test2.txt test1.txt | ||
+ | </code> | ||
- | Depuis le début de cette illustration, nous voyons que les droits restent immuablement complets pour le fichier symbole ''lien1.txt''. | + | ==== Modifications des droits ==== |
+ | |||
+ | Depuis le début de cette illustration, nous voyons que les droits restent immuablement complets pour le fichier du lien symbolique ''lien1.txt''. | ||
rwx rwx rwx | rwx rwx rwx | ||
Essayons de les modifier. \\ | Essayons de les modifier. \\ | ||
- | Modifions la propriété du fichier symbole ''lien1.txt'' pour que root devienne le propriétaire. | + | Modifions la propriété du fichier du lien symbolique ''lien1.txt'' pour que //root// devienne le propriétaire. |
- | + | ||
- | === Modification des droits d'un fichier symbole === | + | |
Situation de départ : | Situation de départ : | ||
Ligne 253: | Ligne 235: | ||
ls -l | ls -l | ||
</code><code> | </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 | ||
Ligne 266: | Ligne 247: | ||
ls -l | ls -l | ||
</code><code> | </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 | ||
</code> | </code> | ||
- | Nous voyons que le fichier symbole ''lien1.txt'' n'est pas affecté par cette modifications des droits : | + | Nous voyons que le fichier du lien symbolique ''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 | 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'' : | + | Et que le fichier cible ''test1.txt'' s'en trouve directement rectifié par cette commande exécuter sur le fichier du lien symbolique ''lien1.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 | ||
- | ==== Créer un lien physique (hardlink) : ==== | + | ===== Les liens physiques (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 299: | Ligne 279: | ||
ls -l | ls -l | ||
</code><code> | </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 | ||
</code> | </code> | ||
Ligne 308: | Ligne 287: | ||
ls -lv | ls -lv | ||
</code><code> | </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 318: | Ligne 296: | ||
Le chiffre ''1'' devient ''2'' dans la ligne du fichier cible test2.txt : | Le chiffre ''1'' devient ''2'' dans la ligne du fichier cible test2.txt : | ||
- | Pareillement dans la ligne du fichier symbole physique lien2.txt créé : | + | Pareillement dans la ligne du ''lien2.txt'' : ''-rw-r--r-- **2** martin martin 0 déc 15 00:02 lien2.txt'' |
- | + | ||
- | <code> | + | |
- | -rw-r--r-- **2** martin martin 0 déc 15 00:02 lien2.txt | + | |
- | </code> | + | |
Une autre différence est le partage des droits qui sont là __tout à fait identiques__ entre les fichiers liés physiquement. | 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 ==== | + | ==== Modifications du contenu des fichiers ==== |
- | + | ||
- | === 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 : | 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 : | ||
Ligne 334: | Ligne 306: | ||
echo Très bien titi ! > lien2.txt | echo Très bien titi ! > lien2.txt | ||
ls -l | ls -l | ||
- | </code></code> | + | </code><code> |
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 | ||
Ligne 357: | Ligne 329: | ||
ls -l | ls -l | ||
</code><code> | </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 | ||
Ligne 364: | Ligne 335: | ||
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. | ||
- | === Occupation concrète sur le disque === | + | ==== 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 : | À 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 : | ||
Ligne 371: | Ligne 342: | ||
ls -li | ls -li | ||
</code><code> | </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 | ||
Ligne 382: | Ligne 352: | ||
//On va pas s'gêner avec pour les gonfler de données car cela ne doublera pas l'occupation physique du disque !// :-D | //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 des fichiers ==== |
Suppression du fichier cible ''test2.txt'' : | Suppression du fichier cible ''test2.txt'' : | ||
Ligne 389: | Ligne 359: | ||
ls -l | ls -l | ||
</code><code> | </code><code> | ||
- | 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 | ||
</code> | </code> | ||
Ligne 403: | Ligne 372: | ||
ls -l | ls -l | ||
</code><code> | </code><code> | ||
- | total 0 | ||
</code> | </code> | ||