To jest rzeczywiście zamierzone zachowanie. Ze strony podręcznika ln(1)
:
Dowiązania symboliczne mogą zawierać dowolny tekst; jeśli zostanie później rozwiązany, odnośnik względny jest interpretowany w odniesieniu do jego katalogu nadrzędnego.
Jeśli chodzi o jego powód, wyobraź sobie, że dowiązanie symboliczne było interpretowane raczej w odniesieniu do jego źródła, a nie jego przeznaczenia. Później, gdy go rozwiążesz, będziesz musiał wiedzieć, jakie było twoje CWD podczas jego tworzenia, co jest nonsensowne, a co dopiero niemożliwe.
Co więcej, w ten sposób otrzymujesz zgrabną i zwartą metodę tworzenia szkieletowej struktury katalogów, którą możesz upuścić w dowolnym miejscu drzewa katalogów bez przerywania dowiązań symbolicznych.
Aby dać przykład, co mam na myśli, powiedzmy, że pracujesz nad projektem i masz skonfigurowaną całą strukturę katalogów w ten sposób:
$ ls -1 /home/you/project
thingummies/
widgets/
wizardry/
Załóżmy teraz, że chcesz utworzyć dowiązanie symboliczne do widgets/
wewnątrz wizardry/
. Masz dwie opcje:
$ ln -s /home/you/project/widgets /home/you/project/wizardry
lub
$ ln -s ../widgets /home/you/project/wizardry
Jeśli następnie spróbujesz przenieść się /home/you/project
gdziekolwiek indziej, dowiązanie symboliczne utworzone za pomocą pierwszego formularza zostanie zerwane, ponieważ szuka /home/you/project/widgets
. Druga forma utrzyma funkcjonalność dowiązania symbolicznego, ponieważ szuka ../widgets
względnego miejsca, w którym się znajduje, niezależnie od tego, gdzie to miejsce może być w drzewie katalogów.