Jaka jest różnica między twardymi linkami a skopiowanymi plikami?

22

Rozumiem, że twarde linki zawierają kopię oryginalnego pliku i że mógłbym usunąć plik z twardym dowiązaniem w jednym katalogu i nadal istniałby w innym katalogu.

Jeśli tak, to dlaczego miałbym w ogóle używać twardych linków? Dlaczego nie mieć dwóch oddzielnych plików?

Mike B.
źródło

Odpowiedzi:

29

Skopiowanie pliku spowoduje skopiowanie zawartości. Jeśli więc zmodyfikujesz zawartość jednego pliku, nie będzie to miało wpływu na drugi.

Jeśli utworzysz hardlink, utworzy się plik wskazujący tę samą treść. Jeśli więc zmienisz zawartość jednego z plików, zmiana będzie widoczna na obu.

TheMeaningfulEngineer
źródło
3
Czy w przypadku bardzo dużych plików tworzenie twardego łącza jest zawsze szybsze niż kopiowanie oryginalnego pliku?
Jorge Bucaran
14

Twardy link to w zasadzie druga nazwa pliku dla tego samego pliku. Więc jeśli dowiązasz plik na stałe, będzie on tylko raz w systemie plików, a zatem zajmie miejsce tylko raz. Więc chcesz tego użyć, jeśli chcesz zaoszczędzić miejsce na dysku

Piotr
źródło
4
Dzięki za szybką odpowiedź. Dlaczego więc miałbym używać twardego linku zamiast miękkiego linku?
Mike B
5
Softlink jest w zasadzie wskaźnikiem do innego pliku. Więc jeśli usuniesz oryginalny plik, softlink będzie nadal istniał, ale zostanie uszkodzony. Twarde łącze to 2 nazwy tego samego pliku, więc można je indywidualnie usunąć.
Peter
19
Wyjaśnienie Piotra jest dobre, ale pominął „liczbę linków”. W i-węzle pliku (na metadanych dysku) jest liczba linków. Twardy link zwiększa liczbę linków, miękki link nie. Jądro może usunąć zawartość pliku, jeśli liczba linków spadnie do zera.
Bruce Ediger
4
Myślę, że odpowiedź Alana na to ma ważną kwestię: zmiana pliku zmienia wszystkie linki, z kopią, która zawierałaby inną zawartość.
donotings pomyślnie
6

W systemach plików unix każda nazwa pliku jest w rzeczywistości twardym linkiem do lokalizacji danych na dysku, zwanym i-węzłem. Jeśli utworzysz nowy twardy link do istniejącego pliku, nie zajmie on dodatkowego miejsca na dysku, ponieważ jest to po prostu wskaźnik do tych samych danych. Jeśli edytujesz dane jednym lub drugim linkiem (lub bezpośrednio edytujesz i-węzeł), oba pliki zostaną zmienione.

System rejestruje, ile twardych dowiązań ma każdy i-węzeł. Gdy liczba linków wynosi 0, plik nie może być osiągnięty, a dane są oznaczone jako bezpieczne do zastąpienia. Biorąc pod uwagę plik z 2 twardymi linkami, jeśli usuniesz którykolwiek z nich, dane nie zostaną usunięte. Tylko jeśli usuniesz oba, dane znikną.

Możesz zobaczyć liczbę i-węzłów plików, używając -iprzełącznika na lspolecenie.

Z drugiej strony miękkie łącze wskazuje inny plik według jego nazwy. Jeśli przeniesiesz lub usuniesz oryginalny plik, link zostanie uszkodzony.

rjmunro
źródło
0

W odniesieniu do części pytania, która brzmiała: „dlaczego w ogóle miałbym używać twardych linków?”:

Pliki dowiązane na twardo (lub w tym przypadku pliki dowiązane miękko (symbolicznie) oferują użyteczny sposób posiadania jednego pliku wykonywalnego, który można przekształcić w maskaradę do różnych celów.

Oznacza to, że nazwa, pod którą wywoływany jest kod, może zostać zbadana w celu ustalenia, jakie opcje są dostępne do wykonania. Umożliwia to opracowanie i pakowanie jednego dużego fragmentu kodu ze wszystkimi wspólnymi funkcjami potrzebnymi do nieco innych celów. Z punktu widzenia użytkownika określenie „co” do uruchomienia (według nazwy) ogranicza wybory i prezentację do łatwiejszego do zarządzania podzbioru opcji.

Klasycznym przykładem jest LVM. W pewnym momencie HP-UX stosować twardych połączonych plików dla różnych plików wykonywalnych (np vgdisplay, vgcreate, vgextend, itd. Dzisiaj, jak Linux, polecenia te są właściwie symboliczne (miękkie) Odnośniki do lvmpliku wykonywalnego.

JRFerguson
źródło
To nie ma nic wspólnego z pytaniem.
rjmunro
1
@rjmunro Zaczynam się różnić. OP zapytał: „dlaczego w ogóle miałbym używać twardych linków?”
JRFerguson
Nie rozumiem ostatniego przykładu. Kiedyś istniały twarde linki do wielu plików wykonywalnych, teraz są miękkie linki do jednego pliku wykonywalnego. W jaki sposób można odróżnić te miękkie linki?
Emanuel Berg
@EmanuelBerg Chodziło mi o to, że niezależnie od tego, czy używane są dowiązania twarde czy miękkie, to nazwa, pod którą wywoływany jest plik wykonywalny, określa opcje i argumenty, które są ważne do wykonania.
JRFerguson
1
@EmanuelBerg TMTOWTDI
JRFerguson