Что происходит, когда Вы удаляете жесткую ссылку?

Хорошее место для запуска состояло бы в том, чтобы учиться компилировать Ядро Linux. Перейдите к www.kernel.org и начните загружать версии мерзавца и попытайтесь скомпилировать их сначала. Еще не устанавливайте их! Просто обучение создать ядро получит Вас идущий наверняка.

60
08.10.2012, 08:12
3 ответа

В Unix всеми нормальными файлами является Hardlinks. Hardlinks в Unix (и большинство (все?)) файловые системы являются ссылками на то, что звонило inode. inode имеет ссылочный счетчик, когда у Вас есть одна "ссылка" на файл (который является нормальным принципом работы), счетчик равняется 1. То, когда Вы создаете секунду, третью, четвертую, и т.д. связываетесь, счетчик увеличен (увеличилось) каждый раз одним. Когда Вы удаляете (rm) ссылка счетчик постепенно уменьшается (уменьшенная) одним. Если счетчик ссылки достигает 0, файловая система удаляет inode и отмечает пространство как доступное для использования.

Короче говоря, пока Вы не удаляете последнюю ссылку, которой останется файл.

Edit: Файл останется, даже если последняя ссылка будет удалена. Это - один из способов гарантировать, что безопасность данных, содержавшихся в файле, не доступна ни для какого другого процесса. Удаление данных из файловой системы полностью сделано, только если данные имеют 0 ссылок на него, как дали в его метаданных и не используются никаким процессом.

Это, по моему скромному мнению - безусловно самый легкий способ понять жесткие ссылки (и его различие от softlinks).

111
27.01.2020, 19:32
  • 1
    , Кроме того, системный вызов удаления файла unlink(). –  mouviciel 08.10.2012, 08:38
  • 2
    Это не покрывает ситуацию, где файл открыт, когда последняя ссылка unlinkредактор –  cjm 08.10.2012, 09:26
  • 3
    @OrangeDog, не точно, потому что hardlinks не может пересечь файловые системы, и /proc отдельная (виртуальная) файловая система. –  cjm 08.10.2012, 12:18
  • 4
    /proc также зеркально отражает внутренние структуры данных ядра (это - путь к ядру Linux для представления определенных данных в довольно четко определенном формате, не предоставляя всем до одного прямой доступ к памяти ядра). Таким образом, это больше с точностью до, говорят, что ядро отслеживает то, что файл открыт, и выставляет ту информацию через procfs. –  a CVn 08.10.2012, 14:11
  • 5
    И да, вызов unlink() удалить файл озадачило меня ни к какому концу, когда я начал играть с C, программирующим на MS-DOS некоторое время назад в первой половине 1990-х. :) –  a CVn 08.10.2012, 14:13

Тестирование было легче, чем я думал: Я создал текстовый файл, затем трудно связанный с ним. Удаление жесткой ссылки не удаляет файл, это - hardlinked к и файл, который был связан с, остается, где это.

13
27.01.2020, 19:32
  • 1
    , это верно, но не полное изображение –  xenoterracide 08.10.2012, 08:26
  • 2
    Ключ - то, что создание текстового файла также добавляет жесткую ссылку. В *ОТКЛОНЯЮТ файловые системы, все файлы (inodes) должны быть hardlinked, по крайней мере, однажды в структуру каталогов. –  OrangeDog 08.10.2012, 12:22

все файлы на вашем диске на самом деле являются указателями на реальные данные на вашем диске.enter image description here

когда вы делаете жесткую ссылку для этого файла, жесткая ссылка -ed файл будет указывать на те же данные, на которые указывал исходный файл.

enter image description here

как в этом примере, файл.txt указывал на данные (байт )файла, который находится на диске, когда создается жесткая ссылка b.txt, он будет указывать на то, на что указывал файл.txt. к.

Таким образом, удаление одного из них не повлияет на другое, поскольку они отделены друг от друга.

НО, когда вы удалите их оба, система увидит, что данные на диске не имеют файла, указывающего на него, поэтому система будет рассматривать его как свободное пространство и перезапишет его, когда захочет.

5
27.01.2020, 19:32

Теги

Похожие вопросы