Символические ссылки в Linux: команда ln -s для новичков с примерами
Зачем нужны символические ссылки (Symlinks)?
Символическая ссылка в Linux — это аналог ярлыка в Windows. Она указывает на реальный файл или директорию, расположенную в другом месте файловой системы. Программы и веб-серверы обращаются к симлинку прозрачно, как к обычной реальной папке.
| Сценарий | Обычное копирование (cp -r) | Создание симлинка (ln -s) |
|---|---|---|
| Общая папка с фото для 5 сайтов (100 ГБ) | Займет 500 ГБ на диске (по 100 ГБ каждому сайту) | Займет 0 МБ (все сайты читают одну исходную папку) |
| Обновление общего файла | Нужно вручную перезаписывать файл в 5 разных местах | Меняется в одном месте — мгновенно видно на всех сайтах |
| Активация конфигов в Nginx | Копирование файла приводит к расхождению версий | Стандарт архитектуры (sites-available -> sites-enabled) |
Как правильно создавать и удалять символические ссылки
Главное правило команды ln -s: первым аргументом всегда указывается РЕАЛЬНЫЙ файл-источник (Куда), а вторым аргументом — создаваемый ЯРЛЫК (Где).
- Шаг 1. Создание симлинка на папку:
Прокинем общую папку с изображениями
/storage/mediaв корень сайта/var/www/my_site/public/uploads:ln -s /storage/media /var/www/my_site/public/uploads - Шаг 2. Всегда используйте АБСОЛЮТНЫЕ пути:
При использовании относительных путей (например,
ln -s ../media uploads) ярлык сломается, если его вызовет веб-сервер из другого контекста. Всегда пишите полный путь от корня/. - Шаг 3. Как проверить, куда указывает ссылка:
Выполните команду
ls -lв папке с созданным симлинком:ls -l /var/www/my_site/public/Вы увидите стрелочку:
uploads -> /storage/media. - Шаг 4. Как правильно удалить символическую ссылку:Осторожно: Никогда не ставьте слэш
/на конце имени ссылки при удалении! Командаrm -rf uploads/сотрет файлы внутри РЕАЛЬНОЙ исходной папки.Удаляйте ссылку как обычный файл:
# Безопасный способ через утилиту unlink: unlink /var/www/my_site/public/uploads # Либо через rm (без слэша на конце!): rm /var/www/my_site/public/uploads
Частые вопросы (FAQ)
В чем разница между жесткой (Hard link) и мягкой/символической (Soft/Symbolic link) ссылкой?
Символическая ссылка (ln -s) — это файл-указатель по пути (работает для папок и между разными дисками). Жесткая ссылка (ln без ключа -s) создает вторую прямую запись на тот же физический сектор inode на диске (не работает для папок и разных разделов).
Что такое 'битая' ссылка (broken symlink)?
Это ссылка, указывающая на файл или папку, которая была переименована, перемещена или удалена. В терминале такие ссылки обычно подсвечиваются красным мигающим цветом.
Почему Nginx выдает ошибку 403 / 404 при попытке открыть симлинк?
Убедитесь, что веб-сервер имеет права на чтение целевой исходной папки, а в конфигурации Nginx внутри блока location включена директива: disable_symlinks off;.
Как найти все сломанные симлинки в системе?
Используйте встроенную утилиту find: find /var/www/ -xtype l.