Symbolic link

Plik będący wskaźnikiem do innego pliku po jego nazwie (ścieżce). Po usunięciu celu staje się 'wiszącym’ dowiązaniem prowadzącym donikąd.

Symbolic link (dowiązanie symboliczne, w skrócie symlink albo soft link) to specjalny rodzaj pliku, którego całą zawartością jest ścieżka do innego pliku lub katalogu. Innymi słowy: to nie kopia danych ani drugi „uchwyt” do nich, tylko mała tabliczka z napisem „idź tam”. System operacyjny, gdy trafia na symlink, automatycznie podąża za tą ścieżką do celu. Działa to trochę jak skrót na pulpicie w Windowsie, tyle że na poziomie samego systemu plików.

Jak to działa i do czego się przydaje

Symlink przechowuje tekstową ścieżkę do celu — nie jego rzeczywiste dane. Dlatego może wskazywać na cokolwiek: plik, katalog, a nawet zasób na innym systemie plików czy partycji (czego dowiązania twarde, hard links, nie potrafią). Cena tej elastyczności jest taka, że symlink zna swój cel tylko po nazwie. Jeśli oryginał zniknie albo zostanie przeniesiony, dowiązanie nadal wskazuje na starą ścieżkę — i robi się z niego dangling symlink (wiszące dowiązanie prowadzące donikąd).

W praktyce symlinki rozwiązują masę problemów: pozwalają trzymać jedną „aktualną” wersję czegoś pod stałą nazwą, podsuwać aplikacjom pliki z innego miejsca albo wersjonować biblioteki bez przepisywania kodu zależnego.

Przykład z praktyki

Dowiązanie tworzysz komendą ln -s (flaga -s to właśnie „symbolic”):

  • ln -s /var/www/releases/v2 /var/www/current — klasyczny wzorzec wdrożeń (np. Capistrano, Deployer). Aplikacja zawsze odwołuje się do current, a Ty przy nowym release tylko przepinasz symlink na nowy katalog. Rollback to kwestia jednej komendy.
  • ls -l pokaże takie dowiązanie ze strzałką, np. current -> releases/v2.
  • readlink -f current rozwinie ścieżkę i powie, gdzie naprawdę prowadzi.

Częste błędy i pułapki

  • Wiszące dowiązania. Usuwasz cel, a symlink zostaje i milcząco wskazuje w pustkę. ls -l czasem podświetla taki link na czerwono — warto zwracać uwagę.
  • Ścieżki względne vs bezwzględne. Symlink z względną ścieżką liczy ją od swojej lokalizacji, nie od katalogu, w którym akurat jesteś. Przeniesienie dowiązania potrafi je zepsuć.
  • Mylenie z hard linkiem. Hard link to drugie odwołanie do tego samego inode — usunięcie oryginału nic mu nie robi, ale nie zadziała między systemami plików ani na katalogach. Symlink jest odwrotnością tego kompromisu.
  • Pętle. Dowiązanie wskazujące (pośrednio) na samo siebie potrafi wywołać błąd too many levels of symbolic links.

Pojęcia powiązane: hard link, inode, ln, readlink, system plików, mount point, junction (odpowiednik w Windows), skrót (.lnk).