Capisco molto bene la nozione di hardlink e ho letto le pagine man per strumenti di base come cp
--- e persino le recenti specifiche POSIX --- un numero di volte. Sono rimasto sorpreso di osservare il seguente comportamento:
$ echo john > john
$ cp -l john paul
$ echo george > george
A questo punto john
e paul
avrà lo stesso inode (e contenuto) e george
differirà per entrambi gli aspetti. Adesso facciamo:
$ cp george paul
A questo punto ho aspettato george
e paul
avere diversi numeri di inode, ma lo stesso contenuto --- questa aspettativa era rispettato --- ma ho anche aspettato paul
di avere ora un numero di inode diverso da john
, e per john
avere ancora il contenuto john
. Questo è dove sono stato sorpreso. Si scopre che la copia di un file nel percorso di destinazione paul
ha anche il risultato dell'installazione dello stesso file (stesso inode) in tutti gli altri percorsi di destinazione che condividono paul
l'inode. Stavo pensando che cp
crea un nuovo file e lo sposta nel posto precedentemente occupato dal vecchio file paul
. Invece quello che sembra fare è aprire il file esistente paul
, troncandolo e scriveregeorge
contenuto in quel file esistente. Quindi qualsiasi "altro" file con lo stesso inode ottiene "contenuto" aggiornato allo stesso tempo.
Ok, questo è un comportamento sistematico e ora che so di aspettarmelo, posso capire come aggirarlo o sfruttarlo, a seconda dei casi. Cosa mi confonde dove avrei dovuto vedere questo comportamento documentato? Sarei sorpreso se non fosse documentato da qualche parte nei documenti che ho già visto. Ma a quanto pare l'ho perso, e ora non riesco a trovare una fonte che discute di questo comportamento.