Puede distinguir un archivo con enlace (s) rígido (s) de un archivo no enlazado con el "conteo de enlaces". Veo dos formas de obtener esto desde la línea de comando:
% stat original
File: ‘original’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 804h/2052d Inode: 932815 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 500/ bediger) Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
Birth: -
O
1010 % ls -li
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary
Ese solitario '2' antes de "bediger" es el recuento de enlaces. Tenga en cuenta que ambos nombres de archivo tienen el mismo número de inodo, 932815.
Estoy seguro de que ambos comandos obtienen el recuento de enlaces del campo st_nlink de struct stat, que se completa con una stat()
llamada al sistema.
Por lo que puedo decir, ejecutar tar
con --hard-dereference
significa que en lugar de obtener un solo archivo con dos nombres de archivo distintos (como en el ejemplo anterior), obtienes dos archivos, cada uno con un solo nombre de archivo. tar
probablemente verifica el recuento de enlaces en cada archivo y, de manera predeterminada, cuando extrae, crea un enlace duro en el segundo nombre de archivo que tiene para los datos del archivo enlazado. Cuando se llama con la --hard-dereference
creación del archivo, parece crear un archivo completamente nuevo para el segundo nombre de archivo cuando se tar
ejecuta la invocación de extracción .