Что такое символическая ссылка (symlink) в Linux?

«Что такое символическая ссылка (symlink) в Linux?» — вопрос из категории Linux, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Символическая ссылка (symbolic link, symlink, soft link) — это специальный файл в файловой системе Linux, который служит указателем (ссылкой) на путь к другому файлу или директории. Это аналог «ярлыка» в Windows.

Ключевые характеристики:

  • Содержимое: Symlink содержит только текстовый путь к целевому файлу.
  • Inode: Имеет собственный inode, отличный от inode цели.
  • Разрешения: Права доступа к symlink обычно lrwxrwxrwx (все могут читать ссылку), но реальный доступ определяется правами целевого файла.
  • Межфайловая система: Может ссылаться на файлы в других разделах и даже на сетевых ресурсах (NFS, SMB), если путь доступен.

Создание символических ссылок:

# Базовый синтаксис
ln -s <целевой_файл_или_папка> <имя_ссылки>

# Пример 1: Создать ссылку на файл в текущей директории
ln -s /var/log/syslog current-syslog.log

# Пример 2: Создать ссылку на директорию
ln -s /usr/share/doc ./docs-link

# Пример 3: Создать ссылку с абсолютным путём в другом месте
ln -s /home/user/projects/app /opt/application-link

# Пример 4: Создать ссылку с относительным путём (относительно расположения ссылки!)
# Из директории /home/user:
ln -s ../shared/config.yaml ./config  # Ссылка будет указывать на /home/shared/config.yaml

Работа с ссылками:

# Проверить, является ли файл ссылкой, и куда он ведёт
ls -l <имя_файла>
# Вывод начинается с 'l', например: lrwxrwxrwx 1 user user 11 Apr 10 12:00 config -> ../shared/config.yaml

# Прочитать цель ссылки
readlink <имя_ссылки>

# Перейти по ссылке в директорию (команда 'cd' следует по symlink'ам)
cd docs-link

# Удалить саму ссылку (целевой файл не затрагивается)
rm current-syslog.log

# Удалить целевой файл (ссылка становится «битой» - dangling symlink)
rm /var/log/syslog
# Проверка: ls -l покажет красный цвет (в некоторых терминалах) и путь с несуществующей целью.
Отличие от жёсткой ссылки (hard link): Характеристика Символическая ссылка (Soft Link) Жёсткая ссылка (Hard Link)
Inode Свой собственный inode Разделяет тот же inode, что и оригинал
На что ссылается На путь (имя файла) Непосредственно на данные на диске (inode)
Межфайловая система Да Нет (только в пределах одной ФС)
На директории Да Нет (обычно, кроме суперпользователя)
При удалении оригинала Становится битой (dangling) Данные остаются, пока есть хотя бы одна жёсткая ссылка
Размер Занимает место, равное длине пути Не занимает дополнительного места (только запись в каталоге)

Практическое применение в DevOps:

  1. Управление версиями ПО: Ссылка /usr/bin/python/usr/bin/python3.9.
  2. Организация логов: Ссылка /var/log/application/current.log/var/log/application/app-2023-10-27.log.
  3. Развёртывание приложений: Паттерн «current release»:
    /var/www/app/releases/20231027-123456/
    /var/www/app/releases/20231028-234567/
    /var/www/app/current -> /var/www/app/releases/20231028-234567/
    # Переключение версии: ln -sfn /var/www/app/releases/20231028-234567 /var/www/app/current
  4. Конфигурация: Ссылка на конфиг из репозитория в директорию, где его ожидает приложение.
  5. Создание удобных путей: Сокращение длинных путей для частого использования.