cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu

Dans ce billet on va répondre à des questions autour des liens :

  • Que se passe-t-il lors de l’on :
    • Copie des liens symboliques ? des liens physiques ?
    • Supprime des liens symboliques ? des liens physiques ?
  • Comment contourner le comportement par dĂ©faut ?

ඏ

Ce billet vient compléter la série de billets sur les liens sous Linux :

  • (partie 1) PrĂ©sentation des concepts,
  • (partie 2) Mise en Ɠuvres des liens symboliques,
  • (partie 3) Une alternative : les montages de rĂ©pertoires,
  • (partie 4) SynthĂšse.

ඏ

La suppression de liens

Le cas des liens physiques (“hard link”)

L’utilisation de liens physiques implique que le fichier et le lien soit sur la mĂȘme partition, que cette partition utilise un systĂšme de fichier (“file system”) supportant ce type de lien ce qui est le cas dans la majoritĂ© des cas — Les liens physiques font en effet partie de la norme POSIX.

CrĂ©er un nouveau rĂ©pertoire pour faire le test ci-dessous, et dĂ©placer vous dedans Ă  l’aide de la commande cd.

On va créer un fichier et un lien physique vers ce fichier :

echo fichier_reel >fichier_reel
ln fichier_reel lien_physique

On peut vĂ©rifier que les deux entrĂ©es du rĂ©pertoire pointent bien vers le mĂȘme fichier Ă  l’aide de l’option --inode (ou -i) de la commande ls.

ls -i

Ce qui donne quelque chose comme :

11281634 fichier_reel  11281634 lien_physique

Les deux entĂȘtes de fichiers joues le mĂȘme rĂŽle, elles pointent tous les mĂȘmes donnĂ©es. On peut supprimer indiffĂ©remment une des deux entrĂ©es.

Les donnĂ©es existent tant qu’au moins une des entĂȘtes existe.

On comprend que l’on peut renommer Ă  volontĂ© les deux fichiers, renommer Ă©tant ici Ă  prendre au sens large ; au sens de la commande mv qui inclus le changement de rĂ©pertoire, tant que l’on ne change pas de partition.

Pour supprimer une des entrées, vous pouvez utiliser indifféremment unlink ou rm :

unlink fichier
rm fichier

Le cas des liens symboliques (“symbolic link” / “symlink”)

L’utilisation de liens symbolique peut se faire sur des fichiers ou des rĂ©pertoires, le lien et la cible n’ont pas besoin d’ĂȘtre sur la mĂȘme partition. Le systĂšme de fichier (“file system”) qui porte le lien symbolique soit compatible avec la norme POSIX, ce qui est le cas des systĂšmes de fichier les plus courant.

CrĂ©er un nouveau rĂ©pertoire pour faire le test ci-dessous, et dĂ©placer vous dedans Ă  l’aide de la commande cd.

On va créer un fichier et un lien physique vers ce fichier :

echo fichier_reel >fichier_reel
ln -s fichier_reel lien_symbolique

On peut vĂ©rifier que les deux entrĂ©es du rĂ©pertoire pointent bien vers le mĂȘme fichier Ă  l’aide de l’option --inode (ou -i) de la commande ls.

ls -li

Ce qui donne quelque chose comme :

total 4
11281635 -rw-rw-r-- 
 fichier_reel
11281637 lrwxrwxrwx 
 lien_symbolique -> fichier_reel

Dans ce cas la valeur inode est n’est pas la mĂȘme pour les deux fichiers. Le second fichier est clairement identifiĂ© par son type lrwxrwxrwx et on voit qu’il pointe vers fichier_reel.

On comprend que la suppression ou le renommage (au sens de mv) du fichier fichier_reel impliquera que le lien soit cassĂ© (“broken link”).

Supprimer ou renommer le fichier lien_symbolique n’aura aucun effet sur le fichier fichier_reel.

Mais renommer le fichier lien_symbolique risque de briser le lien dans le cas oĂč cela le dĂ©place.


ඏ

Copier des liens

Le cas des liens physiques (“hard link”)

Les liens physiques ne se copient pas, plus prĂ©cisĂ©ment copier un lien physique revient Ă  faire une copie d’un fichier rĂ©gulier (la notion de lien disparaĂźt).


Le cas des liens symboliques (“symbolic link” / “symlink”)

echo fichier_reel >fichier_reel
ln -s fichier_reel lien_symbolique
mkdir un_dossier_pour_cp
cp lien_symbolique un_dossier_pour_cp/lien_symbolique_cp
tree
├── fichier_reel ├── lien_symbolique -> fichier_reel # cyan = lien symbolique └── un_dossier_pour_cp └── lien_symbolique_cp

Faisons la mĂȘme opĂ©ration avec le gestionnaire de fichier depuis l'interface graphique (Nemo, GNOME File), donc dans votre dossier, crĂ©er un nouveau dossier que nous nommerons un_dossier_depuis_la_gui.

