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
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
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 :
cp -a lien_symbolique_absolu un_dossier_pour_cp/lien_symbolique_absolu_cp-a
La commande tree donnera :
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
- Manuel de ln[FR], ln[EN]
- Manuel de rsync[FR], ln[EN]
- Symbolic link
- Hard link
- The difference between hard and soft links
኿