Co się stanie, gdy usuniesz twardy link?


Odpowiedzi:


110

W Uniksie wszystkie normalne pliki to Hardlinks. Twarde linki w systemach plików Unix (i większości (wszystkich?)) Są odniesieniami do tego, co nazywa się inode. inodePosiada licznik odniesienia, gdy masz „link” jeden do pliku (co jest normalne modus operandi) licznik jest 1. Po utworzeniu drugi, trzeci, czwarty, itd Link, licznik jest zwiększany (zwiększenie) każda raz po raz. Po usunięciu ( rm) linku licznik jest zmniejszany (zmniejszany) o jeden. Jeśli licznik linków osiągnie 0, system plików usuwa inodei oznacza miejsce jako dostępne do użycia.

Krótko mówiąc, dopóki nie usuniesz ostatniego linku, plik pozostanie.

Edit:Plik pozostanie, nawet jeśli ostatni link zostanie usunięty . Jest to jeden ze sposobów zapewnienia, że ​​bezpieczeństwo danych zawartych w pliku nie będzie dostępne dla żadnego innego procesu. Całkowite usunięcie danych z systemu plików odbywa się tylko wtedy, gdy dane mają 0 linków do niego, jak podano w jego metadanych i nie są wykorzystywane przez żaden proces.

Ten IMHO jest zdecydowanie najłatwiejszym sposobem na zrozumienie twardych linków (i ich różnicy od miękkich linków).


7
Ponadto wywołanie systemowe do usunięcia pliku to unlink().
mouviciel

1
Nie obejmuje to sytuacji, gdy plik jest otwarty, gdy edytuje się ostatni link unlink.
cjm

5
@OrangeDog, niezupełnie, ponieważ dowiązania twarde nie mogą przenikać systemów plików i /procsą osobnym (wirtualnym) systemem plików.
cjm

2
/ proc odzwierciedla również wewnętrzne struktury danych jądra (jest to sposób, w jaki jądro Linuksa może ujawniać pewne dane w rozsądnie dobrze zdefiniowanym formacie, nie dając wszystkim i różnym bezpośrednim dostępem do pamięci jądra). Dlatego dokładniej jest powiedzieć, że jądro śledzi fakt, że plik jest otwarty, i ujawnia te informacje poprzez procfs.
CVn

1
I tak, dzwonienie w unlink()celu usunięcia pliku zaskoczyło mnie bez końca, kiedy zacząłem grać w programowanie C na MS-DOS jakiś czas temu w pierwszej połowie lat 90. :)
CVn

12

Testowanie było łatwiejsze niż myślałem: utworzyłem plik tekstowy, a następnie na stałe do niego podłączyłem. Usuwanie twarde łącze ma nie usunąć plik jest hardlinked się i plik, który został połączony z resztkami gdzie to jest.


1
to prawda, ale nie pełny obraz
ksenoterracid

3
Kluczem jest to, że utworzenie pliku tekstowego dodaje również twardy link. W systemach plików * NIX wszystkie pliki (i-węzły) muszą przynajmniej zostać dowiązane na stałe do struktury katalogów.
Stop Harming Monica,

0

wszystkie pliki na dysku są w rzeczywistości wskaźnikami do rzeczywistych danych na dysku. wprowadź opis zdjęcia tutaj

kiedy utworzysz hardlink dla tego pliku, plik hardlink będzie wskazywał te same dane, które wskazywał oryginalny plik.

wprowadź opis zdjęcia tutaj

tak jak w tym przykładzie, a.txt wskazywał na dane (bajty) pliku, który znajduje się na dysku, kiedy zostanie utworzone hardlink b.txt, wskaże to, na co wskazywał a.txt.

w ten sposób usunięcie jednego z nich nie wpłynie na drugie, które są od siebie oddzielone.

ALE, gdy usuniesz oba z nich, system zobaczy, że dane na dysku nie mają pliku wskazującego na to, więc system uzna to za wolne miejsce i nadpisze je, kiedy chce.


2
Myślę, że ważne jest, abyś wyjaśnił, że FILE "A.txt"jest identyczny LINK "B.txt", szczególnie, gdy nazywasz jeden FILEa drugi drugim LINK. Link to tak naprawdę czarna strzałka.
roaima

tak, myślałem, że nie będzie jasne, że b.txt to plik z twardym połączeniem ...
ZOLDIK
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.