
Ссылки в Linux — это мощный инструмент, позволяющий указывать путь к файлам и каталогам. Существует два основных типа ссылок: жёсткие ссылки и мягкие ссылки (вторые также известны как символические ссылки или симлинки). Понимание различий между этими двумя типами поможет вам эффективно управлять файловой системой.
❯ Что такое ссылка?
Прежде чем начать работать с жёсткими и мягкими ссылками, давайте разберёмся, что представляет собой ссылка в Linux.
Каждое запоминающее устройство содержит файлы и каталоги, хранящиеся поблочно.

Информация о файле или каталоге хранится в специальной структуре данных, называемой индексный дескриптор или айнод (inode).
Индексные дескрипторы содержат метаданные, такие как владелец файла, дата его создания и последнего доступа, размер, права доступа, а также указатели на блоки данных, в которых фактически хранится содержимое файла, плюс другие сведения.
Любой носитель информации, например жесткий диск, флэш-накопитель и т. д., имеет свои собственные индексные дескрипторы. Эти айноды зависят от файловой системы, устройства, на котором хранится информация, и от раздела. Поэтому если мы перенесем один текстовый файл с локального носителя на флешку, то этот файл получит другой инод.
Каждый индексный дескриптор имеет уникальный номер, по которому файловая система его и находит.
Запись в каталоге — это, по сути, таблица, поддерживаемая файловой системой. В этой таблице содержится имя файла или каталога и указатель (ссылка, часто в виде адреса) на номер индексного дескриптора.
Имя файла | Номер индексного дескриптора |
report.txt | 43132770 |
image.png | 43132771 |
Невозможно напрямую просматривать необработанные записи каталога, поскольку файловая система управляет ими на низком уровне. Однако мы можем просмотреть информацию о файлах в каталоге, включая номера индексных дескрипторов, которые являются частью записей каталога, с помощью команд ls -li или stat.
Ссылка — это просто ещё одна запись в каталоге для файла или директории. Она находится между именем файла и фактическими данными, хранящимися в файловой системе. Создавая ссылки, мы можем иметь несколько записей в каталоге (имён) для одного и того же файла или директории, что позволяет использовать два или более имени для одного и того же объекта.
❯ Жесткие ссылки
Жёсткая ссылка — это запись в каталоге, которая указывает непосредственно на инод файла. Она действует как отдельный файл и ссылается на конкретное место на жёстком диске. Это зеркальная копия оригинального файла. Давайте рассмотрим, как создавать жёсткие ссылки и узнаем, как они работают. Для создания жёсткой ссылки используется команда ln.
Как создать жесткую ссылку
1. Создайте исходный файл:
echo "Hello World!" > original.txt

2. Создайте жесткую ссылку:
ln original.txt hardlink.txt

3. Сверьте номера индексных дескрипторов у исходного файла и файла с жёсткой ссылкой:
ls -i original.txt hardlink.txt

Как мы видим, файлы original.txt
и hardlink.txt
имеют одинаковый номер индексного дескриптора, что указывает на то, что они ссылаются на одно и то же содержимое файла.
Редактирование жесткой ссылки
4. Внесите изменения в жёсткую ссылку hardlink.txt
:
echo "Nice to see you World" >> hardlink.txt
5. Проверьте содержимое исходного файла original.txt
:
cat original.txt

Как видите, изменения, внесённые в hardlink.txt
, отображаются и в original.txt
, поскольку они ссылаются на один и тот же индексного дескриптора.
Удаление исходного файла
6. Удалите исходный файл:
rm original.txt
7. Проверьте содержание жесткой ссылки hardlink.txt
:
cat hardlink.txt

Как видим, содержимое файла по-прежнему доступно через hardlink.txt, поскольку индексный дескриптор и блоки данных сохраняются до тех пор, пока не будут удалены все жёсткие ссылки.
Создание нескольких жёстких ссылок
8. Создайте другую жесткую ссылку:
ln hardlink.txt another-hardlink.txt
9. Проверьте номерамндексных дескрипторов:
ls -li hardlink.txt another-hardlink.txt

