PQ
PQ.Hosting

Валюта

Команда ln в Linux: жёсткие ссылки, симлинки и практические сценарии

Автор
PQ
11 марта 2026
4 мин чтения
29 просмотров
Команда ln в Linux: жёсткие ссылки, симлинки и практические сценарии

Два файла с разными именами, но это один и тот же файл на диске. Или ссылка которая ведёт к папке в другом месте файловой системы, но выглядит как обычная директория. Всё это — ссылки, и в Linux их два принципиально разных вида. Разбираемся чем они отличаются и когда что использовать.

Жёсткая ссылка vs символическая: ключевая разница

В Linux каждый файл на диске имеет уникальный номер — inode. Это идентификатор в таблице файловой системы, к которому привязаны реальные данные. Имя файла в директории — это всего лишь указатель на inode.

Жёсткая ссылка — это второе (или третье, или десятое) имя для того же inode. Удалите «оригинал» — данные никуда не денутся, пока хотя бы одно имя на inode существует.

Символическая ссылка (симлинк) — отдельный файл который хранит путь к другому файлу или директории. Удалите оригинал — симлинк станет битым и будет вести в никуда.

Проверить inode файлов:

ls -li

У жёсткой ссылки и оригинала будет одинаковый номер inode. У симлинка — свой отдельный.

Жёсткая ссылка

Создать жёсткую ссылку — второе имя для файла:

ln file1.txt file2.txt

Теперь file1.txt и file2.txt — это одно и то же. Изменение содержимого через любое из имён отразится в обоих. Удаление одного имени не затрагивает данные — они исчезнут только когда будут удалены все имена.

Жёсткие ссылки работают только в пределах одной файловой системы — нельзя сделать жёсткую ссылку на файл с другого раздела или сетевой папки. На директории жёсткие ссылки создавать нельзя (технически возможно только для root, но это ломает структуру дерева).

Символическая ссылка

Создать симлинк на файл:

ln -s /path/to/file1.txt /path/to/link.txt

Симлинк на директорию:

ln -s /var/www/mysite /home/user/mysite

После этого обращение к /home/user/mysite будет прозрачно работать как обращение к /var/www/mysite.

Симлинки пересекают границы файловых систем — можно создать ссылку на файл с другого раздела или внешнего диска. Для директорий используются почти всегда только симлинки.

Абсолютный и относительный путь в симлинке

Симлинк хранит путь — и этот путь может быть абсолютным или относительным.

Абсолютный путь — работает из любого места, но сломается при переносе файлов в другое расположение:

ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/mysite

Относительный путь — симлинк хранит путь относительно своего расположения. Удобен когда структура директорий переезжает целиком:

cd /etc/nginx/sites-enabled
ln -s ../sites-available/mysite mysite

Проверить куда ведёт симлинк:

readlink -f /etc/nginx/sites-enabled/mysite

Перезаписать существующую ссылку: флаг -f

Если цель уже существует — ln откажется создавать ссылку. Флаг -f сначала удалит существующий файл, затем создаст ссылку:

ln -sf /path/to/new_target existing_link

Комбинация -sf — стандарт для обновления симлинков в скриптах.

Вывести что происходит: флаг -v

ln -sv /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/mysite
'/etc/nginx/sites-enabled/mysite' -> '/etc/nginx/sites-available/mysite'

Флаг -v (verbose) печатает каждую созданную ссылку. Полезен в скриптах где нужно видеть что именно произошло.

Реальные сценарии

Nginx: активация виртуальных хостов. В Debian и Ubuntu конфиги сайтов хранятся в sites-available, а подключаются через симлинки в sites-enabled:

sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/

Деактивировать сайт — удалить симлинк, не трогая конфиг:

sudo rm /etc/nginx/sites-enabled/mysite

Несколько версий Python или Node. Быстро переключить дефолтную версию:

sudo ln -sf /usr/bin/python3.11 /usr/local/bin/python

Логи в одном месте. Если приложение пишет лог в нестандартную папку — симлинк из /var/log/ сделает его видимым для централизованного мониторинга:

sudo ln -s /opt/myapp/logs/app.log /var/log/myapp.log

Найти битые симлинки

Симлинк становится битым если оригинальный файл удалён или перемещён. Найти все битые симлинки в директории:

find /etc/nginx/sites-enabled -xtype l

-xtype l ищет симлинки указывающие на несуществующие цели.

Шпаргалка

Задача Команда
Жёсткая ссылка ln file.txt link.txt
Символическая ссылка ln -s /source /link
Симлинк на директорию ln -s /source/dir /link/dir
Перезаписать существующую ln -sf /source /link
С выводом действий ln -sv /source /link
Куда ведёт симлинк readlink -f /link
Проверить inode ls -li
Найти битые симлинки find /path -xtype l

Поделиться статьей

Похожие статьи