Концепция довольно сложна для понимания.

Я понял, что жесткая ссылка указывает на один и тот же файл, поэтому они имеют тот же размер, что и исходный файл, а программные ссылки основаны на тексте и указывают на место искомого файла.

Что я не понимаю, так это то, почему, когда вы указываете на файл с жесткой ссылкой, а затем подавляете исходный файл, жесткая ссылка все еще представляет файл, а файлы все еще существуют тогда?

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

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

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

1 ответ1

2

Что я не понимаю, так это то, почему, когда вы указываете на файл с жесткой ссылкой, а затем подавляете исходный файл, жесткая ссылка все еще представляет файл, а файлы все еще существуют тогда?

Жесткие ссылки - это, по сути, просто имена, прикрепленные к индоду, и оригинальное имя, которое вы даете новому файлу, также является жесткой ссылкой. Поэтому, если вы удаляете оригинал, вы на самом деле не "подавляете исходный файл" - вы просто удаляете его исходную жесткую ссылку.

Системный вызов "Удалить файл" также называется unlink(2) - см. Документацию по Linux или FreeBSD .

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

Как указано выше. Жесткие ссылки - это просто имена файлов. Так что, если у него есть две жесткие ссылки (оригинальные и дополнительно созданные), то у него есть два имени.

(В большинстве систем Unix файлы без ссылок (без имен) также могут существовать - до тех пор, пока процесс сохраняет дескриптор. Это обычная уловка, используемая с временными файлами: создайте большой файл в /tmp и немедленно отсоедините его.)

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

Звучит правильно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .