cClaude.rocks ☕ Le blog

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

Menu
đŸ˜€ Ce billet a Ă©tĂ© Ă©ditĂ© le : 2024-09-02

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

኿


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