Ответы:
В Unix все обычные файлы являются жесткими ссылками. Жесткие ссылки в файловой системе Unix (и в большинстве (всех?)) Являются ссылками на то, что называется inode
. Он inode
имеет счетчик ссылок, когда у вас есть одна «ссылка» на файл (что является нормальным способом действия), счетчик равен 1. Когда вы создаете вторую, третью, четвертую и т. Д. Ссылку, счетчик увеличивается (увеличивается) каждый время один При удалении ( rm
) ссылки счетчик уменьшается (уменьшается) на единицу. Если счетчик ссылок достигает 0, файловая система удаляет inode
и помечает пространство как доступное для использования.
Короче говоря, до тех пор, пока вы не удалите последнюю ссылку, файл останется.
Edit:
Файл останется, даже если последняя ссылка будет удалена . Это один из способов обеспечения безопасности данных, содержащихся в файле, недоступных для любого другого процесса. Полное удаление данных из файловой системы выполняется только в том случае, если данные имеют 0 ссылок на них, как указано в их метаданных, и не используются каким-либо процессом.
Это IMHO, безусловно, самый простой способ понять жесткие ссылки (и их отличие от мягких ссылок).
unlink
.
/proc
представляют собой отдельную (виртуальную) файловую систему.
unlink()
к удалению файла не давал мне покоя, когда я начал играть с программированием на C на MS-DOS некоторое время назад в первой половине 1990-х годов. :)
Тестирование оказалось проще, чем я думал: я создал текстовый файл, а затем жестко связался с ним. Удаление жесткой ссылки никак не удалить файл , он hardlinked к и файл , который был связан с остатками , где она.
все файлы на вашем диске на самом деле являются указателями на реальные данные на вашем диске.
когда вы создаете жесткую ссылку для этого файла, файл с жесткой ссылкой будет указывать на те же данные, на которые указывал исходный файл.
Как и в этом примере, a.txt указывал на данные (байты) файла, находящегося на диске, когда создается жесткая ссылка b.txt, он указывает на то, на что указывал a.txt.
таким образом, удаление одного из них не повлияет на другое, они отделены друг от друга.
НО, когда вы удалите их оба, система увидит, что данные на диске не имеют файла, указывающего на него, поэтому система будет рассматривать их как свободное место и перезапишет их, когда захочет.
FILE "A.txt"
идентично тому LINK "B.txt"
, что вы назвали один a, FILE
а другой a LINK
. Ссылка действительно черная стрелка.
unlink()
.