Kiedy używałbyś jednego nad drugim?
Kiedy używałbyś jednego nad drugim?
Odpowiedzi:
Różna semantyka linków twardych i miękkich sprawia, że są one odpowiednie do różnych rzeczy.
Twarde linki:
Linki symboliczne (linki miękkie)
ls -l
pokaże ścieżkę, na którą wskazuje dowiązanie symboliczne)unlink(2)
. „normalne” pliki (z liczbą linków 1) to tylko szczególny przypadek. Jeśli to pomaga, możesz myśleć o i-węzłach jak o obiektach, a nazwy jak o wskaźnikach zliczonych ponownie (liczba łączy i-węzłów to liczba referencyjna).
..
i .
.
Celem obu rodzajów łączy jest zapewnienie sposobu, aby plik pojawiał się w dwóch lokalizacjach jednocześnie. Ma to wiele zastosowań. 9 razy na 10 chcesz użyć dowiązań symbolicznych.
Dowiązania symboliczne lub „dowiązania symboliczne” działają trochę jak skróty systemu Windows. Zawartość dowiązania symbolicznego jest wskaźnikiem do rzeczywistej lokalizacji pliku / katalogu. Jeśli usuniesz prawdziwy plik, dowiązanie symboliczne stanie się „wiszące” i nie będzie działać. Usunięcie dowiązania symbolicznego nie powoduje usunięcia rzeczywistego pliku. Możesz mieć dowolną liczbę dowiązań symbolicznych do jednego pliku (lub nawet innych dowiązań symbolicznych).
W przeciwieństwie do Windows działają one na poziomie systemu plików, a nie na poziomie powłoki lub aplikacji, więc prawie każda aplikacja będzie „podążać” za dowiązaniami symbolicznymi zgodnie z oczekiwaniami. ls -al
może być użyty jako szybki sposób na sprawdzenie, gdzie „linki” wskazują.
Twarde linki działają nawet na niższym poziomie. Hardlink to rzeczywista, fizyczna pozycja katalogu na poziomie systemu plików. Technicznie rzecz biorąc, pozycja katalogu jest dowiązaniem twardym, dlatego każdy plik ma gdzieś co najmniej jedno dowiązanie twarde w katalogu. Dowiązania twarde nie są oddzielone od pliku, na który wskazują; jeśli plik ma wiele dowiązań twardych w różnych katalogach, usunięcie dowiązania twardego za pomocą narzędzi takich jak rm
naprawdę nie usuwa pliku, dopóki wszystkie dowiązania twarde nie znikną.
Nie mogę wymyślić sytuacji, w których użycie linków twardych jest powszechne, a nawet potrzebne, chyba że celowo chcesz zapobiec usuwaniu plików lub wykonujesz dziwną pracę niskiego poziomu z partycjami lub innymi rzeczami związanymi z systemem plików. EDYCJA: W innych odpowiedziach na to pytanie są jednak świetne pomysły!
ls -l
wystarczy zobaczyć, co łączy dowiązanie symboliczne, a
oznacza --all
, zobacz stronę. Nawet jeśli dowiązania symboliczne działają w systemie plików, istnieją alternatywne funkcje, które mogą wykorzystywać dowiązania symboliczne jako pliki zamiast podążać za nimi.
ln -s /home 1; ls -l 1
pokazuje, że dowiązanie symboliczne 1 ma 5 bajtów, podczas gdy ln -s /usr/share/ 2; ls -l 2
showas ma długość 11 bajtów.
Twarde linki są bardzo przydatne w przypadku mechanizmów tworzenia kopii zapasowych na dyskach, ponieważ dla każdej kopii zapasowej można mieć pełne drzewo katalogów, udostępniając jednocześnie miejsce na pliki, które nie uległy zmianie - a system plików śledzi liczenie referencji, więc kiedy ostatnie odniesienie do dana wersja znika, ponieważ kopia zapasowa wygasła / została usunięta z powodu miejsca, miejsce, które wykorzystała, jest automatycznie odzyskiwane. Z tego samego powodu niektórzy klienci poczty używają go również do wiadomości składanych w wielu folderach.
Dowiązania twarde to tylko odniesienia do tych samych przestrzeni dyskowych, dlatego „dlaczego” nie można dowiązać czegoś w innym systemie plików.
Dowiązania symboliczne to pliki łączące inne pliki (jako skróty systemu Windows), być może w tym samym systemie plików, a może nie.
EDYCJA: Wyjaśnię coś więcej. Każdy istniejący plik ma co najmniej 1 twardy link. Twarde linki to sposób na dostęp do zawartości i-węzła systemu plików. Możesz uzyskać numer i-węzła pliku za pomocą ls -i
i uzyskać liczbę twardych dowiązań stat
w następujący sposób:
$ stat plantilla-disenos.odt
File: «plantilla-disenos.odt»
Size: 12367 Blocks: 32 IO Block: 4096 fichero regular
Device: 803h/2051d Inode: 319875 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ d4rio) Gid: ( 1000/ d4rio)
Access: 2011-02-11 21:36:19.000000000 -0300
Modify: 2010-03-02 23:27:28.000000000 -0300
Change: 2010-04-10 17:46:27.000000000 -0300
Dzięki @geekosaur za odniesienie:
Jądro musi zrestartować tłumaczenie ścieżka-nazwa-i-i-węzeł (przejście przez drzewo katalogów), aby rozwinąć dowiązania symboliczne, podczas gdy wszystkie dowiązania twarde używają tego samego i-węzła. (Często widuje się to jako namei, od nazwy funkcji jądra, która zrobiła to w tradycyjnym Uniksie).
i to (edytowane):
Twarde łącza są bardzo przydatne w przypadku mechanizmów tworzenia przyrostowych kopii zapasowych na dyskach , takich jak Time Machine firmy Apple , ponieważ dla każdej kopii zapasowej można mieć pełne drzewo katalogów, udostępniając jednocześnie przestrzeń dla plików, które nie uległy zmianie - a system plików śledzi liczenie referencji, więc gdy ostatnie odniesienie do danej wersji zniknie, ponieważ kopia zapasowa wygasła / została usunięta z powodu miejsca, miejsce, które wykorzystała, zostaje automatycznie odzyskane. Z tego samego powodu niektórzy klienci poczty używają go również do wiadomości składanych w wielu folderach.
Twoje zdrowie
namei
nazwę funkcji jądra, która zrobiła to w tradycyjnym Uniksie).
stat
zawiodą.
Miękki link wskazuje inną nazwę ścieżki. Ta nazwa ścieżki może, ale nie musi istnieć. Ścieżka nie jest szukana, dopóki nie uzyskasz dostępu do dowiązania symbolicznego. Jeśli ścieżka nie istnieje, gdy próbujesz uzyskać do niej dostęp, masz zepsute dowiązanie symboliczne.
Za pomocą twardego łącza masz jeden plik o wielu nazwach. Nie można powiedzieć, że jeden z nich to „prawdziwy” plik, a pozostałe to tylko link do niego. Wszystkie są równe. Nie ma czegoś takiego jak zepsuty twardy link, tak jak są zepsute dowiązania symboliczne.
Twarde linki działają tylko w ramach jednego systemu plików. Jeśli chcesz utworzyć łącze do pliku w innym systemie plików (np. Innej partycji lub udziale sieciowym), musisz użyć miękkiego łącza.
Kolejną dużą różnicą jest to, co dzieje się po usunięciu połączonego pliku. Jeśli usuniesz jeden z pary plików połączonych na stałe, a następnie utwórz nowy plik o tej samej nazwie, będziesz mieć dwa osobne pliki (łącze zniknęło). Jeśli usuniesz cel dowiązania symbolicznego i utworzysz nowy plik o tej samej nazwie, link wskaże nowy plik.
„twarde” łącza mają ten sam i-węzeł
$ touch foo
$ ln foo foolink # Creates a hard link
$ ls -li foo foolink
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foo
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foolink
Jeśli edytuję foo lub foolink, jest tylko jeden plik i zostanie on zaktualizowany. Jeśli usunę tylko jedną nazwę pliku, i-węzeł i dane pozostaną, foolink przetrwa.
$ rm foo
$ ls -li foo foolink
ls: cannot access foo: No such file or directory
54996 -rw-r--r-- 1 bsd users 0 2011-12-11 09:06 foolink
Gdybym miał stworzyć to samo, ale z „miękkim” lub dowiązaniem symbolicznym, to jest jeden plik, jeden i-węzeł i nowy plik z własnym i-węzłem wskazującym na pierwszy.
$ touch foo
$ ln -s foo foolink # Create symlink
$ ls -li foo foolink
55029 -rw-r--r-- 1 bsd users 0 2011-12-11 09:11 foo
55033 lrwxrwxrwx 1 bsd users 3 2011-12-11 09:11 foolink -> foo
Jeśli zmienię foo lub foolink, nadal będzie tylko jeden plik i zostanie on zaktualizowany.
Jeśli usunę tylko symboliczne łącze, i-węzeł i dane pozostaną. Jeśli usunę foo, dane znikną, dowiązanie symboliczne pozostanie, ale wskaże nieistniejący plik.
$ rm foo
removed `foo'
$ ls -l foo foolink
ls: cannot access foo: No such file or directory
lrwxrwxrwx 1 bsd bsd 3 2011-12-11 09:11 foolink -> foo
Twarde linki to dodatkowe pozycje katalogu dla tego samego pliku. To znaczy
Wielu redaktorów nie zapisuje nowej zawartości do tego samego pliku podczas zapisywania, ale wykonuje następującą procedurę:
Ten schemat oznacza, że wszelkie inne twarde łącza do tego samego pliku nie będą już wskazywały na bieżący plik, ale na poprzednią wersję (jest to prawdą nawet w przypadku, gdy edytor usuwa stary plik, ponieważ w Uniksie „usuwa” plik oznacza po prostu usunięcie jego łącza; tylko jeśli usunięty link jest jedynym łączem, plik zostanie usunięty).
Ponieważ twardy link prowadzi bezpośrednio do pliku, możesz uzyskać dostęp do tego pliku, nawet jeśli nie masz dostępu do oryginalnej lokalizacji tego pliku (na przykład ponieważ nie masz żadnych uprawnień do katalogu, w którym znajduje się oryginalny wpis) . Jedynymi prawami określającymi twój dostęp są prawa dostępu do samego pliku (które są powiązane z plikiem, a nie z linkiem; nie możesz tworzyć twardych linków z różnymi uprawnieniami do tego samego pliku) oraz prawa dostępu do ścieżki twardego linku jest zawarty (w zasadzie, prawa do wykonywania w katalogu, w którym znajduje się link, oraz w bezpośrednich i pośrednich katalogach nadrzędnych).
Z drugiej strony, dowiązania symboliczne przechowują nazwę ścieżki (nazwę pliku - a raczej jego pozycję katalogu - potencjalnie włączając jego ścieżkę, jak /bin/sh
lub subdir/foo.bar
) - innego pliku. Jeśli nazwa ścieżki jest względna, zawsze jest interpretowana względem katalogu, w którym znajduje się link. Oznacza to:
Dowiązanie symboliczne może odnosić się do plików w innym systemie plików (nawet do systemu plików, który sam nie obsługuje twardych lub miękkich linków, takich jak FAT).
Jeśli oryginalny plik zostanie usunięty, dowiązanie symboliczne nie zachowuje zawartości pliku. O ile nie ma innych twardych linków do tego samego pliku, zawartość pliku zniknie. Dowiązanie symboliczne pozostanie wtedy wiszące (to znaczy, odnoszące się do nazwy ścieżki, która nie odpowiada wpisowi do katalogu). Z drugiej strony usunięcie dowiązania symbolicznego nie wpływa na oryginalny plik, ponieważ odnosi się tylko do jego ścieżki.
Jeśli oryginalny plik zostanie przeniesiony lub jego nazwa zostanie zmieniona, dowiązanie symboliczne nie zostanie zaktualizowane, ale pozostanie wiszące. Przesunięcie dowiązania symbolicznego powoduje jego zerwanie tylko wtedy, gdy zawiera ścieżkę względną, a ścieżka nie jest już ważna od nowej pozycji.
Jeśli oryginalny plik zostanie zastąpiony nowym plikiem o tej samej nazwie (jak w opisanym powyżej scenariuszu edytora), łącze odnosi się do nowego pliku.
Większość zastosowań twardych linków to w zasadzie sposób na posiadanie kopii pliku bez konieczności dwukrotnego przechowywania zawartości pliku. Działa to najlepiej, jeśli pliki nigdy nie zostaną ponownie zmienione, ponieważ w przeciwnym razie łatwo jest przypadkowo przerwać łącze (patrz scenariusz edytora powyżej). Są oczywiście przypadki, w których chcesz, aby łącze zostało zerwane, tak jak w przypadku przechowywania kilku kopii zapasowych: W przypadku plików, które zmieniły się w nowszych kopiach zapasowych, nie chcesz, aby kopia w starszych kopiach zapasowych również uległa zmianie.
Zwykle, jeśli chcesz link, użyjesz dowiązania symbolicznego. Jednym z przykładów jest przeniesienie katalogu na inną partycję (ponieważ ta, na której jest on zapełniony), można ustawić miękkie łącze ze starej pozycji do nowej, więc wszelkie programy próbujące uzyskać dostęp do katalogu w starym miejscu zamiast tego wejdź do niego w nowym miejscu. Nie byłoby to możliwe w przypadku twardych linków. Należy jednak pamiętać, że dowiązania symboliczne w przeniesionym katalogu mogą ulec uszkodzeniu, jeśli zawierają ścieżki względne, które prowadzą z przeniesionego katalogu.
HARD LINK (tylko pliki) vs SOFT LINK (pliki lub katalogi) vs BIND (HARD LINK dla katalogów)
(źródło: freesoftwareservers.com )
Podczas gdy odpowiedź daxelroda dobrze wyjaśnia pytanie, pomyślałem, że obraz w tym przypadku zrobił dużą różnicę, szczególnie dla początkujących, którzy jeszcze nie rozumieją i-węzłów i skomplikowanego żargonu Linuksa.
Pomyśl o tym, jeśli „usunąłeś” wszystko z dysku, możesz uruchomić oprogramowanie, aby przywrócić dane, ponieważ jedynki i zera wciąż tam są, po prostu usunąłeś wszystkie twarde linki. Oprogramowanie Recovery Software ma na celu odbudowanie twardych linków, aby nadać sens zerom i jedynkom
Przeczytałem świetny „jeden linijka”, który nadał temu sensowi, i chciałem się nim podzielić!
Wszystkie pliki w systemie Linux są „twardymi linkami” do zer i jedynek na dysku. Podczas tworzenia danych (0 i 1) system operacyjny tworzy Hard Link w drzewie plików w celu odniesienia do tego miejsca na dysku twardym.
Możesz utworzyć kolejny twardy link i usunąć oryginalny plik, i nadal masz dostęp do nowo utworzonego twardego łącza.
Jeśli usunąłeś HARD LINK 1, czy uważasz, że SOFT LINK będzie działał? Nie, system operacyjny zgłosi, że HARD LINK 1 nie istnieje.
Odwrotnie, jeśli usuniesz SOFT LINK, czy będzie działać HARD LINK? Tak. Tak długo, jak system operacyjny ma jeden plik HARD LINK , zgłosi, że wypełnienie nie zostało usunięte.
- Warto również zbadać / zwrócić uwagę na BIND, sposób na ZWIĄZANIE dwóch katalogów, takich jak symlinkowanie dwóch katalogów, ale jest on przejrzysty dla systemu operacyjnego (systemy operacyjne mogą stwierdzić, kiedy Symlink i niektóre mają zasady dotyczące pogody, że mogą śledzić Symlinks). Wykorzystuje Mount, a nie LS i można go skonfigurować za pomocą FSTAB.
Twardy link będzie przechowywać plik na dysku, dopóki nie zostaną usunięte wszystkie twarde linki, nawet pierwsze („nazwa pliku” to technicznie twardy link). Miękkie łącze może pozostać „wiszące”, dopóki plik, na który wskazuje (s / ed), nie zostanie zastąpiony.
To bardzo stare pytanie, ale mam przypadek użycia, który wymaga ode mnie używania twardych linków.
Jestem muzykiem, więc mam wiele różnych plików audio na różnych dyskach twardych podłączonych do mojego komputera Mac. Warto terabajtów. Mam je w większości bardzo ładnie zorganizowane z katalogami dowiązań symbolicznych, dzięki czemu mogę je znaleźć według wydawcy treści, stylu / dźwięku i innych kryteriów opartych na tym, co myślę w tym czasie. Niestety jeden program, którego używam, Ableton Live, jest całkowicie niezdolny do wyświetlania aliasów lub dowiązań symbolicznych z przeglądarki plików. Jedynym rozwiązaniem, jakie znalazłem, jest utworzenie twardych linków do katalogów, w których chcę, aby był w stanie zobaczyć, a wtedy wszystko działa świetnie.
Jest to kolejny przypadek, w którym może być konieczne użycie twardych linków, które mogły nie wystąpić u innych.