Entendo muito bem a noção de hardlinks e li as páginas de manual para obter ferramentas básicas como cp--- e até as especificações recentes do POSIX --- várias vezes. Ainda fiquei surpreso ao observar o seguinte comportamento:
$ echo john > john
$ cp -l john paul
$ echo george > george
Neste ponto johne paulterá o mesmo nodo (e conteúdo), e georgeserão diferentes em ambos os aspectos. Agora fazemos:
$ cp george paul
Nesse ponto, eu esperava georgee paulter números de inode diferentes, mas o mesmo conteúdo - essa expectativa foi atendida -, mas também esperava paulagora ter um número de inode diferente johne johnainda ter o conteúdo john. Foi aqui que fiquei surpresa. Acontece que copiar um arquivo para o caminho de destino paultambém resulta na instalação desse mesmo arquivo (mesmo inode) em todos os outros caminhos de destino que compartilham paulo inode. Eu estava pensando que cpcria um novo arquivo e o move para o local anteriormente ocupado pelo arquivo antigo paul. Em vez disso, o que parece fazer é abrir o arquivo existente paul, truncá-lo e gravargeorgeo conteúdo desse arquivo existente. Portanto, qualquer "outro" arquivo com o mesmo inode recebe "seu" conteúdo atualizado ao mesmo tempo.
Ok, esse é um comportamento sistemático e, agora que sei esperar, posso descobrir como contornar ou tirar proveito disso, conforme apropriado. O que me intriga é onde eu deveria ver esse comportamento documentado? Eu ficaria surpreso se não estiver documentado em algum lugar nos documentos que eu já olhei. Mas, aparentemente, eu senti falta disso, e agora não consigo encontrar uma fonte que discuta esse comportamento.