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 | ||
doc:systeme:ln [14/11/2012 14:59] 127.0.0.1 modification externe |
doc:systeme:ln [03/08/2024 22:47] (Version actuelle) agp91 [Description] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== LN ====== | + | ====== ln ====== |
+ | * Objet: commande ln | ||
+ | * Niveau requis :{{tag>débutant avisé}} | ||
+ | * Commentaires : // Permet de créer des liens physiques ou symboliques // | ||
+ | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-) | ||
+ | * [[: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]] | ||
+ | * Suivi : {{tag>à-compléter}}{{tag>à-tester}} | ||
+ | * Création par [[user>smolski]] le 21/06/2010 | ||
+ | * Testé par [[user>agp91]] le 04/07/2024 | ||
+ | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=113446|C'est ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
- | La commande ''ln'' établit un lien symbolique ou un lien physique entre 2 fichiers ou répertoires créés ou ajoutés. | + | =====Introduction===== |
- | + | La commande ''ln'' établit un lien symbolique ou un lien physique entre 2 fichiers. | |
- | 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. | Les modifications opérées //sur/dans// l'un sont visibles immédiatement depuis l'un ou l'autre des fichiers liés. | ||
- | |||
===== Synopsis ===== | ===== Synopsis ===== | ||
Ligne 13: | Ligne 24: | ||
== Lien symbolique : == | == Lien symbolique : == | ||
- | ln -s <fichier_cible> <fichier_symbole> | + | ln -s <fichier_cible> <nom_lien> |
- | ln -s <répertoire_cible> <répertoire_symbole> | + | ln -s <répertoire_cible> <nom_lien> |
- | ln -s <point_cible> <point_symbole> | + | |
== Lien physique : == | == Lien physique : == | ||
Ligne 22: | Ligne 32: | ||
- | ===== Remarque Importante ===== | + | **ATTENTION :** Un lien physique à la particularité de devoir se situer __sur le même système de fichier__ que sa cible ! |
+ | ===== Description ===== | ||
+ | |||
+ | On distingue 2 sortes de lien : les liens durs et les liens symboliques. | ||
== Les liens symboliques (symlink) == | == Les liens symboliques (symlink) == | ||
- | Les liens symboliques (symlink) peuvent lier | + | 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é. |
- | + | ||
- | * 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 | + | == Les liens physiques ou durs (hardlink) == |
- | - que des fichiers | + | 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. |
- | - et que dans le même système de fichier (une partition par exemple, ou un même systeme de fichier en reseau...), | + | |
- | car ils sont eux gérés au niveau du FS (File System = Système de fichier). | ||
**Nota :** \\ | **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. :-) | + | Les systèmes de fichier msdos/fat/vfat et exfat ne prennent pas en charge ni les liens symboliques, ni les liens physiques.\\ |
+ | ([[https://debian-facile.org/viewtopic.php?pid=417068#p417068|Démonstration dans le forum]]) | ||
- | //Merci de ces remarques habiles au concert de //**Mahoru`Tsunemi**// et de //**captnfab**// sur l'IRC.// | + | ===== Préparatifs ===== |
- | ===== Illustration pratique ===== | + | 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]] : |
- | * [[commande:mkdir | La commande MKDIR]] | + | <code user>cd |
- | * [[commande:cd | La commande CD]] | + | mkdir test_lien |
- | * [[commande:touch | La commande TOUCH]] | + | cd test_lien |
- | * [[commande:echo | La commande ECHO]] | + | </code> |
- | * [[commande:cat | La commande CAT]] | + | |
- | * [[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]] | + | |
- | * [[commande:editeur: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 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> | ||
+ | touch test1.txt | ||
+ | echo Bonjour Jojo > test1.txt | ||
+ | </code> | ||
- | ==== Créer les répertoires et fichiers tests que nous allons utiliser ==== | + | On vérifie avec la commande [[:doc:systeme:cat|cat]] que notre texte est bien écrit dans le fichier test1.txt : |
+ | <code user> | ||
+ | cat test1.txt | ||
+ | </code><code> | ||
+ | Bonjour Jojo | ||
+ | </code> | ||
- | Dans ''/home/votre_user/'', créez un répertoire nommé //''test_lien''// et s'y positionner : | + | ===== Les liens symboliques (symlink) : ===== |
- | $ cd ~ | + | Situation de départ : |
+ | <code user>ls -l</code> | ||
+ | <code> | ||
+ | total 4 | ||
+ | -rw-r--r-- 1 martin martin 13 déc 14 22:02 test1.txt | ||
+ | </code> | ||
- | $ mkdir test_lien | + | ==== Créer un lien symbolique ==== |
- | $ cd test_lien/ | + | On crée le lien symbolique : |
- | test_lien$ | + | |
- | Créer dans ce répertoire deux fichier **test1.txt** rempli de la ligne //Bonjour toto// et test2.txt laissé vide : | + | <code user>ln -s test1.txt lien1.txt</code> |
- | test_lien$ touch test2.txt | + | Ce qui nous fait maintenant : |
- | test_lien$ echo Bonjour toto > test1.txt | + | <code user> |
- | + | ls -l | |
- | test_lien$ cat test1.txt | + | </code><code> |
- | 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 | total 4 | ||
- | lrwxrwxrwx 1 votre_user votre_user 9 jun 21 07:23 lien1.txt -> test1.txt | + | lrwxrwxrwx 1 martin martin 9 déc 14 22:05 lien1.txt -> test1.txt |
- | - rw- r-- r-- 1 votre_user votre_user 13 jun 21 07:22 test1.txt | + | -rw-r--r-- 1 martin martin 13 déc 14 22:02 test1.txt |
- | - rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.txt | + | |
</code> | </code> | ||
- | //**l**rwxrwxrwx 1 votre_user votre_user **8** jun 21 07:23 lien1.txt **-> test1.txt**// | + | 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** 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 : | + | - Dans le 1er champ (''lrwxrwxrwx''), la première lettre : **''l''**, indique que ce fichier est un lien symbolique. |
+ | - Dans le 5em champ, le chiffre **''9''**, indique l'occupation en octet du fichier. | ||
+ | - **''<nowiki>-> test1.txt</nowiki>''** indique le fichier que désigne le lien symbolique. | ||
- | * Un //fichier symbole// créé avec la commande ''ln'' ne contient pas l'occupation disque affichée qui est contenue dans le fichier cible. | + | Précisons aussi que : |
- | * 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 ==== | + | * La taille (occupation disque) d'un //fichier d'un lien symbolique// ne correspond pas à l'occupation disque affichée du 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 lien symbolique ne détruit rien dans le fichier cible. | ||
- | test_lien$ echo Comment vas-tu ? >> lien1.txt | + | ==== Modification du contenu ==== |
- | test_lien$ cat lien1.txt | + | <code user> |
- | Bonjour toto | + | echo Comment vas-tu ? >> lien1.txt |
- | Comment vas-tu ? | + | cat lien1.txt |
+ | </code><code> | ||
+ | Bonjour toto | ||
+ | Comment vas-tu ? | ||
+ | </code> | ||
- | test_lien$ cat test1.txt | + | <code user> |
- | Bonjour toto | + | cat test1.txt |
- | Comment vas-tu ? | + | </code><code> |
+ | Bonjour toto | ||
+ | Comment vas-tu ? | ||
+ | </code> | ||
- | <code> | + | <code user> |
- | test_lien$ $ ls -l | + | ls -l |
+ | </code><code> | ||
total 4 | total 4 | ||
- | lrwxrwxrwx 1 votre_user votre_user **9** jun 21 07:23 lien1.txt -> test1.txt | + | lrwxrwxrwx 1 martin martin 9 déc 14 22:05 lien1.txt -> test1.txt |
- | - rw- r-- r-- 1 votre_user votre_user **30** jun 21 07:22 test1.txt | + | -rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt |
- | - rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.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> | + | |
- | test_lien$ ls -li | + | <code user> |
- | 604494 - rw- r-- r-- 2 admijoel admijoel 32 jun 21 11:04 lien2.txt | + | ls -li |
- | 604493 - rw- r-- r-- 2 admijoel admijoel 32 jun 21 11:04 test2.txt | + | </code><code> |
+ | 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 | ||
</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'' : |
- | test_lien$ rm lien1.txt | + | <code user> |
- | + | rm lien1.txt | |
- | <code> | + | ls -l |
- | test_lien$ $ ls -l | + | </code><code> |
total 4 | total 4 | ||
- | - rw- r-- r-- 1 votre_user votre_user **30** jun 21 07:22 test1.txt | + | -rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt |
- | - rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.txt | + | |
</code> | </code> | ||
- | ==== Modification du nom des fichiers liés : ==== | + | Recréons le même lien symbolique ''lien1.txt'' : |
- | + | <code user> | |
- | Recréons le même fichier symbole //lien1.txt// : | + | ln -s test1.txt lien1.txt |
- | test_lien$ ln -s test1.txt lien1.txt | + | ls -l |
- | + | </code><code> | |
- | <code> | + | |
- | test_lien$ $ ls -l | + | |
total 4 | total 4 | ||
- | l rwx rwx rwx 1 votre_user votre_user **9** jun 21 07:23 lien1.txt -> test1.txt | + | lrwxrwxrwx 1 martin martin 9 déc 14 22:13 lien1.txt -> test1.txt |
- | - rw- r-- r-- 1 votre_user votre_user **30** jun 21 07:22 test1.txt | + | -rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt |
- | - rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.txt | + | |
</code> | </code> | ||
- | === Modifier le nom du fichier symbole === | + | ==== Modification du nom d'un lien symbolique ==== |
- | Modifions le nom du fichier symbole lien1.txt : | + | Modifions le nom du fichier du lien symbolique ''lien1.txt'' à l'aide de la [[:doc:systeme:mv |commande mv]] : |
- | test_lien$ mv lien1.txt lien2.txt | + | |
- | <code> | + | <code user> |
- | test_lien$ $ ls -l | + | mv lien1.txt lien2.txt |
+ | ls -l | ||
+ | </code><code> | ||
total 4 | total 4 | ||
- | l rwx rwx rwx 1 votre_user votre_user **9** jun 21 07:23 lien2.txt -> test1.txt | + | lrwxrwxrwx 1 martin martin 9 déc 14 22:13 lien2.txt -> test1.txt |
- | - rw- r-- r-- 1 votre_user votre_user **30** jun 21 07:22 test1.txt | + | -rw-r--r-- 1 martin martin 30 déc 14 22:08 test1.txt |
- | - rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.txt | + | |
</code> | </code> | ||
Tout reste fonctionnel et en place. :-) | 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> | + | <note>Pour poursuivre cette illustration dans la clarté, remettons le nommage du lien symbolique ''lien2.txt'' en ''lien1.txt''.</note> |
- | test_lien$ mv lien2.txt lien1.txt | + | <code user>mv lien2.txt lien1.txt</code> |
- | === Modifier le nom du fichier cible === | + | ==== Modification du nom d'un fichier cible ==== |
- | Modifions le nommage du fichier cible ''test1.txt'' : | + | Modifions le nom du fichier cible ''test1.txt'' : |
- | test_lien$ mv test1.txt test3.txt | + | |
- | <code> | + | <code user> |
- | test_lien$ $ ls -l | + | mv test1.txt test2.txt |
+ | ls -l | ||
+ | </code><code> | ||
total 4 | total 4 | ||
- | lrwxrwxrwx 1 votre_user votre_user **9** jun 21 07:23 <del>lien1.txt</del> -> <del>test1.txt</del> | + | lrwxrwxrwx 1 martin martin 9 déc 14 22:13 lien1.txt -> test1.txt |
- | - rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.txt | + | -rw-r--r-- 1 martin martin 30 déc 14 22:08 test2.txt |
- | - rw- r-- r-- 1 votre_user votre_user **30** jun 21 07:22 test3.txt | + | |
</code> | </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. | + | //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 ''test3.txt'' en ''test1.txt'', | + | * 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 ''test3.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é. |
- | test_lien$ ln -s test3.txt lien1.txt | + | |
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'' |
- | test_lien$ mv test3.txt test1.txt | + | |
- | ==== 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 : |
+ | <code user> | ||
+ | ls -l | ||
+ | </code><code> | ||
+ | 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 | ||
+ | </code> | ||
- | En terminal root, exécutez la commande : | + | En terminal root, changez les droits sur le fichier avec la commande [[:doc:systeme:chmod|chmod]] : |
- | test_lien# chmod 700 lien1.txt | + | <code root>chmod 700 lien1.txt</code> |
- | <code> | + | On obtient alors : |
- | test_lien$ $ ls -l | + | |
+ | <code user> | ||
+ | ls -l | ||
+ | </code><code> | ||
total 4 | total 4 | ||
- | l rwx rwx rwx 1 votre_user votre_user 9 jun 21 07:23 lien1.txt -> test1.txt | + | lrwxrwxrwx 1 martin martin 9 déc 14 23:00 lien1.txt -> test1.txt |
- | - rw- --- --- 1 votre_user votre_user 13 jun 21 07:22 test1.txt | + | -rwx------ 1 martin martin 13 déc 14 22:59 test1.txt |
- | - rw- r-- r-- 1 votre_user votre_user 0 jun 21 07:22 test2.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 : |
- | ''l **rwx rwx rwx** 1 votre_user votre_user 9 jun 21 07:23 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'' : |
- | ''- **rw- --- ---** 1 votre_user votre_user 13 jun 21 07:22 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. | ||
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. | 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> | <note important>**ATTENTION :** Un lien physique à la particularité de devoir se situer __sur le même système de fichier__ que sa cible !</note> | ||
Ligne 261: | Ligne 274: | ||
==== Créer un lien physique ==== | ==== Créer un lien physique ==== | ||
- | Supprimons les fichiers liés symboliquement : | + | Commençons par supprimer les fichiers liés symboliquement et créer un fichier de départ vide, test2, : |
- | test_lien$ rm *1.txt | + | |
- | Pour créer un lien physique, on utilise la commande ''ln'' sans l'option ''-s''. | + | <code user> |
- | <code> | + | rm *1.txt |
- | test_lien$ ln test2.txt lien2.txt | + | touch test2.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> | </code> | ||
+ | |||
+ | Au départ, nous avons donc la situation suivante : | ||
+ | <code user> | ||
+ | ls -l | ||
+ | </code><code> | ||
+ | total 0 | ||
+ | -rw-r--r-- 1 martin martin 0 déc 15 00:02 test2.txt | ||
+ | </code> | ||
+ | |||
+ | Pour créer un lien physique, on utilise la commande ''ln'' sans l'option ''-s''. | ||
+ | <code user> | ||
+ | ln test2.txt lien2.txt | ||
+ | ls -lv | ||
+ | </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 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. \\ | ||
+ | |||
Nous pouvons toutefois distinguer un changement dans le listage des droits des fichiers liés physiquement : | 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 : | Le chiffre ''1'' devient ''2'' dans la ligne du fichier cible test2.txt : | ||
- | <code> | + | Pareillement dans la ligne du ''lien2.txt'' : ''-rw-r--r-- **2** martin martin 0 déc 15 00:02 lien2.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) | + | |
- | </code> | + | |
- | Pareillement dans la ligne du fichier symbole physique lien2.txt créé : | + | <note tip>Le second champ retourné par le commande ''ls -l'', indique ne nombre de noms (chemins) que dispose un fichier.\\ |
- | <code> | + | \\ |
- | - rw- r-- r-- 2 admijoel admijoel 0 jun 21 11:04 lien2.txt | + | * ''1'' : Quand un fichier n'est pas lié physiquement. |
- | </code> | + | * ''2'' : Indique que ce fichier est lié à un autre fichier. Il dispose alors de 2 noms. |
+ | * ''3'' : Indique que ce fichier est lié à deux autres fichiers. Il dispose alors de 3 noms. | ||
+ | * Etc. | ||
+ | </note> | ||
- | Une autre différences 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. |
- | <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 ==== | + | ==== 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 : | ||
- | <code> | + | <code user> |
- | test_lien$ echo Très bien titi ! > lien2.txt | + | echo Très bien titi ! > lien2.txt |
- | + | ls -l | |
- | test_lien$ ls -l | + | </code><code> |
total 8 | total 8 | ||
- | - rw- r-- r-- 2 admijoel admijoel 18 jun 21 11:04 lien2.txt | + | -rw-r--r-- 2 martin martin 18 déc 15 13:49 lien2.txt |
- | - rw- r-- r-- 2 admijoel admijoel 18 jun 21 11:04 test2.txt | + | -rw-r--r-- 2 martin martin 18 déc 15 13:49 test2.txt |
+ | </code> | ||
- | test_lien$ cat test2.txt | + | <code user> |
+ | cat test2.txt | ||
+ | </code><code> | ||
Très bien titi ! | Très bien titi ! | ||
+ | </code> | ||
- | test_lien$ echo Et toi toto ? >> test2.txt | + | <code user> |
- | + | echo Et toi Jojo ? >> test2.txt | |
- | test_lien$ cat lien2.txt | + | cat lien2.txt |
+ | </code><code> | ||
Très bien titi ! | Très bien titi ! | ||
- | Et toi toto ? | + | Et toi Jojo ? |
+ | </code> | ||
- | test_lien$ ls -l | + | <code user> |
+ | ls -l | ||
+ | </code><code> | ||
total 8 | total 8 | ||
- | - rw- r-- r-- 2 admijoel admijoel 32 jun 21 11:04 lien2.txt | + | -rw-r--r-- 2 martin martin 32 déc 15 13:52 lien2.txt |
- | - rw- r-- r-- 2 admijoel admijoel 32 jun 21 11:04 test2.txt | + | -rw-r--r-- 2 martin martin 32 déc 15 13:52 test2.txt |
</code> | </code> | ||
- | Toutes les modifications, __ajoutées ou retranchées__ dans chacun des fichiers agira de même chez 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 : | ||
- | <code> | + | |
- | test_lien$ ls -li | + | <code user> |
- | 604492 - rw- r-- r-- 2 admijoel admijoel 32 jun 21 11:04 lien2.txt | + | ls -li |
- | 604492 - rw- r-- r-- 2 admijoel admijoel 32 jun 21 11:04 test2.txt | + | </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 test2.txt | ||
</code> | </code> | ||
Ligne 339: | Ligne 370: | ||
//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'' : | ||
- | <code> | + | <code user> |
- | test_lien$ rm test2.txt | + | rm test2.txt |
- | + | ls -l | |
- | test_lien$ ls -l | + | </code><code> |
total 4 | total 4 | ||
- | - rw- r-- r-- 1 admijoel admijoel 32 jun 21 11:04 lien2.txt | + | -rw-r--r-- 1 martin martin 32 déc 15 13:52 lien2.txt |
</code> | </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 355: | Ligne 387: | ||
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. | ||
- | test_lien$ rm *2.txt | + | <code user> |
- | + | rm *2.txt | |
- | test_lien$ ls -l | + | ls -l |
- | total 0 | + | </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 | ||
- | ===== TP01 - Nommer une partition ===== | + | ===== Conclusion ===== |
- | + | ||
- | 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 [[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 ! \\ | + | Les liens sont utiles si vous souhaitez qu'un fichier apparaisse dans plusieurs répertoires, ou sous un nom différent. |
- | (traduction pour les grands : //Si le chemin se fait correctement...//) | + | |
- | //Qu'esch' qu'ça dit ? \\ | + | Si le fichier a une assez grande taille vous pouvez envisager, au lieu de copier dans un répertoire donné, de créer un lien réduisant ainsi l'utilisation d'espace disque. |
- | Et ben moi, c'est : //**Bye bye**//, que j'vous dis !// :-D | + | |
+ | Autre point très intéressant, créer des liens, au lieu de copier les fichiers, assure que toute modification dans un fichier se retrouvera bien dans les « copies » dispersées un peu partout. | ||