Полный цикл в digital

Символические и жесткие ссылки

Символические и жесткие ссылки - это особенность файловой системы Linux, которая позволяет размещать один и тот же файл в нескольких директориях. Это очень похоже на ярлыки в Windows, так как файл на самом деле остается там же где и был, но вы можете на него сослаться из любого другого места.

В Linux существует два типа ссылок на файлы. Это символические и жесткие ссылки Linux. Они очень сильно отличаются и каждый тип имеет очень важное значение.

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

Символические ссылки более всего похожи на обычные ярлыки в Windows. Они содержат адрес нужного файла в вашей файловой системе. Когда вы пытаетесь открыть такую ссылку, то открывается целевой файл или папка. Главное ее отличие от жестких ссылок в том, что при удалении целевого файла ссылка останется, но она будет указывать в никуда, поскольку файла на самом деле больше нет.

Основные особенности символических ссылок:

  • Могут ссылаться на файлы и каталоги
  • После удаления, перемещения или переименования файла становятся недействительными
  • Права доступа и номер inode отличаются от исходного файла
  • При изменении прав доступа для исходного файла, права на ссылку останутся неизменными
  • Можно ссылаться на другие разделы диска
  • Содержат только имя файла, а не его содержимое

Жесткие ссылки

Этот тип ссылок реализован на более низком уровне файловой системы. Файл размещен только в определенном месте жесткого диска. Но на это место могут ссылаться несколько ссылок из файловой системы. Каждая из ссылок - это отдельный файл, но ведут они к одному участку жесткого диска. Файл можно перемещать между каталогами, и все ссылки останутся рабочими, поскольку для них неважно имя.

Основные особенности жестких ссылок:

  • Работают только в пределах одной файловой системы
  • Нельзя ссылаться на каталоги
  • Имеют ту же информацию inode и набор разрешений что и у исходного файла
  • Разрешения на ссылку изменяться при изменении разрешений файла
  • Можно перемещать и переименовывать и даже удалять файл без вреда ссылке

Использование ссылок

Теоретические отличия вы знаете, но осталось закрепить все это на практике, поэтому давайте приведем несколько примеров работы со ссылками в Linux. Для создания символических ссылок существует утилита ln:

ln опции файл_источник файл_ссылки
Короткий формат Описание
-d Разрешить создавать жесткие ссылки для директорий суперпользователю
-f Удалять существующие ссылки
-i Спрашивать нужно ли удалять существующие ссылки
-P Создать жесткую ссылку
-r Создать символическую ссылку с относительным путем к файлу
-s Создать символическую ссылку

Создание символических ссылок

Создаем папку test:

mkdir test

Переходим в папку:

cd test

Затем создайте файл с именем source с каким-либо текстом:

echo "текст текст текст текст" > source

Смотрим содержимое файла:

cat source

Файл готов, дальше создадим символическую ссылку Linux, для этого используется команда ln с опцией -s:

ln -s source softlink

Попробуем посмотреть содержимое файла по ссылке:

cat softlink

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

ls -li

Несмотря на то, что содержимое одинаковое, здесь мы видим, что адрес иноды и права доступа к файлам отличаются, кроме того, явно показано что это символическая ссылка Linux.

Теперь удалите исходный файл и посмотрите что будет:

cat softlink

Вы получите ошибку, что такого файла не существует, потому что мы действительно удалили исходный файл. Если вы удалите ссылку, то исходный файл останется на месте.

Создание жестких ссылок

Снова создайте файл source с каким-либо текстом:

echo "текст текст текст текст" > source

Смотрим содержимое файла:

cat source

Теперь создадим жесткую ссылку Linux, для этого достаточно вызвать утилиту без параметров:

ln source hardlink

Посмотрите содержимое файла:

cat hardlink

Данные те же самые, а если мы посмотрим вывод утилиты ls, то увидим что inode и права доступа тоже совпадают:

ls -li

Если для одного из файлов поменять разрешения, то они изменяться и у другого. Теперь удалите исходный файл:

rm source

Затем посмотрите содержимое:

cat hardlink

Как видите, ничего не произошло и ссылка по-прежнему указывает на нужный участок диска, это главное отличие жесткой ссылки от символической. Мы можем сделать вывод, что жесткая ссылка linux это обычный файл. Каждый файл имеет как минимум одну ссылку, но для некоторых мы можем создать несколько ссылок.

Как удалять ссылки

Команда rm позволяет удалять любые файлы в файловой системе Linux, в том числе и ссылки. Она подходит для нашей задачи, в результате удаления ссылки оригинальный файл или директория затронуты не будут:

rm название_ссылки

Путь ссылки

Команда ls позволяет посмотреть путь куда именно ведет ссылка в файловой системе:

ls -al название_ссылки
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг