hostprofi.ru
Подобрать хостинг
Термин·буква S

Symlink

краткое определение

Symlink (символическая ссылка) — специальный файл в Linux/Unix, содержащий путь к другому файлу или директории. Позволяет обращаться к ресурсу через разные пути без дублирования данных.

Символическая ссылка (symlink, мягкая ссылка) — тип файла в Linux/Unix, который хранит текстовый путь к целевому файлу или директории. При обращении к symlink ядро автоматически перенаправляет запрос к цели. Symlink — один из фундаментальных механизмов файловой системы, используемый в системных утилитах, пакетных менеджерах и веб-серверах.

Как работает

Symlink создаётся командой ln -s /путь/к/цели /путь/к/ссылке. В файловой системе symlink — обычный inode с типом S_IFLNK, содержащий строку пути. При чтении файла через symlink ядро выполняет разыменование (dereference): читает содержимое symlink, получает путь, открывает уже этот файл.

Важно отличать от жёстких ссылок (hardlink): hardlink — второй inode, указывающий на те же блоки данных; удаление оригинала не удаляет данные, пока есть хоть один hardlink. Symlink — ссылка на путь; если цель удалена, symlink становится «битым» (dangling symlink). Hardlink работает только в пределах одной файловой системы; symlink — нет.

Symlink отображается в ls -la как lrwxrwxrwx имя -> цель. Права на symlink всегда 777 — реальные права проверяются у целевого файла. readlink -f symlink возвращает абсолютный путь к цели, разрешая цепочки symlink-ов.

Применение в хостинге и администрировании

  • Nginx vhost: /etc/nginx/sites-enabled/site.conf -> /etc/nginx/sites-available/site.conf — включение/отключение сайта без удаления конфига
  • PHP versions: /usr/bin/php -> /usr/bin/php8.2 — переключение версии PHP
  • Atomic deploy: /var/www/current -> /var/www/releases/20240415 — атомарное переключение версии сайта
  • SSL: /etc/ssl/certs/ca-certificates.crt — множество symlink-ов на сертификаты в /usr/share/ca-certificates/

История

Символические ссылки появились в 4.2BSD (1983) как расширение файловой системы FFS. Это была одна из ключевых инноваций BSD Unix. В системе V Unix symlink появились позже — в SVR4 (1988). В ядре Linux поддержка symlink присутствует с версии 0.01 (1991). В NTFS (Windows) аналог symlink появился лишь в Windows Vista (2007).

На что обращать внимание

Бесконечные циклы symlink: если A указывает на B, а B на A — ядро ограничивает число разыменований (MAXSYMLINKS = 40 в Linux). Атаки через symlink: вредоносный код может создать symlink в директорию с доступом на запись, указывающий на системный файл — это классический toctou-race в плохо написанном коде с привилегиями. В Docker: монтирование директорий с symlink требует осторожности — symlink внутри контейнера может указывать на пути хост-системы при неправильной конфигурации.

Symlinks в хостинге

Символические ссылки широко используются в Linux-хостинге: /etc/nginx/sites-enabled/site.conf — симлинк на sites-available/site.conf, что позволяет включать/отключать nginx-конфиги без удаления. php8.3php — симлинк на актуальную версию PHP. На VPS симлинки используются для монтирования shared-ресурсов. В Docker: томá (docker volume mount) под капотом используют bind mounts и симлинки. Важно: в cPanel/ISPmanager симлинки между пользовательскими директориями запрещены (безопасность).

Другие термины