Rozumiem różnicę techniczną między dowiązaniami symbolicznymi i dowiązaniami twardymi, jest to pytanie o ich użycie w praktyce, szczególnie jestem ciekawy, dlaczego oba są używane w pozornie podobnych warunkach: /bin
katalogu.
Oto fragment jego wykazu w moim systemie:
~$ ls -lai /bin
total 10508
32770 drwxr-xr-x 2 root root 4096 Jun 14 11:47 .
2 drwxr-xr-x 28 root root 4096 Sep 6 13:15 ..
119 -rwxr-xr-x 1 root root 959120 Mar 28 22:02 bash
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bunzip2
127 -rwxr-xr-x 1 root root 1832016 Nov 16 2012 busybox
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bzcat
6191 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzcmp -> bzdiff
5640 -rwxr-xr-x 1 root root 2140 Dec 15 2011 bzdiff
5872 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzegrep -> bzgrep
3520 -rwxr-xr-x 1 root root 4877 Dec 15 2011 bzexe
6184 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzfgrep -> bzgrep
5397 -rwxr-xr-x 1 root root 3642 Dec 15 2011 bzgrep
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bzip2
2851 -rwxr-xr-x 1 root root 10336 Dec 15 2011 bzip2recover
6189 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzless -> bzmore
5606 -rwxr-xr-x 1 root root 1297 Dec 15 2011 bzmore
Wciągnąłem hardlink do tego samego i-węzła dla lepszej widoczności. Więc są dowiązania stosowane w przypadku bzcmp
, bzegrep
, bzfgrep
, bzless
i hardlinki w przypadku bzip2
, bzcat
, bunzip2
?
Wszystkie są zwykłymi plikami (nie katalogami), znajdują się w jednym systemie plików, są narzędziami systemowymi, a nawet zostały stworzone do pracy z tym samym: archiwami bzip. Czy powody korzystania z linków / dowiązań symbolicznych w tym konkretnym przypadku mają charakter wyłącznie historyczny, czy czegoś brakuje?
Wyjaśnienie mojego pytania:
Ja nie pytając o:
- Różnice techniczne między dowiązaniami symbolicznymi i dowiązaniami stałymi
- Teoretyczne zalety i wady każdego z nich
Te pytania zostały poruszone w innych wątkach na SO. Próbuję zrozumieć, dlaczego w konkretnej sprawie podjęto różne decyzje: dla grupy powiązanych narzędzi systemowych. Technicznie rzecz biorąc, wszystkie mogły być dowiązaniami symbolicznymi lub wszystkie mogły być dowiązaniami stałymi, obie opcje działałyby (w obu przypadkach program nadal może dowiedzieć się, w jaki sposób jest wywoływany argv[0]
). Chcę zrozumieć zamiar tutaj, jeśli istnieje.
Związane z:
/bin
trzeciej kolumniels -lai
jest zawsze,1
więc wydaje się, że używam tylko miękkich linków. Jakiej dystrybucji używasz?Odpowiedzi:
Dlaczego warto korzystać z dowiązań twardych a dowiązań symbolicznych?
W tym scenariuszu istnieją przede wszystkim 3 zalety używania dowiązań twardych w stosunku do dowiązań symbolicznych.
Twarde linki
Linki symboliczne
Zalety łączenia w ogóle
Te linki istnieją, ponieważ wiele plików wykonywalnych zachowuje się inaczej w zależności od ich wywołania. Na przykład polecenia 2
bzless
ibzmore
są w rzeczywistości jeden wykonywalnybzmore
. Plik wykonywalny będzie się różnie zachowywać w zależności od tego, które nazwy zostały użyte do jego wywołania.Odbywa się to z różnych powodów. Oto niektóre z bardziej oczywistych:
Dlaczego oba są używane?
Wybór jednej z tych aplikacji jest dyskusyjny. Każdy z nich może ułatwiać działanie jako alias, dzięki czemu pojedynczy plik wykonywalny może zostać przeciążony. To naprawdę kluczowa funkcja wykorzystywana przez twórców różnych programów tutaj.
Patrząc na FHS (Standard systemu plików) nawet określa go w ten sposób, że może to być jeden z nich.
fragment
Bibliografia
źródło
/bin/
katalogu ZNAJDUJE SIĘ OBA hardlinki i dowiązania symboliczne ? Dlaczego twórcy tych narzędzi nie trzymali się jednego typu łącza?Wygląda na to, że próbujesz dowiedzieć się na podstawie istniejącej praktyki, czy istnieje nietechniczna reguła, która mówi ci, jakiego rodzaju łącza użyć. (Mówię nietechnicznie, ponieważ znasz już techniczne powody, aby używać jednego nad drugim).
Odpowiedź brzmi: nie ma innej zasady. Ten przykład, który wskazałeś z
bzip2
pakietu Ubuntu, pokazuje tylko, że wielu programistów miesza je bez mnóstwa uprzedzeń. Wynika to z tego, że nie ma żadnych silnych wskazówek poza różnicami technicznymi, a różnice te są niewielkie.Osobiście wolę zawsze używać dowiązań symbolicznych, ponieważ jestem gotów zapłacić za ich niewielki koszt w zamian za ich samodokumentację.
Inni programiści wybiorą twarde linki ze względu na ich niewielką wydajność.
Ten problem przypomina spacje vs. tabulacje lub dynamiczne vs. statyczne pisanie lub Emacs vs. vi , ale nie jest wystarczająco interesujący, aby wywołać świętą wojnę . Podobnie jak w przypadku bardziej interesujących bitew, istnieją powody, aby wybrać którąkolwiek z tych opcji, ale jeśli nie masz kogoś, kto ci powie, z której wybrać, możesz wybrać tę, która będzie dla ciebie bardziej sensowna.
źródło