Série des 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.
Ce billet ne traite pas directement de lien, mais dâune solution permettant d'obtenir un rĂ©sultat similaire, uniquement valable pour les rĂ©pertoires et utilisant un tout autre processus.
Simuler un lien en utilisant : « mount »
Pour faire cela vous aurez besoin des droits administrateurs, de crĂ©er un dossier vide et dâutiliser la commande mount avec lâoption --bind
(en français : « attaché »).
Et en gros la syntaxe sera :
mkdir DOSSIER_CIBLE
sudo mount --bind /DOSSIER_REEL /DOSSIER_CIBLE
OĂč la notation /DOSSIER_xxx
indique quâil sâagit du chemin absolu vers le dossier en question.
Mais attention, cette manipulation ne résiste pas à un redémarrage du systÚme. Si vous souhaitez que ce soit le cas vous devrez ajouter dans votre fichier /etc/fstab
(droit administrateur requis)Â :
/DOSSIER_CIBLE /DOSSIER_REEL none defaults,bind 0 0
Outre le redĂ©marrage du systĂšme, lâopĂ©ration inverse se fait Ă lâaide de la commande umount
 :
sudo umount /DOSSIER_CIBLE
Exemple dâutilisation de « mount --bind »
Attaché un fichier
Il nâest pas possible de faire un montage vers un fichier, il vous faudra utiliser les liens symboliques pour faire quelque chose de similaire.
Attaché un répertoire à un autre
Pour monter un répertoire sur un autre, vous devez, au préalable, créer un répertoire vide.
mkdir "${HOME}/attache-de-repertoire"
sudo mount --bind "${HOME}/dossier_reel" "${HOME}/attache-de-repertoire"
Pour répondre à un cas plus général, la forme correcte serait plutÎt :
sudo mount --bind "$( realpath "${HOME}/dossier_reel" )" "$( realpath "${HOME}/attache-de-repertoire" )"
Les points de montage ne devant pas travers de lien, il faut sâassurer que les Ă©ventuels liens soit rĂ©solut AVANT dâattacher le rĂ©pertoire.
Examinons ce répertoire
ls -ld "${HOME}/attache-de-repertoire"
Résultat :
drwxrwxr-x 2 username username 4096 mai 26 10:24 attache-de-repertoire
Examinons son contenu :
ls -la "${HOME}/attache-de-repertoire"
Résultat :
total 20
drwxrwxr-x 2 username username 4096 mai 26 10:24 .
drwxr----- 136 username username 12288 mai 26 18:31 ..
-rw-rw-r-- 1 username username 20 mai 26 10:24 le-fichier.txt
Regardons les montages du systÚme :
mount | grep attache-de-repertoire
On retrouve bien notre petit montage :
/dev/sdx1 on /home/username/attache-de-repertoire type ext4 (rw,relatime,errors=remount-ro)
Ou dans /etc/fstab
 :
/home/username/dossier_reel /home/username/attache-de-repertoire none bind
Pour générer une ligne de maniÚre sûre votre configuration, vous pouvez utiliser :
cat <<EOF
$( realpath "${HOME}/dossier_reel" ) $( realpath "${HOME}/attache-de-repertoire" ) none bind
EOF
Notez que si vous avez un espace dans lâun des chemins, il vous faudra le remplacer par la sĂ©quence de caractĂšre : \040
.
La commande « realpath »
En utilisant mount âbind
vous ne pourrez par détecter le chemin réel.
La commande « find »
On recherche notre fichier, sans suivre les liens symboliques.
find "${HOME}"/ -maxdepth 3 -name 'le-fichier.txt' -ls
11010885 4 -rw-rw-r-- 1 username username 20 mai 28 07:10 /home/claude/attache-de-repertoire/le-fichier.txt
11010885 4 -rw-rw-r-- 1 username username 20 mai 28 07:10 /home/claude/dossier_reel/le-fichier.txt
Le prédicat -xdev
de find permet de ne pas parcourir les rĂ©pertoires situĂ©s sur dâautres systĂšmes de fichiers (« file system »).
find "${HOME}"/ -xdev -maxdepth 3 -name 'le-fichier.txt' -ls
Dans lâexemple prĂ©sentĂ©, les rĂ©pertoires « attache-de-repertoire » et « dossier_reel » sont sur le mĂȘme systĂšme de fichier, on sâattendrait cependant Ă ce que le prĂ©dicat -xdev
oblige find Ă ignorer le rĂ©pertoire attachĂ©, mais ce nâest pas le casâŠ
Attaché un répertoire en lecture seule
Notez que lâĂ©criture :
sudo mount --bind "${HOME}/dossier_reel" "${HOME}/attache-de-repertoire"
peut sâĂ©crire :
sudo mount -o bind "${HOME}/dossier_reel" "${HOME}/attache-de-repertoire"
ce qui permet de passer plus de paramÚtre concernant le point de montage, et par exemple :
sudo mount -o remount,ro,bind "$( realpath "${HOME}/dossier_reel" )" "$( realpath "${HOME}/attache-de-repertoire" )"
Ce qui permet de « ré-attaché » (remount »
) le rĂ©pertoire et dâinterdire lâĂ©criture (ro
pour « read only »).
Essayons de créer un fichier « test » :
touch "${HOME}/attache-de-repertoire/test"
Le rĂ©sultat sera un message dâerreur :
touch: cannot touch '/home/username/attache-de-repertoire/test': Read-only file system
Références
- đ Raccourcis Ă la Windows sous Linux
- đ Linux et les liens symboliques mortsâŠ
- Explaining Soft Link And Hard Link In Linux With Examples
- How do I do 'mount --bind' in /etc/fstab?
- Linux mount and umount
኿