Что такое символические и жесткие ссылки?

символьная ссылка

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

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

Какие ссылки существуют в Linux?

Существует два основных типа ссылок в Linux: символические ссылки и регулярные ссылки. Символьные ссылки иногда называются «мягкими» ссылками, а регулярные ссылки называются «жесткими» ссылками. Я думаю, что символические ссылки легче понять, так что начнем с них.

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

символическая ссылка

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

При работе из командной строки вы можете идентифицировать символические ссылки по маленькой буке «l» в начале строки вывода «ls -l»:

символьная ссылка

В приведенном выше примере мы видим два файла, test.txt и test1 . В начале первой строки вы видите в нижнем регистре букву L, которая говорит нам, что test1 является символической ссылкой. В конце строки мы видим, где находится наша ссылка (или короткая вырезка). test1 ссылка указывает на действительное местоположение, другой файл ( test.txt ).

Где символические ссылки пригодятся, если они предоставляют нам короткую ссылку на другое место? Вот еще один пример, где у нас есть ссылка в текущем каталоге, называемая мой_рисунок.jpg , которая указывает на файл в папке « Изображения ».

символьные ссылки

Теперь, не выходя из текущего каталога, я могу воспользоваться ссылкой мой_рисунок.jpg для доступа к портфолио my_picture.jpg в другом каталоге. Все, что я делаю с изображением мой_рисунок.jpg , будь то открытие, изменение размера или копирование, на самом деле произойдет с оригинальным изображением my_picture.jpg. Система знает, что всякий раз, когда я ссылаюсь на мой_рисунок.jpg, я действительно хочу открыть my_picture.jpg.

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

Из командной строки символическая ссылка может быть создана с использованием функции ln и передачи ей параметра -s. Например, вот как я создал короткую ссылку мой_рисунок.jpg на изображение в папке «Изображения»:

ln -s home/linuxthebest/Изображения/my_picture.jpg мой_рисунок.jpg

После флага -s нам просто нужно указать исходное местоположение файла и имя ссылки.

Символическая ссылка также может указывать на каталог. Это может быть полезно, если мы часто хотим получить доступ к папке, которая глубоко погружена в файловую систему. Например, в моем домашнем каталоге я мог бы создать короткую ссылку, в которой хранятся файлы журнала Apache:

ln -s /var/log/apache2 logs

Затем, когда я захочу получить доступ к файлам журналов, мне не нужно искать в моей домашней папке этот файл, вплоть до верхнего уровня файловой системы, и переходить по адресу /var/log/apache2. Я могу просто щелкнуть по ссылке которую я создал, и я сразу попаду в нужный каталог.

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

Регулярные (жесткие) ссылки

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

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

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

Это кажется немного запутанным, поэтому давайте посмотрим, как мы можем играться со ссылками. Я собираюсь создать каталог, содержащий файл с именем original, содержащий слова «Привет Мир!». Затем я создам символическую ссылку и жесткую ссылку на текстовый файл.

echo "Привет Мир!" > original
ln original жесткая-ссылка
ln -s original символическая-ссылка

На данный момент у нас есть оригинальный текстовый файл с жесткой ссылкой и символической ссылкой, указывающей на него. Выходной сигнал «ls -l» выглядит так:

жесткие ссылки

Обратите внимание на номер слева от моего имени пользователя. Здесь он показывает цифру «2», что означает, что есть два экземпляра исходного файла. Как исходная, так и жесткая ссылка имеют номер 2 в списке, потому что каждый из них является ссылкой или экземпляром того же файла. Если я добавлю новую жесткую ссылку на оригинал, тогда цифра увеличится еще на 1 пункт, и будет показывать цифру 3. Файл останется на диске, пока есть ссылки на него. Когда счетчик экземпляров сбрасывается до 0, файл удаляется. То есть если вы создадите 10 жестких ссылок, то пока вы не удалите последнюю, ваш файл будет в целости и сохранности.

Теперь давайте посмотрим, что произойдет если я удалю исходный файл, а затем попытаюсь получить доступ как к символической-ссылке, так и к жесткой ссылке:

жесткая ссылка

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

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

Другим ограничением жесткой ссылки является то, что она не может указывать на файл на другом устройстве или разделе. Это означает, что если я попытаюсь установить жесткую связь между файлом на моем корневом разделе и в моем домашнем разделе, действие завершится неудачно. Так как жесткая ссылка — это один и тот же файл под другим именем, а не копия, он не может охватывать физические устройства. Для перекрестного соединения мы можем использовать символическую ссылку.

Вывод

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

Вот и все, надеюсь информация была полезной. Всем удачного дня.

Поделитесь с друзьями

Добавить комментарий

2 комментариев
Новіші
Старіші Найпопулярніші
Вбудовані Відгуки
Переглянути всі коментарі
Halyluya

:vo:

M15

очень полезно! вот спасибо за лекбез! 🙂

2
0
Ми любимо ваші думки, будь ласка, прокоментуйте.x