Снова файлы hardlink.txt
и another-hardlink.txt
имеют одинаковый номер инода, что означает, что они ссылаются на одно и то же содержимое файла.
❯ Преимущества и недостатки жёстких ссылок
Жесткие ссылки имеют следующее преимущества:
Эффективная компоновка: несколько жёстких ссылок могут совместно использовать один и тот же инод и блоки данных, что означает, что при создании нескольких жёстких ссылок на один файл не тратится лишнее место на диске.
Доступность файла: пока существует хотя бы одна жёсткая ссылка на файл, данные файла остаются доступными. Удалив одну жёсткую ссылку, мы не удаляем сам файл.
Производительность: жёсткие ссылки обычно срабатывают быстрее мягких, поскольку указывают непосредственно на индексный дескриптор и не требуют разрешения пути.
Прозрачность: жёсткие ссылки выглядят и функционируют как обычные файлы. Нет различия между исходным файлом и указывающими на него жёсткими ссылками.
Консистентность: все жёсткие ссылки на файл всегда актуальны. Любые изменения, внесённые через любую жёсткую ссылку, немедленно отражаются во всех остальных.
Хотя жёсткие ссылки полезны, у них есть некоторые ограничения:
Ограничения на каталоги: жёсткие ссылки можно создавать только для обычных файлов (не для каталогов или специальных файлов).
Ограничение на одну файловую систему: жесткие ссылки не могут распространяться на несколько файловых систем. Они работают только в том случае, если новая жесткая ссылка существует в той же файловой системе, что и исходная.
❯ Мягкие ссылки
Мягкая ссылка (символическая ссылка) — это отдельный файл, содержащий путь к другому файлу или директории. В отличие от жёстких ссылок, мягкие ссылки не ссылаются напрямую на индексный дескриптор целевого файла, а имеют собственные индексные дескрипторы и содержат путь к целевому файлу или каталогу.
Создание мягкой ссылки
1. Создайте исходный файл:
echo "Hello World" > original.txt
2. Создайте мягкую ссылку с помощью команды ln -s
:
ln -s original.txt softlink.txt
💡 При создании символических ссылок следует указывать абсолютный путь, поскольку относительные пути не будут работать.
3. Проверьте мягкую ссылку, введя команду:
ls -l original.txt softlink.txt

4. Прочитайте содержимое файла softlink.txt
:
cat softlink.txt

Редактирование мягких ссылок
5. Отредактируйте мягкую ссылку softlink.txt
:
echo "Nice to see you World!" >> softlink.txt
6. Проверьте содержимое исходного файла original.txt
:
cat original.txt

Как видите, изменения, внесённые через softlink.txt
, отражаются в original.txt
.
Перемещение целевого файла
7. Переместите файл original.txt
в другое место в системе (или удалите его):
mv original.txt ./backup/
8. Снова проверьте содержимое файла softlink.txt
:
cat softlink.txt

Как мы видим, мягкая ссылка становится «висячей», поскольку объект, на который она указывала, был перемещен в другое место (или больше не существует, если файл был удалён).
Ссылки на каталоги
Поскольку связь мягкой ссылки является логической, а не дублированием, символические ссылки могут указывать на целые каталоги или на файлы на удалённых компьютерах. Жёсткие ссылки для этого не предназначены. Давайте разберёмся, как это работает.
9. Создайте папку и файл:
mkdir my-folder
echo "Learn how to create soft links to folders" > my-folder/file
10. Создайте мягкую ссылку с названием soft-folder
для каталога my-folder
:
ln -s my-folder soft-folder
11. Проверьте ссылку:
ls -l
12. Получите доступ к каталогу my-folder
через символическую ссылку soft-folder
:
ls soft-folder
13. Удалите исходный каталог my-folder
и выведите содержимое soft-folder
:
rm -r my-folder
ls soft-folder

Как мы видим, поскольку исходная папка была удалена, при выводе содержимого soft-folder ничего не отображается. Объект, на который указывала ссылка, был удален, и ссылка стала бесполезной.
❯ Преимущества и недостатки символических ссылок
Символические ссылки имеют следующие преимущества:
Гибкость: мягкие ссылки могут указывать как на файлы, так и на директории, а также работать между разными файловыми системами или разделами.
Удобство: не составляет труда создавать ярлыки и организовывать файлы с помощью мягких ссылок. Они могут указывать на пока не существующие файлы и заработают, как только цель для них будет создана.
Низкие издержки: размер файлов символических ссылок небольшой, так как они содержат только путь к цели.
Однако у символических ссылок есть и недостатки:
Хрупкость: они могут стать «висячими» ссылками, если цель будет перемещена, переименована или удалена.
Производительность: доступ к символическим ссылкам немного медленнее, чем к жёстким, поскольку требуется дополнительный шаг разрешения пути.
Небезопасность: если ими неправильно управлять, мягкие ссылки могут представлять угрозу безопасности, так как могут указывать на конфиденциальные файлы.
Разные индексные дескрипторы: мягкие ссылки имеют собственные айноды, из-за чего количество айнодов в системе может слишком увеличиться.
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале ↩
