Odpowiedzi:
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
. inode
Posiada 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 inode
i 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).
unlink
.
/proc
są osobnym (wirtualnym) systemem plikó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. :)
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.
wszystkie pliki na dysku są w rzeczywistości wskaźnikami do rzeczywistych danych na dysku.
kiedy utworzysz hardlink dla tego pliku, plik hardlink będzie wskazywał te same dane, które wskazywał oryginalny plik.
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.
FILE "A.txt"
jest identyczny LINK "B.txt"
, szczególnie, gdy nazywasz jeden FILE
a drugi drugim LINK
. Link to tak naprawdę czarna strzałka.
unlink()
.