Що станеться, коли ви видалите жорстке посилання?


Відповіді:


110

У Unix всі звичайні файли - це жорсткі посилання. Жорсткі посилання у файлових системах Unix (і більшість (усіх?)) - це посилання на те, що називається an inode. У inodeлічильника посилань, коли у вас є одне "посилання" на файл (який є звичайним способом роботи), лічильник дорівнює 1. Коли ви створюєте друге, третє, четверте і т.д. посилання, лічильник збільшується (збільшується) кожен час за одним. Коли ви видаляєте ( rm) посилання, лічильник зменшується (зменшується) на одиницю. Якщо лічильник посилань досягає 0, файлова система видаляє inodeі позначає простір як доступний для використання.

Коротше кажучи, поки ви не видалите останню посилання, файл залишиться.

Edit:Файл залишиться, навіть якщо остання посилання буде видалена . Це один із способів забезпечення безпеки даних, що містяться у файлі, недоступними для жодного іншого процесу. Повністю видалити дані з файлової системи, лише якщо дані мають 0 посилань на неї, як зазначено у її метаданих та не використовуються жодним процесом.

Цей ІМХО - це найпростіший спосіб зрозуміти жорсткі посилання (та його відмінність від програмних посилань).


7
Більше того, системний виклик для видалення файлу є unlink().
mouviciel

1
Це не охоплює ситуацію, коли файл відкритий, коли остання посилання unlinkредагується.
cjm

5
@OrangeDog, не зовсім тому, що жорсткі посилання не можуть перетинати файлові системи, а /procце окрема (віртуальна) файлова система.
cjm

2
/ proc також відображає внутрішні структури даних ядра (це спосіб ядра Linux піддавати певні дані у досить чітко визначеному форматі, не надаючи всім і всім прямим доступом до пам'яті ядра). Тому точніше сказати, що ядро ​​відслідковує факт відкритості файлу та відкриває цю інформацію через procfs.
CVn

1
І так, заклик unlink()до видалення файлу мене збентежив, коли я почав грати з програмуванням на C на MS-DOS деякий час ще в першій половині 1990-х. :)
CVn

12

Тестування було простіше, ніж я думав: я створив текстовий файл, а потім важко пов'язаний з ним. Видалення жорсткого посилання не видаляє файл, на який він посилається, а файл, з яким було пов’язано, залишається там, де він є.


1
це правда, але не повна картина
ксенотеррацид

3
Ключовим є те, що створення текстового файлу також додає жорстке посилання. У файлових системах * NIX всі файли (inode) повинні бути принаймні один раз жорсткими посиланнями в структуру каталогу.
Зупиніть шкодити Моніці

0

всі файли на вашому диску фактично є покажчиками реальних даних на вашому диску. введіть тут опис зображення

коли ви робите жорстке посилання для цього файлу, файл hard-ed буде вказувати на ті самі дані, на які вказував вихідний файл.

введіть тут опис зображення

як у цьому прикладі, a.txt вказував на дані (байти) файлу, який є на диску, коли буде створено жорстке посилання b.txt, воно вказуватиме на те, на що вказував a.txt.

таким чином видалення одного з них не вплине на інше, яке вони відокремлені один від одного.

АЛЕ, коли ви видалите їх обоє, система побачить, що дані, що знаходяться на диску, не мають вказівки на нього, тому система вважатиме це вільним простором і замінить його, коли захоче.


2
Я думаю, що вам важливо уточнити, що FILE "A.txt"це ідентично LINK "B.txt", особливо, як ви називали одного a, FILEа другого a LINK. Посилання - це справді чорна стрілка.
roaima

так, я подумав, що не буде зрозуміло, що b.txt - це жорсткий пов'язаний файл ...
ZOLDIK
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.