Symlink — co to jest dowiązanie symboliczne i jak je utworzyć w Linux, Mac i Windows

Symlink — co to jest dowiązanie symboliczne i jak je utworzyć w Linux, Mac i Windows
Symlink (dowiązanie symboliczne) to skrót do pliku lub folderu w systemie plików. Pokazuję jak utworzyć symlink w Linux (ln -s), macOS i Windows (mklink) — z praktycznymi przykładami dla web developmentu i administracji serwerów.

Symlink (symbolic link, dowiązanie symboliczne) to specjalny plik, który wskazuje na inny plik lub folder — jak skrót na pulpicie, ale na poziomie systemu plików. Kiedy otwierasz symlink, system automatycznie przekierowuje Cię do pliku/folderu docelowego. Symlink sam nie zawiera danych — jest tylko wskaźnikiem.

Symlinki są fundamentem administracji serwerów, web developmentu i zarządzania konfiguracją. W tym poradniku pokazuję jak je tworzyć na Linux, macOS i Windows, z praktycznymi przykładami zastosowań.

Po co symlinki — praktyczne zastosowania

  • Wiele wersji programu: /usr/bin/python → symlink do /usr/bin/python3.11. Zmiana wersji = zmiana symlinku, nie pliku.
  • Współdzielenie plików między projektami: folder node_modules w jednym miejscu, symlinki z wielu projektów.
  • Deployment zero-downtime: /var/www/current → symlink do /var/www/release-v2.3. Nowa wersja = zmiana symlinku (1 ms), nie kopiowanie plików.
  • Konfiguracja serwera: Nginx/Apache: /etc/nginx/sites-enabled/mysite.conf → symlink do /etc/nginx/sites-available/mysite.conf. Aktywacja/deaktywacja strony = tworzenie/usuwanie symlinku.
  • WordPress multisite: współdzielenie wtyczek/motywów między instalacjami.
  • Backup/archiwum: /home/user/Documents → symlink do /mnt/nas/Documents (dokumenty na NAS, ale dostępne jak lokalne).

Linux / macOS — ln -s

Tworzenie symlinku

ln -s /ścieżka/do/oryginału /ścieżka/do/symlinku

Przykłady:

# Symlink do pliku
ln -s /var/www/release-v2.3 /var/www/current

# Symlink do folderu
ln -s /home/user/projekty/shared-config /home/user/projekt-a/config

# Symlink w bieżącym katalogu
ln -s /etc/nginx/sites-available/mysite.conf mysite.conf

# Sprawdź, czy symlink istnieje
ls -la /var/www/current
# lrwxrwxrwx 1 root root 23 Apr 20 12:00 current -> /var/www/release-v2.3

Litera l na początku uprawnień (lrwxrwxrwx) oznacza symlink. Strzałka -> pokazuje cel.

Usuwanie symlinku

rm /var/www/current

Ważne: rm usuwa symlink, nie oryginalny plik/folder. Oryginał zostaje nietknięty. Ale uwaga: rm -rf current/ (ze slashem na końcu) na niektórych systemach może usunąć zawartość folderu docelowego! Bezpieczniej: unlink current.

Zmiana celu symlinku

# Usuń stary i utwórz nowy
rm /var/www/current
ln -s /var/www/release-v2.4 /var/www/current

# Lub jednym poleceniem (force overwrite)
ln -sfn /var/www/release-v2.4 /var/www/current

-f = force (nadpisz istniejący). -n = traktuj cel jak plik, nie folder (ważne przy symlinkach do folderów).

Symlink vs Hard Link — różnica

Cecha Symlink (ln -s) Hard Link (ln)
Wskazuje na Ścieżkę (path) Inode (fizyczny blok danych)
Działa między partycjami Tak Nie (ten sam filesystem)
Działa z folderami Tak Nie (tylko pliki)
Co się stanie po usunięciu oryginału Symlink „wisi” (broken link) Dane nadal dostępne (inode istnieje)
Rozmiar Kilka bajtów (tylko ścieżka) Taki sam jak oryginał (wspólny inode)
Najczęstsze użycie 95% przypadków Niszowe (backup, deduplikacja)

Zasada: jeśli nie wiesz, którego użyć — symlink (ln -s). Hard linki to narzędzie specjalistyczne.

Windows — mklink

Windows obsługuje symlinki od Vista/Windows 7, ale komenda jest inna:

Tworzenie symlinku

# Otwórz CMD jako Administrator (!)

# Symlink do pliku
mklink C:\skrot.txt C:\oryginaly\plik.txt

# Symlink do folderu (/D = directory)
mklink /D C:\skrot-folder C:\oryginaly\folder

# Junction (starszy typ dowiązania do folderu, nie wymaga admina)
mklink /J C:\skrot-folder C:\oryginaly\folder

Uwaga: mklink wymaga uprawnień administratora (uruchom CMD jako Admin). Junction (/J) nie wymaga — i dla większości zastosowań działa identycznie.

PowerShell

New-Item -ItemType SymbolicLink -Path "C:\skrot" -Target "C:\oryginal"

Usuwanie

Symlink w Windows usuwasz jak normalny plik/folder — prawym przyciskiem → Usuń, lub del skrot.txt (plik) / rmdir skrot-folder (folder). Oryginał zostaje.

Praktyczne przykłady — web development

1. Zero-downtime deployment

# Struktura na serwerze:
/var/www/releases/
  v2.3/          # stara wersja
  v2.4/          # nowa wersja (właśnie wgrana)
