Символическая ссылка в Linux создаётся командой ln -s. По смыслу это ярлык: в одном месте лежит ссылка, а настоящий файл или каталог остаётся там, где был. Удобно, когда нужно дать программе привычный путь к конфигу, вынести папку на другой диск или не копировать один и тот же файл по разным директориям.
Базовая команда выглядит так: сначала указывается цель, потом имя ссылки. Именно в этом порядке чаще всего и ошибаются.
ln -s /путь/к/цели /путь/к/ссылке

Что такое символическая ссылка
Символическая ссылка, или symlink, хранит путь к другому объекту файловой системы. Если открыть ссылку, система перенаправит обращение к исходному файлу или каталогу. При этом ссылка не является копией данных. Удаление ссылки не удаляет оригинал.
Есть ещё жёсткие ссылки, но это другая история: они указывают на тот же inode и обычно применяются только к файлам в пределах одной файловой системы. Для повседневных задач почти всегда нужна именно символическая ссылка.
lnбез-sсоздаёт жёсткую ссылку;ln -sсоздаёт символическую ссылку;- символическая ссылка может указывать на файл, каталог и даже на путь, которого пока нет;
- если удалить исходный файл, ссылка останется, но станет битой.
Синтаксис ln -s
Главное правило простое: сначала цель, потом ссылка. Цель — это существующий файл или папка, к которым нужно обращаться. Ссылка — новый путь, который появится после выполнения команды.
ln -s ЦЕЛЬ ИМЯ_ССЫЛКИ
Если говорить человеческим языком: «создай ссылку ИМЯ_ССЫЛКИ, которая ведёт на ЦЕЛЬ».
Создать ссылку на файл
Допустим, есть файл /opt/app/config.yml, а программе нужен конфиг в домашней директории пользователя. Ссылка создаётся одной командой:
ln -s /opt/app/config.yml ~/config.yml
Проверить результат можно через ls -l. У символической ссылки в выводе будет стрелка ->.
ls -l ~/config.yml # пример вывода: # lrwxrwxrwx 1 user user 19 May 17 12:00 /home/user/config.yml -> /opt/app/config.yml
Создать ссылку на каталог
С папками всё работает так же. Например, нужно, чтобы каталог ~/projects/site был доступен как ~/site:
ln -s ~/projects/site ~/site
После этого переход по cd ~/site фактически откроет ~/projects/site. Для скриптов и программ это обычно выглядит как обычный каталог.
Абсолютные и относительные пути
В ссылке можно использовать абсолютный или относительный путь. Абсолютный путь начинается от корня файловой системы, например /var/www/site. Он проще для понимания и меньше зависит от текущей директории.
ln -s /var/www/site ~/site
Относительная ссылка хранит путь относительно места, где лежит сама ссылка. Это удобно внутри проекта, который могут переносить между серверами или каталогами. Например:
cd /var/www/site ln -s ../shared/uploads uploads
Если сомневаетесь, используйте абсолютный путь. Если собираете переносимый проект или репозиторий, чаще лучше относительный.
Что делать, если ссылка уже существует
Если файл или ссылка с таким именем уже есть, ln откажется перезаписывать его. Это нормальная защита от случайной порчи данных. Сначала проверьте, что именно лежит по этому пути:
ls -l ~/config.yml
Если это старая символическая ссылка и её можно заменить, удалите только ссылку, а потом создайте новую:
rm ~/config.yml ln -s /opt/app/config.yml ~/config.yml
Команду rm для ссылки использовать безопасно, если вы указываете саму ссылку. Она удалит ярлык, а не исходный файл. Но не добавляйте слеш в конце ссылки на каталог: rm ~/site и rm ~/site/ могут вести себя по-разному в зависимости от команды и оболочки.
Как удалить символическую ссылку
Удаляется ссылка обычной командой rm или unlink. Исходный файл при этом не трогается.
rm ~/config.yml # или так: unlink ~/config.yml
Для ссылки на каталог тоже не нужен rm -r, если удаляете именно ссылку:
rm ~/site
Как проверить, куда ведёт ссылка
Для быстрой проверки достаточно ls -l. Если нужен чистый путь без лишнего вывода, используйте readlink:
readlink ~/config.yml
А если нужно получить конечный абсолютный путь после всех переходов по ссылкам:
readlink -f ~/config.yml
Проверить, что путь является именно символической ссылкой, можно через test -L:
test -L ~/config.yml && echo "это ссылка"
Как найти битые ссылки
Битая ссылка появляется, когда исходный файл или папку удалили, переименовали или перенесли. Сама ссылка остаётся, но перейти по ней уже нельзя. Найти такие ссылки в текущем каталоге можно так:
find . -xtype l
Если нужно проверить конкретную директорию, замените точку на нужный путь:
find /var/www/site -xtype l
Права доступа и sudo
Для создания ссылки нужны права на запись в каталог, где появится ссылка. Права на сам исходный файл при создании ссылки обычно не меняются. Например, обычный пользователь не сможет создать ссылку прямо в /usr/local/bin без повышенных прав:
sudo ln -s /opt/mytool/mytool /usr/local/bin/mytool
Если после создания ссылка открывается с ошибкой доступа, проблема чаще всего не в ссылке, а в правах на исходный файл, каталог или один из родительских каталогов.
Частые ошибки
- Перепутали порядок аргументов. Правильно:
ln -s цель ссылка. - Создали ссылку в не той директории. Проверьте текущий путь командой
pwdперед использованием относительных путей. - Добавили лишний слеш при удалении. Удаляйте ссылку как файл:
rm ~/site, без/в конце. - Ссылка стала битой. Проверьте цель через
readlinkи наличие исходного файла. - Нет прав. Создавайте ссылку в доступной директории или используйте
sudo, если это системный путь.
Короткая памятка
# создать символическую ссылку ln -s /path/to/target /path/to/link # посмотреть, куда она ведёт ls -l /path/to/link readlink /path/to/link # удалить ссылку, не трогая оригинал rm /path/to/link # найти битые ссылки find . -xtype l
Итог
Для создания символической ссылки в Linux используйте ln -s: сначала указывайте исходный файл или каталог, затем путь новой ссылки. Проверяйте результат через ls -l или readlink, а удаляйте ссылку обычным rm без рекурсивных флагов.
Официальное описание параметров ln есть в документации GNU Coreutils.