Depuis l'interface graphique, copier le fichier (CTRL + c), déplacez-vous dans le dossier un_dossier_depuis_la_gui et coller le fichier (CTRL + v).

Puis regardez le résultat à l'aide de la commande tree :

tree
├── fichier_reel ├── lien_symbolique -> fichier_reel # cyan = lien symbolique ├── un_dossier_depuis_la_gui │   └── lien_symbolique -> fichier_reel # rouge = lien symbolique brisĂ© └── un_dossier_pour_cp └── lien_symbolique_cp

On constate qu'il ne se passe pas exactement la mĂȘme chose le terminal (en utilisant cp) et depuis l'interface graphique.

Avec la commande cp, ce n'est pas le lien qui est copié mais le fichier cible.

cp -a lien_symbolique un_dossier_pour_cp/lien_symbolique_cp-a

Copie le lien, mais il est brisé car nous avons utiliser un lien relatif

Regardons avec un lien absolu.

ln -s "$( realpath fichier_reel )" lien_symbolique_absolu

La commande tree donnera :

├── fichier_reel ├── lien_symbolique -> fichier_reel ├── lien_symbolique_absolu -> /home/user/Desktop/tmp/tmp/fichier_reel ├── un_dossier_depuis_la_gui │   └── lien_symbolique -> fichier_reel ├── un_dossier_depuis_la_gui2 │   └── lien_symbolique -> fichier_reel └── un_dossier_pour_cp ├── lien_symbolique_cp └── lien_symbolique_cp-a -> fichier_reel
cp -a lien_symbolique_absolu un_dossier_pour_cp/lien_symbolique_absolu_cp-a

La commande tree donnera :

├── fichier_reel ├── lien_symbolique -> fichier_reel ├── lien_symbolique_absolu -> /home/user/Desktop/tmp/tmp/fichier_reel ├── un_dossier_depuis_la_gui │   └── lien_symbolique -> fichier_reel ├── un_dossier_depuis_la_gui2 │   └── lien_symbolique -> fichier_reel └── un_dossier_pour_cp ├── lien_symbolique_absolu_cp-a -> /home/user/Desktop/tmp/tmp/fichier_reel ├── lien_symbolique_cp └── lien_symbolique_cp-a -> fichier_reel

ඏ

Les sauvegardes

En gĂ©nĂ©ral, dans un logiciel de sauvegarde, les liens symboliques sont pris en compte. Le lien est copiĂ© tel-quel afin d’éviter de sauvegarder les donnĂ©es en doubles.

Typiquement la commande rsync conserve les liens lors de la synchronisation.

Comment copier le contenu du fichier original Ă  la place du lien avec rsync, il faut utiliser le drapeau --copy-links.

rsync --copy-links SOURCE DESTINATION
  • --copy-links, -L — Transforme le lien symbolique en fichier/rĂ©pertoire rĂ©fĂ©rent

On peut contrÎler un peu mieux le backup avec quelque chose comme :

rsync --archive --copy-links --delete --progress --update --verbose SOURCE/ DESTINATION/
  • --archive, -a correspond aux drapeaux:
    • --recursive, -r — Parcours les rĂ©pertoires de maniĂšre rĂ©cursive
    • --links, -l — Copie les liens symboliques en tant que liens symboliques ← qui, dans notre cas, est annulĂ© par --copy-links
    • --perms, -p – PrĂ©serve les permissions
    • --times, -t — PrĂ©serve les heures de modification
    • --group, -g — PrĂ©serve le groupe
    • --owner, -o — PrĂ©serve le propriĂ©taire (super-utilisateur uniquement)
    • --devices — PrĂ©serve les fichiers de type pĂ©riphĂ©riques (super-utilisateur uniquement)
    • --specials — PrĂ©serve les fichiers spĂ©ciaux
  • --progress — Afficher la progression pendant le transfert
  • --update, -u — Ignorer les fichiers plus rĂ©cents sur le rĂ©cepteur
  • --verbose, -v — Augmenter verbositĂ©
rsync --delete-excluded --exclude '*.xcf' --archive --compress --copy-links --delete --progress --update --verbose SOURCE/ DESTINATION/
  • --delete-excluded — Supprime Ă©galement les fichiers exclus des rĂ©pertoires de destination
  • --exclude=PATTERN — Exclut les fichiers correspondant au PATTERN
  • --compress, -z — compresse les donnĂ©es du fichier pendant le transfert ← Ceci n’est intĂ©ressant que lorsque la source et la destination ne sont pas sur la mĂȘme machine.

ඏ

Interaction des liens avec les applications

Les applications standards (hormis celles destinĂ©es Ă  la gestion de fichier) ne sont pas censĂ©es s’inquiĂ©ter des liens. Elles doivent traiter tous les liens comme des fichiers normaux.

Par exemple, un outil comme git prendra en compte les liens symboliques, et mettra dans le dépÎt une information permettant de reconstruire le lien.


ඏ

Liens

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog