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 tegolngrzecznie 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 symlinkappwskazują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 linkcurrentna 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.