Відповіді:
У Unix всі звичайні файли - це жорсткі посилання. Жорсткі посилання у файлових системах Unix (і більшість (усіх?)) - це посилання на те, що називається an inode
. У inode
лічильника посилань, коли у вас є одне "посилання" на файл (який є звичайним способом роботи), лічильник дорівнює 1. Коли ви створюєте друге, третє, четверте і т.д. посилання, лічильник збільшується (збільшується) кожен час за одним. Коли ви видаляєте ( rm
) посилання, лічильник зменшується (зменшується) на одиницю. Якщо лічильник посилань досягає 0, файлова система видаляє inode
і позначає простір як доступний для використання.
Коротше кажучи, поки ви не видалите останню посилання, файл залишиться.
Edit:
Файл залишиться, навіть якщо остання посилання буде видалена . Це один із способів забезпечення безпеки даних, що містяться у файлі, недоступними для жодного іншого процесу. Повністю видалити дані з файлової системи, лише якщо дані мають 0 посилань на неї, як зазначено у її метаданих та не використовуються жодним процесом.
Цей ІМХО - це найпростіший спосіб зрозуміти жорсткі посилання (та його відмінність від програмних посилань).
unlink
редагується.
/proc
це окрема (віртуальна) файлова система.
unlink()
до видалення файлу мене збентежив, коли я почав грати з програмуванням на C на MS-DOS деякий час ще в першій половині 1990-х. :)
Тестування було простіше, ніж я думав: я створив текстовий файл, а потім важко пов'язаний з ним. Видалення жорсткого посилання не видаляє файл, на який він посилається, а файл, з яким було пов’язано, залишається там, де він є.
всі файли на вашому диску фактично є покажчиками реальних даних на вашому диску.
коли ви робите жорстке посилання для цього файлу, файл hard-ed буде вказувати на ті самі дані, на які вказував вихідний файл.
як у цьому прикладі, a.txt вказував на дані (байти) файлу, який є на диску, коли буде створено жорстке посилання b.txt, воно вказуватиме на те, на що вказував a.txt.
таким чином видалення одного з них не вплине на інше, яке вони відокремлені один від одного.
АЛЕ, коли ви видалите їх обоє, система побачить, що дані, що знаходяться на диску, не мають вказівки на нього, тому система вважатиме це вільним простором і замінить його, коли захоче.
FILE "A.txt"
це ідентично LINK "B.txt"
, особливо, як ви називали одного a, FILE
а другого a LINK
. Посилання - це справді чорна стрілка.
unlink()
.