Символические и жесткие ссылки - это особенность файловой системы Linux, которая позволяет размещать один и тот же файл в нескольких директориях. Это очень похоже на ярлыки в Windows, так как файл на самом деле остается там же где и был, но вы можете на него сослаться из любого другого места.
В Linux существует два типа ссылок на файлы. Это символические и жесткие ссылки Linux. Они очень сильно отличаются и каждый тип имеет очень важное значение. В этой небольшой статье мы рассмотрим чем же отличаются эти ссылки, зачем они нужны, а также как создавать ссылки на файлы в Linux.
Содержание статьи
Символические ссылки
Символические ссылки более всего похожи на обычные ярлыки. Они содержат адрес нужного файла в вашей файловой системе. Когда вы пытаетесь открыть такую ссылку, то открывается целевой файл или папка. Главное ее отличие от жестких ссылок в том, что при удалении целевого файла ссылка останется, но она будет указывать в никуда, поскольку файла на самом деле больше нет.
Вот основные особенности символических ссылок:
- Могут ссылаться на файлы и каталоги;
- После удаления, перемещения или переименования файла становятся недействительными;
- Права доступа и номер inode отличаются от исходного файла;
- При изменении прав доступа для исходного файла, права на ссылку останутся неизменными;
- Можно ссылаться на другие разделы диска;
- Содержат только имя файла, а не его содержимое.
Теперь давайте рассмотрим жесткие ссылки.
Жесткие ссылки
Этот тип ссылок реализован на более низком уровне файловой системы. Файл размещен только в определенном месте жесткого диска. Но на это место могут ссылаться несколько ссылок из файловой системы. Каждая из ссылок - это отдельный файл, но ведут они к одному участку жесткого диска. Файл можно перемещать между каталогами, и все ссылки останутся рабочими, поскольку для них неважно имя. Рассмотрим особенности:
- Работают только в пределах одной файловой системы;
- Нельзя ссылаться на каталоги;
- Имеют ту же информацию inode и набор разрешений что и у исходного файла;
- Разрешения на ссылку изменятся при изменении разрешений файла;
- Можно перемещать и переименовывать и даже удалять файл без вреда ссылке.
Использование ссылок в Linux
Теоретические отличия вы знаете, но осталось закрепить все это на практике, поэтому давайте приведем несколько примеров работы со ссылками в 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 это обычный файл. Каждый файл имеет как минимум одну ссылку, но для некоторых мы можем создать несколько ссылок.
Выводы
Это все, что вам было необходимо знать про символические и жесткие ссылки linux. Надеюсь, вы получили общее представление об этих возможностях файловой системы и сможете использовать их для решения своих задач.
На завершение видео про ссылки в Linux:
Наглядно. Спасибо
Почему не создаются ссылки в директориях сайта на сервере
символическая ссылка красная и не работает
жесткая ссылка вообще не создается пишет: ln: failed to access
права на папку такие же как везде
в остальных директориях все создается и работает
Потому, что жёсткие ссылки могут ссылаться лишь на файл, расположенный на том же логическом разделе жёсткого диска. Для мягких ссылок подобных ограничений нет,
Не до конца раскрыты понятия жесткая и символьная ссылки. В Линукс
вся информация о файле привязана не к его имени , а к так называемому
числовому индексному дескриптору, в котором указаны сведения об этом файле:
в каких блоках диска хранится его содержимое, размер, время создания, модификации и др.
Индексные дескрипторы файлов хранятся в специальной таблице и имеют числовое значение,
что не очень удобно для запоминания и использования, поэтому им удобней дать имя.
Имя файла (можно создать несколько), ссылающееся на его индексный дескриптор, называется жесткой ссылкой. Но есть несколько ограничений:
- их можно создавать только на файлы, но не на каталоги;
- жесткую ссылку нельзя создать на файл, находящийся на другом диске.
А символьная ссылка (или мягкая) указывает на жесткие ссылки, не на индексный дескриптор.
Дополнение:
Жесткая ссылка (регулярная) это для обычных типов файлов, не специальных (каталог, сокет, блочное устройство и т.д.), но у специальных типов файлов имеются свои дескрипторы (inode).
Какое же убогое описание...
Не понятно в каких случаях, что использовать
Статья очень вовремя: я уже пробовал создавать ссылки на рабочем столе, но они не работали, оказывается их надо создавать специальной программой. И нельзя мягкие ссылки копировать, а жёсткие?
В статье есть ошибка.
Невозможно создать жёсткую ссылку на директорию, соответственно, ключ -d является ошибочным.
Не то что бы ключ -d в статье ошибочно указан. Данный ключ в справке команды ln указан, и описано это так:
" -d, -F, --directory позволить суперпользователю создавать жесткие ссылки
на каталоги (замечание: вероятно, это не получится
из-за системных ограничений, даже для
суперпользователя)"
Т.е. как будто есть редкие случаи, когда это возможно.
не поняла какой смысл создавать жеские ссылки когда можно скопировать файл
чтобы место на диске не занимать в два раза больше