Différences
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 | ||
lien_physique_et_symbolique [Le 03/06/2020, 10:55] polobuntu |
lien_physique_et_symbolique [Le 07/05/2023, 14:54] (Version actuelle) bcag2 [Exemple de lien symbolique] chown/chgrp -h |
||
---|---|---|---|
Ligne 8: | Ligne 8: | ||
I. Lien symbolique entre répertoires | I. Lien symbolique entre répertoires | ||
- | De manière générale, voici comment utiliser la commande « ln » pour créer un lien symbolique : ln -s dossier_cible nom_du_lien. | + | De manière générale, un lien symbolique (ou : "symlink") est un raccourci. Voici comment utiliser la commande « ln » pour créer un lien symbolique : |
+ | <code>ln -s dossier_cible nom_du_lien.</code> | ||
Dans cet exemple, nous souhaitons qu’en allant sur le répertoire /opt/jdk, nous atterrissions en réalité sur /opt/jdk1_7.2. Cela permet de facilement gérer le changement de version de Java. | Dans cet exemple, nous souhaitons qu’en allant sur le répertoire /opt/jdk, nous atterrissions en réalité sur /opt/jdk1_7.2. Cela permet de facilement gérer le changement de version de Java. | ||
Ligne 14: | Ligne 15: | ||
Nous allons commencer par créer un lien symbolique entre deux répertoires. Nous utiliserons pour cela la commande « ln » (links) : | Nous allons commencer par créer un lien symbolique entre deux répertoires. Nous utiliserons pour cela la commande « ln » (links) : | ||
- | ln –s /opt/jdk1_7.2 /opt/jdk | + | <code>ln –s /opt/jdk1_7.2 /opt/jdk</code> |
Le lien symbolique « /opt/jdk » sera alors créé. | Le lien symbolique « /opt/jdk » sera alors créé. | ||
+ | |||
+ | II. Lien physique vers un fichier | ||
+ | |||
+ | Un lien physique (ou : "hardlink") est utilisé pour faire un lien direct vers un fichier. Le lien physique se crée aussi //via// la commande "ln", cette fois-ci sans option : | ||
+ | <code>ln /chemin/fichier/a/lier chemin/fichier/lié</code> | ||
+ | |||
===== Définitions ===== | ===== Définitions ===== | ||
- | Il existe deux types de liens qui permettent de rediriger un fichier vers un autre : les **liens physiques** (ou matériels) et les **liens symboliques**. | + | Il existe deux types de liens qui permettent de rediriger un fichier vers un autre : les **liens physiques** (ou matériels) et les **liens symboliques**. |
Avec un lien physique, les données du disque sont pointées par plusieurs entrées de répertoire, contrairement à ce qui se passe avec un lien symbolique. | Avec un lien physique, les données du disque sont pointées par plusieurs entrées de répertoire, contrairement à ce qui se passe avec un lien symbolique. | ||
- | Un lien matériel (ou physique) est l'information exacte elle-même, située à la même position sur le disque dur. Avec un lien physique, vous pouvez copier certaines données du fichier cible, effacer le reste du fichier, et il continuera à exister. | + | Un lien matériel (ou physique) est l'information exacte elle-même, située à la même position sur le disque dur. Avec un lien physique, vous pouvez copier certaines données du fichier cible, effacer le reste du fichier, et il continuera à exister. |
Un lien symbolique est un fichier qui pointe vers un autre fichier ; si vous supprimez le fichier cible, les liens symboliques pointeront vers un fichier inexistant. | Un lien symbolique est un fichier qui pointe vers un autre fichier ; si vous supprimez le fichier cible, les liens symboliques pointeront vers un fichier inexistant. | ||
Ligne 40: | Ligne 47: | ||
- | * **Lien symbolique** : permet d'attribuer un autre chemin d'accès à un fichier en pointant sur un nom de fichier. | + | * **Lien symbolique** : permet d'attribuer un autre chemin d'accès à un fichier en pointant sur un nom de fichier. |
Voici le résultat obtenu en entrant la même commande **ls -i** : | Voici le résultat obtenu en entrant la même commande **ls -i** : | ||
Ligne 50: | Ligne 57: | ||
On voit que les deux fichiers pointent vers deux numéros d'inode **différents**. | On voit que les deux fichiers pointent vers deux numéros d'inode **différents**. | ||
- | <note help>Dans quels cas est-il plus judicieux d'utiliser un lien symbolique plutôt qu'un lien physique et vice-versa ? | + | <note help>Dans quels cas est-il plus judicieux d'utiliser un lien symbolique plutôt qu'un lien physique et vice-versa ? |
Réponse partielle 1 : dans les environnements graphiques (Dolphin, etc.), on ne trouve pas l'option pour créer de lien fixe ... et je le regrette parfois. | Réponse partielle 1 : dans les environnements graphiques (Dolphin, etc.), on ne trouve pas l'option pour créer de lien fixe ... et je le regrette parfois. | ||
Ligne 56: | Ligne 63: | ||
Réponse partielle 2 : les liens symboliques permettent une meilleure maintenance de l'espace disque. Avec des liens en dur (physiques) partout, il deviendrait difficile de savoir si on a vraiment effacé un fichier du disque. | Réponse partielle 2 : les liens symboliques permettent une meilleure maintenance de l'espace disque. Avec des liens en dur (physiques) partout, il deviendrait difficile de savoir si on a vraiment effacé un fichier du disque. | ||
- | Réponse partielle 3 : dans le cas où le lien doit pointer vers un autre système de fichiers (autre partition ou autre support de stockage), seul le lien symbolique est possible. | + | Réponse partielle 3 : dans le cas où le lien doit pointer vers un autre système de fichiers (autre partition ou autre support de stockage), seul le lien symbolique est possible. |
- | Réponse partielle 4 : dans la gestion des sauvegardes, les liens symboliques ne sont généralement pas suivis, ce qui permet d'éviter de sauvegarder les mêmes fichiers plusieurs fois. | + | Réponse partielle 4 : dans la gestion des sauvegardes, les liens symboliques ne sont généralement pas suivis, ce qui permet d'éviter de sauvegarder les mêmes fichiers plusieurs fois. |
Réponse partielle 5 : inversement, dans certains cas, il faut passer par le lien physique pour que la sauvegarde fonctionne. Il faut alors passer par la console (ligne de commande ou "mc" à installer et essayer). Exemple : je sauvegarde régulièrement "/etc", mais quelques rares paquets demandent un peu de configuration dans "/var/lib/..." ; je mets alors des liens en dur dans un sous-répertoire ad hoc de mon répertoire /etc, pour que la sauvegarde de ces paquets soit aussi assurée. | Réponse partielle 5 : inversement, dans certains cas, il faut passer par le lien physique pour que la sauvegarde fonctionne. Il faut alors passer par la console (ligne de commande ou "mc" à installer et essayer). Exemple : je sauvegarde régulièrement "/etc", mais quelques rares paquets demandent un peu de configuration dans "/var/lib/..." ; je mets alors des liens en dur dans un sous-répertoire ad hoc de mon répertoire /etc, pour que la sauvegarde de ces paquets soit aussi assurée. | ||
Ligne 87: | Ligne 94: | ||
<note important>Malheureusement, les liens symboliques ne sont pas mis à jour lorsque le fichier source est déplacé ou renommé. Il faut les recréer.</note> | <note important>Malheureusement, les liens symboliques ne sont pas mis à jour lorsque le fichier source est déplacé ou renommé. Il faut les recréer.</note> | ||
- | ===== Pré-requis pour l'exemple ===== | + | ====== Prérequis pour l'exemple ====== |
On montrera cela par un exemple simple : | On montrera cela par un exemple simple : | ||
Ligne 97: | Ligne 104: | ||
===== Exemple de lien physique ===== | ===== Exemple de lien physique ===== | ||
- | On crée un lien physique (que l'on nomme lien_dur) | + | On crée un lien physique (que l'on nomme lien_dur) : |
ln source lien_dur | ln source lien_dur | ||
- | À présent, on peut également lire le document source à partir de lien_dur | + | À présent, on peut également lire le document source à partir de lien_dur : |
gedit lien_dur | gedit lien_dur | ||
Ligne 112: | Ligne 119: | ||
===== Exemple de lien symbolique ===== | ===== Exemple de lien symbolique ===== | ||
- | Pour créer un lien symbolique, on utilise aussi la commande ln, en ajoutant toutefois l'option -s. | + | Pour créer un lien symbolique, on utilise aussi la commande //ln//, en ajoutant toutefois l'option -s. |
- | On crée un lien symbolique (que l'on nomme ici lien_symb) | + | On crée un lien symbolique (que l'on nomme ici //lien_symb//) : |
- | ln -s source lien_symb | + | <code bash>ln -s source lien_symb</code> |
- | On pourra toujours lire source depuis lien_symb | + | On pourra toujours lire //source// depuis //lien_symb// : |
- | gedit lien_symb | + | <code bash>gedit lien_symb</code> |
- | À la différence du lien physique, après la destruction de source, le fichier ne sera plus accessible ! | + | À la différence du lien physique, après la destruction ou même simplement le renommage de source, le fichier ne sera plus accessible ! |
+ | <code bash> | ||
rm source | rm source | ||
gedit lien_symb | gedit lien_symb | ||
+ | </code> | ||
- | On peut repérer les liens symboliques avec ls -F, ils apparaissent avec un @ à la fin. | + | On peut repérer les liens symboliques avec ls -F, ils apparaissent avec un @ à la fin. |
ls -F | ls -F | ||
+ | Pour modifier le propriétaire ou/et le groupe d'un lien symbolique, il faut utiliser l'option //-h//, sinon c'est les propriétés de la cible qu'on change et non celle du lien (le sudo n'est pas indispensable, si on a les droits évidemment) : | ||
+ | <code bash> | ||
+ | sudo chown -h nom_utilisateur_proprio:nom_groupe lien_symb | ||
+ | sudo chgrp -h nom_groupe lien_symb | ||
+ | </code> | ||
===== Autres documentations disponibles ===== | ===== Autres documentations disponibles ===== | ||
* [[http://wiki.linux-france.org/wiki/Les_commandes_fondamentales_de_Linux | Explication sur linux-france.org]] * | * [[http://wiki.linux-france.org/wiki/Les_commandes_fondamentales_de_Linux | Explication sur linux-france.org]] * | ||
+ | * [[https://forum.ubuntu-fr.org/viewtopic.php?pid=22433798#p22433798 | Script corrigeant en masse les conséquences d'un renommage de dossier qui casse les liens symboliques dirigeant vers lui, ses sous-répertoires et fichiers]]. par MicP | ||
===== En dual-boot Windows ===== | ===== En dual-boot Windows ===== |