Search
Write a publication
Pull to refresh
2056.14
Timeweb Cloud
То самое облако

О мягких и жёстких ссылках в Linux

Level of difficultyMedium
Reading time6 min
Views10K
Original author: Karlygash Yakiyayeva

Ссылки в 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. Эффективная компоновка: несколько жёстких ссылок могут совместно использовать один и тот же инод и блоки данных, что означает, что при создании нескольких жёстких ссылок на один файл не тратится лишнее место на диске.

  2. Доступность файла: пока существует хотя бы одна жёсткая ссылка на файл, данные файла остаются доступными. Удалив одну жёсткую ссылку, мы не удаляем сам файл.

  3. Производительность: жёсткие ссылки обычно срабатывают быстрее мягких, поскольку указывают непосредственно на индексный дескриптор и не требуют разрешения пути.

  4. Прозрачность: жёсткие ссылки выглядят и функционируют как обычные файлы. Нет различия между исходным файлом и указывающими на него жёсткими ссылками.

  5. Консистентность: все жёсткие ссылки на файл всегда актуальны. Любые изменения, внесённые через любую жёсткую ссылку, немедленно отражаются во всех остальных.

Хотя жёсткие ссылки полезны, у них есть некоторые ограничения:

  1. Ограничения на каталоги: жёсткие ссылки можно создавать только для обычных файлов (не для каталогов или специальных файлов).

  2. Ограничение на одну файловую систему: жесткие ссылки не могут распространяться на несколько файловых систем. Они работают только в том случае, если новая жесткая ссылка существует в той же файловой системе, что и исходная.

❯ Мягкие ссылки

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

Создание мягкой ссылки

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 ничего не отображается. Объект, на который указывала ссылка, был удален, и ссылка стала бесполезной.

❯ Преимущества и недостатки символических ссылок

Символические ссылки имеют следующие преимущества:

  1. Гибкость: мягкие ссылки могут указывать как на файлы, так и на директории, а также работать между разными файловыми системами или разделами.

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

  3. Низкие издержки: размер файлов символических ссылок небольшой, так как они содержат только путь к цели.

Однако у символических ссылок есть и недостатки:

  1. Хрупкость: они могут стать «висячими» ссылками, если цель будет перемещена, переименована или удалена.

  2. Производительность: доступ к символическим ссылкам немного медленнее, чем к жёстким, поскольку требуется дополнительный шаг разрешения пути.

  3. Небезопасность: если ими неправильно управлять, мягкие ссылки могут представлять угрозу безопасности, так как могут указывать на конфиденциальные файлы.

  4. Разные индексные дескрипторы: мягкие ссылки имеют собственные айноды, из-за чего количество айнодов в системе может слишком увеличиться.


Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале

Опробовать ↩

📚 Читайте также:

Tags:
Hubs:
+32
Comments14

Articles

Information

Website
timeweb.cloud
Registered
Founded
Employees
201–500 employees
Location
Россия
Representative
Timeweb Cloud