Je comprends très bien la notion de liens physiques et j'ai lu plusieurs fois les pages de manuel des outils de base comme cp
--- et même les spécifications POSIX récentes ---. J'ai quand même été surpris d'observer le comportement suivant:
$ echo john > john
$ cp -l john paul
$ echo george > george
À ce stade, john
il paul
aura le même inode (et le même contenu) et george
différera sur les deux aspects. Maintenant, nous faisons:
$ cp george paul
A ce stade , je me attendais george
et paul
d'avoir un nombre différent de inodes , mais le même contenu --- cette attente est satisfaite --- mais je également prévu paul
d'avoir maintenant un inode différent de john
, et john
d'avoir encore le contenu john
. C'est là que j'ai été surpris. Il s'avère que la copie d'un fichier vers le chemin de destination paul
a également pour résultat d'installer ce même fichier (même inode) sur tous les autres chemins de destination qui partagent paul
l'inode. Je pensais que cela cp
crée un nouveau fichier et le déplace à la place autrefois occupée par l'ancien fichier paul
. Au lieu de cela, ce qu'il semble faire est d'ouvrir le fichier existant paul
, de le tronquer et d'écriregeorge
contenu dans ce fichier existant. Par conséquent, tous les "autres" fichiers avec le même inode obtiennent "leur" contenu mis à jour en même temps.
Ok, c'est un comportement systématique et maintenant que je sais m'y attendre, je peux trouver un moyen de contourner ce problème ou d'en tirer parti, le cas échéant. Ce qui me laisse perplexe, c'est où j'étais censé voir ce comportement documenté? Je serais surpris si ce n'est pas documenté quelque part dans des documents que j'ai déjà consultés. Mais apparemment, je l'ai manqué, et je ne trouve pas maintenant une source qui discute de ce comportement.