/var/www/current  # symlink → /var/www/releases/v2.3

# Deploy nowej wersji:
ln -sfn /var/www/releases/v2.4 /var/www/current
# Nginx/Apache serwuje /var/www/current → natychmiast nowa wersja

# Rollback (jeśli bug):
ln -sfn /var/www/releases/v2.3 /var/www/current
# Powrót do starej wersji w 1 ms

To jest standardowa strategia deployment w narzędziach: Capistrano, Deployer (PHP), Envoyer. Symlink = atomowe przełączenie wersji.

2. Nginx sites-enabled

# Konfiguracja dostępna:
/etc/nginx/sites-available/mysite.conf

# Aktywacja:
ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

# Deaktywacja:
rm /etc/nginx/sites-enabled/mysite.conf
sudo systemctl reload nginx

Nginx w konfiguracji: include /etc/nginx/sites-enabled/*; — ładuje tylko pliki z sites-enabled. Symlink = strona aktywna. Brak symlinku = strona wyłączona.

3. Współdzielenie uploads między środowiskami

# Staging nie musi mieć kopii 10 GB uploadów z produkcji
# Na staging:
rm -rf /var/www/staging/wp-content/uploads
ln -s /var/www/production/wp-content/uploads /var/www/staging/wp-content/uploads
# Staging używa uploadów produkcji bez kopiowania

4. Dotfiles management

# Trzymasz konfigurację (.bashrc, .gitconfig, .vimrc) w repo Git:
~/dotfiles/
  .bashrc
  .gitconfig
  .vimrc

# Symlinki z home:
ln -s ~/dotfiles/.bashrc ~/.bashrc
ln -s ~/dotfiles/.gitconfig ~/.gitconfig

# Nowy komputer: git clone dotfiles + symlinki = gotowa konfiguracja

Diagnostyka — problemy z symlinkami

Broken symlink (wiszący link)

Jeśli oryginalny plik/folder zostanie usunięty lub przeniesiony, symlink nadal istnieje — ale wskazuje na nic. ls -la pokaże go na czerwono (w większości terminali).

# Znajdź broken symlinki w katalogu:
find /var/www -xtype l

Napraw: utwórz ponownie cel lub usuń broken symlink.

Symlink a uprawnienia

Symlink sam ma uprawnienia 777 (lrwxrwxrwx) — ale to nie ma znaczenia. System sprawdza uprawnienia pliku docelowego, nie symlinku. Jeśli cel ma 644 — to obowiązuje, niezależnie od uprawnień symlinku.

Symlink a ścieżki względne vs bezwzględne

# Bezwzględna (absolute) — zawsze działa:
ln -s /var/www/releases/v2.4 /var/www/current

# Względna (relative) — działa tylko jeśli pozycja symlinku się nie zmieni:
cd /var/www
ln -s releases/v2.4 current

Bezwzględna jest bezpieczniejsza (działa niezależnie od kontekstu). Względna jest krótsza i przenośna (nie zależy od pełnej ścieżki). Większość narzędzi używa bezwzględnych.

Najczęściej zadawane pytania

Czy symlink zajmuje miejsce na dysku?

Praktycznie nie — symlink to kilka bajtów (przechowuje tylko ścieżkę do celu). Folder z 10 GB plików i symlink do tego folderu: łącznie ~10 GB + kilka bajtów, nie 20 GB.

Czy mogę zrobić symlink do symlinku?

Tak — system podąża za łańcuchem symlinków. A → B → C = otwarcie A otwiera C. Ale unikaj cykli (A → B → A) — system wykryje to i zwróci błąd „Too many levels of symbolic links”.

Czy symlink działa przez sieć (NFS, SMB)?

Zależy: symlink wskazujący na ścieżkę na tym samym serwerze — tak. Symlink wskazujący na ścieżkę na innym serwerze — nie (chyba że zamountujesz zdalny system plików). Dla zasobów sieciowych: użyj mount (NFS) lub CIFS/SMB mount zamiast symlinku.

Git a symlinki

Git obsługuje symlinki — zapisuje je jako specjalne pliki (typ symlink w tree object). Po klonowaniu repo symlinki są odtwarzane. Ale uwaga: na Windows (bez Developer Mode) Git może przekonwertować symlinki na zwykłe pliki z treścią = ścieżką celu. Włącz: git config core.symlinks true i Developer Mode w Windows.

Podsumowanie

Symlink to wskaźnik na plik lub folder — jak skrót, ale na poziomie systemu plików. Linux/macOS: ln -s cel nazwa_symlinku. Windows: mklink nazwa cel (jako admin). Najczęstsze zastosowania: zero-downtime deployment (przełączanie wersji), Nginx sites-enabled, dotfiles management, współdzielenie plików między środowiskami. Zasada: jeśli kopiujesz folder „bo potrzebuje go inny program” — prawdopodobnie powinieneś użyć symlinku zamiast kopii.

Picture of Tomasz Zieliński
Tomasz Zieliński

Tomasz zajmuje się tematyką SEO, sztucznej inteligencji i automatyzacji pracy w marketingu internetowym. W swoich artykułach analizuje zmiany w algorytmach wyszukiwarek, rozwój narzędzi AI oraz nowe sposoby tworzenia i optymalizacji treści. Interesuje go przede wszystkim to, jak technologia wpływa na codzienną pracę specjalistów SEO, marketerów i twórców internetowych.

Facebook
Twitter
LinkedIn
Pinterest

Najnowsze Wpisy

Śledź nas