ln

Tworzy dowiązania twarde lub symboliczne do plików.

ln tworzy dowiązania (linki) do plików i katalogów w systemach uniksowych. Domyślnie robi dowiązanie twarde (hard link), czyli drugą nazwę wskazującą na ten sam plik na dysku. Znacznie częściej użyjesz go jednak z flagą -s do tworzenia dowiązań symbolicznych (soft link) — czyli sprytnych „skrótów”, które wskazują na inną ścieżkę. To jeden z tych mechanizmów, na których stoi pół Linuksa: aktualne wersje bibliotek, alternatywy w /etc/alternatives czy aktywne configi serwerów to właśnie symlinki.

Składnia i najważniejsze opcje

Podstawowa składnia wygląda tak: ln [-s] CEL [NAZWA_LINKU]. Jeśli pominiesz nazwę linku, ln utworzy go w bieżącym katalogu pod nazwą celu.

  • -s (--symbolic) — tworzy dowiązanie symboliczne zamiast twardego. Flaga, której będziesz używać w 95% przypadków.
  • -f (--force) — usuwa istniejący plik docelowy, jeśli już zajmuje nazwę linku. Bez tego ln grzecznie odmawia.
  • -n (--no-dereference) — gdy nazwa linku jest symlinkiem do katalogu, traktuje ją jak zwykły plik. Kluczowe przy podmianie istniejącego linku.
  • -i (--interactive) — pyta przed nadpisaniem czegokolwiek.
  • -r (--relative) — tworzy symlink ze ścieżką względną zamiast bezwzględnej (GNU coreutils).
  • -v (--verbose) — wypisuje nazwę każdego utworzonego linku.
  • -P (--physical) — robi hard link bezpośrednio do symlinku, bez podążania za nim.

Przykłady użycia

  • ln -s /opt/app/current/bin/app /usr/local/bin/app — tworzy symlink app wskazujący na binarkę w głębi katalogu. Klasyka przy instalacji aplikacji.
  • ln -s /var/log/nginx/error.log . — wrzuca skrót do logu do bieżącego katalogu, żeby nie klepać długiej ścieżki za każdym razem.
  • ln -sfn /opt/app/v2 /opt/app/current — bezpiecznie przełącza link current na nową wersję, nawet jeśli już istniał. To kanoniczna forma do aktualizacji symlinka.
  • ln plik.txt kopia.txt — tworzy dowiązanie twarde: obie nazwy wskazują ten sam plik, więc edycja jednej zmienia drugą.
  • ln -sv ../config/app.conf app.conf — tworzy względny symlink i od razu pokazuje, co powstało.

Częste błędy i pułapki

Najczęstsza wpadka: ln -sf nowy_cel istniejący_symlink_do_katalogu bez flagi -n. Bez -n nowy link wyląduje wewnątrz katalogu, na który wskazywał stary symlink, zamiast go podmienić. Dlatego do aktualizacji zawsze używaj -sfn.

Druga pułapka to ścieżki względne. ln -s ../plik link zapisuje cel dosłownie tak, jak go podałeś, więc link działa tylko z odpowiedniego katalogu. Jeśli nie jesteś pewien — podawaj ścieżkę bezwzględną albo użyj -r.

Pamiętaj też, że hard linki nie działają między różnymi systemami plików ani (zwykle) na katalogach — tu ratuje cię tylko symlink. Uwaga na różnice systemowe: flaga -r to dodatek GNU coreutils, a na macOS/BSD jej nie ma. ln z BSD ma inną domyślną logikę nadpisywania, więc skrypty przenoszone między Linuksem a macOS warto przetestować.

Powiązane komendy: readlink (pokazuje, gdzie wskazuje symlink), unlink i rm (usuwanie linków), ls -l (podgląd dowiązań), stat (liczba hard linków), cp -l i cp -s.