Jakie są typowe zastosowania twardych linków?

9

Każdy, kto był przyzwyczajony do systemu Windows, może sobie wyobrazić, jakie są dowiązania symboliczne i jak są używane. Z drugiej strony koncepcja twardego łącza jest obca dla systemu Windows (czy mam rację?).

Chciałbym wiedzieć, jakie są typowe zastosowania twardych linków w Linuksie. Widziałem już różne posty opisujące różnicę w ich działaniu. Pytam o to, jakie są typowe sytuacje, w których lepiej byłoby użyć twardego łącza zamiast dowiązań symbolicznych?

Do zrobienia
źródło
3
Pytanie to zostało zadane na stosie wymiany Uniksa i Linuksa: Dlaczego istnieją twarde linki?
Flimm,

Odpowiedzi:

9

Używam twardego linku, w którym potrzebuję jednego pliku w dwóch lub więcej miejscach, przewiduję, że pewnego dnia będę chciał usunąć jedną z lokalizacji i mogę zapomnieć, że mam link do pliku. To uniemożliwia mi skończenie z dowiązaniem symbolicznym do pliku, który już nie istnieje.

Wyjaśnienie:

Nazwa pliku jest w rzeczywistości twardym linkiem do pliku. Zatem każdy plik ma co najmniej jedno stałe łącze, które zwykle nazywamy „nazwą” pliku. Kiedy usuwasz plik, w rzeczywistości usuwasz jego twardy link (stąd nazwa „usuń”, tzn. rmZamiast „usuń”). Kiedy plik ma ostatni twardy link usunięty, system również go usuwa.

Paddy Landau
źródło
7

Twarde linki pozwalają ...

  • pojedynczy plik wykonywalny mający więcej niż jedną nazwę.

    Przykład:

    ls -l /bin | grep -v ' 1 ' | sortwyświetli te /bindla ciebie. Wynik ...

    -rwxr-xr-x 2 root root     63 2010-01-19 21:49 gunzip
    -rwxr-xr-x 2 root root     63 2010-01-19 21:49 uncompress
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bunzip2
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bzcat
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bzip2
    

    Zamiast 3 plików bunzip2 bzcat i bzip2 używają tego samego pliku, a wewnątrz pliku rozróżnia się, co robić. Zapisuje kod, a mniej kodu oznacza mniej możliwych błędów i łatwiejszą konserwację.

  • pojedynczy plik, do którego można uzyskać dostęp za pomocą kilku ścieżek.

    Weźmy na przykład menedżera pakietów, który tworzy katalog / usr / share / doc / $ nazwa_pakietu dla każdego zainstalowanego pakietu, a wewnątrz tego katalogu plik o nazwie LICENCJA z informacjami o licencji pakietu. Wiele pakietów w typowym systemie Linux jest na licencji GPL, więc zamiast 200 kopii GPL w systemie plików może istnieć tylko jedna kopia i 199 linków. ptman @ Serverfault

Powód, dla którego twarde linki działają tutaj (a miękkie) nie: usunięcie tylko jednego twardego łącza nie powoduje usunięcia samego pliku.

Rinzwind
źródło
2
„Przykład: move ( mv) to copy ( cp) + remove ( rm).” Jest to prawdą tylko wtedy, gdy źródło i miejsce docelowe znajdują się na różnych wierzchowcach. W przeciwnym razie mvprzesuwa tylko nazwę, a nie plik.
Paddy Landau,
1
Jeśli chcesz przejść do kwestii technicznych: mv zmienia i-węzeł, a nie nazwę. Ale masz rację: wygląda na to, że ten przykład jest obecnie trochę stary i powinienem był użyć gzip jako przykładu;)
Rinzwind
3
Jesteśmy trochę nie na temat, ale właśnie to przetestowałem. Tak długo, jak plik pozostaje na tym samym wierzchowcu, mvzmienia tylko nazwę; i-węzeł pozostaje taki sam.
Paddy Landau,
To tak naprawdę nie wyjaśnia, dlaczego nie możesz po prostu używać dowiązań symbolicznych - które możesz zapisać na kilka bajtów dodatkowych danych. Zostało to poprawnie rozwiązane w tej odpowiedzi .
Ken Sharp