Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/12/2017, à 13:00

DonutMan75

[Résolu] cp, ln et lien physique : qu'ai je fait ?

Bonjour à tous,
j'ai un répertoire assez gros /A/gros_repertoire qui contient pas mal de données.
Pour des raisons d'organisation logique, je souhaitais stocker ce répertoire à un autre endroit de mon arborescence (mais toujours sur le même filesystem), mettons /B/gros_repertoire

Comme ni A ni B n'est plus "important" d'un point de vue logique, je me suis dit que j'allais créer un lien physique plutôt que symbolique.
L'avantage étant que, si quelqu'un par mégarde supprimait des données dans /A/gros_repertoire, eh bien les données sont toujours dispo !

Voici deux exemples de ce que je veux faire (ces commandes n'ont pas été entrées séquentiellement, j'ai supprimé à chaque fois le répertoire cible)

$ cp -al /A/gros_repertoire /B/gros_repertoire # Commande 1
$ cp -al /A/gros_repertoire/* /B/gros_repertoire/* # Commande 2

Les commandes 1 et 2 sont il me semble équivalentes.
En particulier, la syntaxe de 1 ne va pas créer de lien physique du répertoire source mais en créer un nouveau dans /B/, puis pour chacun des fichiers de /A/ on crée un lien physique dans B.

Je m'en rends compte avec des ll bien placés et en regardant le nombre de lien indiqué juste avant donut donut.

$ ll | grep A
drwxr-xr-x 2 donut donut 4096 Dec 20 10:53 A
$ ll /A/* | head
dtotal 192036
drwxr-xr-x 2 donut donut      4096 Dec 20 10:53 .
drwxr-xr-x 4 donut donut      4096 Dec 20 11:24 ..
-rw-r--r-- 1 donut donut       219 Feb 20  2017 toto
$ cp -al /A/gros_repertoire /B/gros_repertoire
$ ll /A/* | head
dtotal 192036
drwxr-xr-x 2 donut donut      4096 Dec 20 10:53 .
drwxr-xr-x 4 donut donut      4096 Dec 20 11:24 ..
-rw-r--r-- 2 donut donut       219 Feb 20  2017 toto

Un ls -i montre par ailleurs que les répertoires source et cible ont des inode différents, alors que les fichiers qu'ils contiennent ont des inodes identiques deux à deux.

Ai-je bien compris ce qu'il s'est passé ?

Mais pour terminer, j'ai voulu tester la même chose avec ln et là c'est le drame :

$ ln -T /A/gros_repertoire /B/gros_repertoire # Commande 3
ln: `/A/gros_repertoire/': hard link not allowed for directory

La je n'arrive pas à bien comprendre cette limitation. En quoi cela est gênant d'avoir des liens physiques sur répertoire ?

Merci pour votre retour smile

Donut

Dernière modification par DonutMan75 (Le 20/12/2017, à 16:28)

Hors ligne

#2 Le 20/12/2017, à 14:50

bruno

Re : [Résolu] cp, ln et lien physique : qu'ai je fait ?

Bonjour,

À ma connaissance on ne peut pas faire de lien physique (hard link) sur des répertoires. D'après la page de man de ln, l'option -d ou -F permettrait de le forcer sur certains systèmes (pas sous Linux).

Si ce n'est pas permis, c'est que c'est dangereux (boucles et ambiguïtés sur les répertoires parents . et ..). Voir des explications plus poussées (en anglais) :

https://unix.stackexchange.com/question … unix-linux
https://askubuntu.com/questions/210741/ … irectories

Dernière modification par bruno (Le 20/12/2017, à 15:08)

Hors ligne

#3 Le 20/12/2017, à 16:27

DonutMan75

Re : [Résolu] cp, ln et lien physique : qu'ai je fait ?

Bonjour bruno,
merci pour ton retour.
En effet, ça semble évident une fois que c'est expliqué !

https://unix.stackexchange.com/questions/22394/why-are-hard-links-to-directories-not-allowed-in-unix-linux a écrit :

Now, if you were allowed to do this for directories, two different directories in different points in the filesystem could point to the same thing. In fact, a subdir could point back to its grandparent, creating a loop.

Quoiqu'il en soit, il me semble qu'avoir utilisé des liens physiques dans mon cas est "propre" et plus robuste que les liens logiques.

Merci pour ton retour smile

Donut

Hors ligne