skip to content
Skesov.pro

Символьные и жесткие ссылки в Linux и macOS: полное руководство

/ 2 min read

Table of Contents

В UNIX-подобных системах (Linux, macOS) ссылки являются фундаментальной частью файловой системы. Они позволяют эффективно управлять данными, создавать псевдонимы для библиотек или организовывать конфигурации.

Существует два основных типа ссылок: символьные (Soft/Symbolic) и жесткие (Hard). Чтобы понять разницу, нужно сначала разобраться в том, как система хранит файлы.

Что такое Inode (индексный дескриптор)?

Представьте, что ваш жесткий диск — это огромный склад с ящиками данных. У каждого ящика есть свой уникальный номер — это и есть Inode.

То, что вы видите в папках (файлы) — это просто записи в «блокноте» системы: Название файла -> Номер ящика.

  • Жесткая ссылка — это когда вы в блокноте создаете две разные записи с разными именами, но указываете на один и тот же номер ящика.
  • Символьная ссылка — это когда вы создаете запись, которая ведет не к ящику, а к другой записи в блокноте.

Символьная ссылка — это отдельный файл, содержащий путь к целевому объекту.

Особенности:

  • Могут указывать как на файлы, так и на папки.
  • Работают между разными дисками и файловыми системами.
  • Если удалить оригинал, ссылка «сломается».

Создание:

Terminal window
ln -s /path/to/original /path/to/link

Обновление ссылки (ключ -sfn):

Если вам нужно переключить существующую ссылку (особенно на папку) на новый путь, используйте комбинацию -sfn:

Terminal window
ln -sfn /new/path/target /path/to/link
  • -f (force) — удаляет старую ссылку перед созданием новой.
  • -n (no-dereference) — гарантирует, что если ссылка ведет на папку, новая ссылка не будет создана внутри этой папки.

Жесткая ссылка — это фактически второе имя для физических данных на диске.

Особенности:

  • Работают только в пределах одного раздела.
  • Нельзя создавать для папок.
  • Если удалить оригинал, данные останутся доступны по жесткой ссылке.

Создание:

Terminal window
ln /path/to/original /path/to/link

Сравнительная таблица

СвойствоSymbolic Link (-s)Hard Link
Для папокДаНет
Между разделамиДаНет
Удаление оригиналаСсылка ломаетсяФайл доступен по ссылке
Размер на дискеНесколько байт0 (указывает на тот же Inode)

Полезные команды

Как узнать, куда ведет ссылка?

Terminal window
ls -l /path/to/link
# Вывод: lrwxr-xr-x ... link -> /path/to/original

Удаление ссылки

Используйте обычную команду rm. Это безопасно — данные оригинала задеты не будут.

Terminal window
rm /path/to/link

Резюме

Используйте символьные ссылки (ln -s) в 99% случаев — это стандарт для конфигураций и ярлыков. Жесткие ссылки полезны для механизмов бэкапа или когда нужно гарантировать сохранность данных при удалении одного из имен файла.