Entiendo muy bien la noción de enlaces duros, y he leído las páginas del manual sobre herramientas básicas como cp
--- e incluso las especificaciones POSIX recientes --- varias veces. Aún así me sorprendió observar el siguiente comportamiento:
$ echo john > john
$ cp -l john paul
$ echo george > george
En este punto john
y paul
tendrá el mismo inodo (y contenido), y george
diferirá en ambos aspectos. Ahora hacemos:
$ cp george paul
En este punto esperaba george
y paul
tener diferentes números de inodo pero el mismo contenido --- esta expectativa se cumplió --- pero también esperaba paul
tener ahora un número de inodo diferente de john
, y john
aún tener el contenido john
. Aquí es donde me sorprendió. Resulta que copiar un archivo a la ruta de destino paul
también tiene el resultado de instalar ese mismo archivo (mismo inodo) en todas las demás rutas de destino que comparten paul
el inodo. Estaba pensando que cp
crea un nuevo archivo y lo mueve al lugar anteriormente ocupado por el archivo anterior paul
. En cambio, lo que parece hacer es abrir el archivo existente paul
, truncarlo y escribirgeorge
El contenido de ese archivo existente. Por lo tanto, cualquier "otro" archivo con el mismo inodo actualiza "su" contenido al mismo tiempo.
Ok, este es un comportamiento sistemático y ahora que sé que puedo esperarlo, puedo descubrir cómo solucionarlo o aprovecharlo, según corresponda. Lo que me desconcierta es dónde se suponía que debía ver este comportamiento documentado. Me sorprendería si no está documentado en algún lugar de los documentos que ya he visto. Pero aparentemente me lo perdí, y ahora no puedo encontrar una fuente que discuta este comportamiento.