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 johny paultendrá el mismo inodo (y contenido), y georgediferirá en ambos aspectos. Ahora hacemos:
$ cp george paul
En este punto esperaba georgey paultener diferentes números de inodo pero el mismo contenido --- esta expectativa se cumplió --- pero también esperaba paultener ahora un número de inodo diferente de john, y johnaún tener el contenido john. Aquí es donde me sorprendió. Resulta que copiar un archivo a la ruta de destino paultambién tiene el resultado de instalar ese mismo archivo (mismo inodo) en todas las demás rutas de destino que comparten paulel inodo. Estaba pensando que cpcrea 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 escribirgeorgeEl 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.