Istnieje wiele całkiem poprawnych odpowiedzi, ale nie sądzę, aby ktokolwiek tak naprawdę zajął się pierwotnym błędnym postrzeganiem. Pierwotne pytanie brzmi: „kiedy tworzę dowiązanie symboliczne, łatwo jest je później zidentyfikować. Ale nie mogę wymyślić, jak zidentyfikować dowiązanie twarde”. I tak, odpowiedzi w zasadzie sprowadzają się do „nie możesz” i mniej więcej wyjaśniają dlaczego, ale wydaje się, że nikt nie przyznał, że tak naprawdę jest to mylące i dziwne.
Jeśli czytasz to wszystko i zorientowałeś się, co się dzieje, to jesteś dobry; nie musisz czytać mojego małego. Jeśli nadal jesteś zdezorientowany, kontynuuj.
Naprawdę bardzo krótka odpowiedź brzmi: twardy link wcale nie jest tak naprawdę linkiem, a nie takim, jak link symboliczny. Jest to nowy wpis w strukturze katalogów, który wskazuje na tę samą wiązkę bajtów, co oryginalny wpis w katalogu, a kiedy go utworzysz, jest on równie „prawdziwy” i legalny jak pierwszy. Każdy „normalny” plik na dysku ma co najmniej jeden twardy link; bez tego nie zobaczyłbyś tego w żadnymkatalogu i nie będzie mógł się do niego odwoływać ani go używać. Więc jeśli masz plik Fred.txt i łączysz do niego Wilma.txt i Barney.txt, wszystkie trzy nazwy (i wpisy katalogu) odnoszą się do tego samego pliku i wszystkie są jednakowo prawidłowe. System operacyjny nie może powiedzieć, że jeden z wpisów został utworzony po naciśnięciu przycisku „zapisz” w edytorze tekstu, a pozostałe zostały wykonane za pomocą polecenia „ln”.
System operacyjny nie trzeba śledzić, jak wiele różnych wpisy są skierowane do tego samego pliku, choć. Jeśli usuniesz plik Wilma.txt, nic dziwnego, że nie zwolnisz miejsca na dysku. Ale jeśli usuniesz Fred.txt („oryginalny” plik), nadal nie zwolnisz miejsca na dysku, ponieważ dane na dysku, które były znane jako Fred.txt, nadal są również Barney.txt. Dopiero po usunięciu wszystkich pozycji katalogu system operacyjny przydzieli miejsce zajmowane przez dane.
Gdyby Barney.txt był dowiązaniem symbolicznym, usunięcie Fred.txt spowodowałoby zwolnienie miejsca, a Barney.txt byłby teraz uszkodzonym łączem. Ponadto, jeśli przeniesiesz lub zmienisz nazwę pliku, który wskazuje na niego dowiązanie symboliczne, przerwiesz to łącze. Ale możesz przenieść lub zmienić nazwę pliku, na który chcesz na stałe, bez naruszania innych pozycji katalogu wskazujących na ten plik / dane, ponieważ wszystkie z nich są pozycjami katalogu, które odnoszą się do tego samego bloku danych na dysku (za pomocą i-węzeł # tych danych).
[To dwa lata później, a to ostatnie trochę mnie zdezorientowało , więc myślę, że wyjaśnię. Jeśli wpiszesz „mv ./Wilma.txt ../elsewhere/Betty.txt”, wygląda na to, że przenosisz plik, ale tak naprawdę nie jest. Naprawdę robisz to, usuwając element z listy katalogu bieżącego katalogu, który mówi „nazwa„ Wilma.txt ”jest powiązany z danymi, które można znaleźć za pomocą i-węzła ###### # ”i dodanie nowego elementu wiersza do listy katalogów katalogu ../elsewhere, który mówi„ nazwa Betty.txt ”jest powiązana z danymi, które można znaleźć za pośrednictwem i-węzła #######”. Dlatego możesz „przenieść” plik 2 gigabajty tak szybko, jak plik 2 kilobajty, o ile przenosisz je w inne miejsce na tym samym dysku.]
Ponieważ system operacyjny musi śledzić ilu różne wpisy w katalogach są skierowane do tej samej porcji danych, to można stwierdzić, czy dany plik został ciężko związana, chociaż nie można powiedzieć na pewno, jeśli wpis katalogu, który „patrzysz na to” jest oryginalny, czy nie. Jednym ze sposobów jest polecenie „ls”, a konkretnie „ls -l” (to jest małe litery L po myślniku)
Aby pożyczyć wcześniejszy przykład ...
-rw-r--r-- 3 stephane stephane 0 Nov 12 19:55 f1
Pierwsza litera to myślnik, więc nie jest to katalog ani coś egzotycznego, to zwykły zwykły plik. Ale gdyby było to naprawdę zwyczajne, liczba ta po części rwx wynosiłaby „1”, jak w „istnieje jeden wpis katalogu wskazujący na ten blok danych”. Ale to część demonstracji twardych linków, więc zamiast tego jest napisane „3”.
Zauważ, że może to prowadzić do dziwnych i tajemniczych zachowań (to znaczy, jeśli nie owinąłeś głowy twardymi linkami). Jeśli otworzysz Fred.txt w edytorze tekstu i wprowadzisz jakieś zmiany, czy zobaczysz te same zmiany w Wilma.txt i Barney.txt? Może. Prawdopodobnie. Jeśli twój edytor tekstowy zapisze zmiany, otwierając oryginalny plik i zapisując zmiany, wówczas tak, wszystkie trzy nazwy będą nadal wskazywać ten sam (nowo zmieniony) tekst. Ale jeśli edytor tekstu utworzy nowy plik (Fred-new-temp.txt), zapisze w nim zmienioną wersję, następnie usunie Fred.txt, a następnie zmieni nazwę Fred-new-temp.txt na Fred.txt, Wilma i Barney nadal wskazuje oryginalną wersję, a nie nową zmienioną wersję. Jeśli nie rozumiesz twardych linków, może to doprowadzić cię do szału. :) [Okej, właściwie nie znam żadnychedytory tekstów, które zrobiłyby nowy plik / zmiana nazwy, ale znam wiele innych programów, które robią to dokładnie, więc bądź czujny.]
Ostatnia uwaga: jedną z rzeczy, które sprawdza „fsck” (kontrola systemu plików), jest to, czy na twoim dysku znajdują się bloki danych, do których w jakiś sposób nie odwołują się żadne wpisy katalogu. Czasami coś idzie nie tak i jedyny wpis katalogu wskazujący na i-węzeł zostaje usunięty, ale samo miejsce na dysku nie jest oznaczone jako „dostępne”. Jednym z zadań fsck jest dopasowanie całego przydzielonego miejsca do wszystkich pozycji katalogu, aby upewnić się, że nie ma żadnych plików, do których nie ma odnośników. Jeśli coś znajdzie, tworzy nowe pozycje katalogu i umieszcza je w „lost + found”.