Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

Символьные ссылки и команда ln

Никак не могу врубиться в понятие символьной ссылки. Ну вот, допустим, я создаю файлы file1.txt с содержанием This is the first file и файл file2.txt с содержанием this is the second file.
Далее ввожу команду ln file1.txt file2.txt и на меня ругается Linux, говорит, что не получилось создать жесткую ссылку. Что мне надо добавить в первый файл, чтобы он ссылался на второй ? В интернете почти все примеры с ln -s. Зачем нужен аргумент -s ?
Был бы очень благодерн, если кто-нибудь объяснил бы на примере.


Ответ

Пожалуй внесу и свою лепту, так как буквально позавчера разбирался что к чему крепится и конспектировал всё ...

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

Для начала создадим где-нибудь какую-нибудь папку для экспериментов (у меня, например, такая есть всегда — Tests, в домашнем каталоге):
mkdir Tests
Перейдём в неё:
cd Tests
Теперь создадим в ней файл source.txt с текстом 1
echo 1 > source.txt

Время ссылок ...

По умолчанию (при вызове без параметров) команда ln создаёт «жёсткую ссылку» («hard link»):
ln source.txt hard-link.txt
Жёсткая ссылка — хм ... что за фигня?..
A hard link is a link file created with the Linux or Unix ln command that points to a file's inode Источник: computerhope.com Жёсткая ссылка — это файл, созданный с помощью команды Linux (или Unix) ln, который указывает на «inode» исходного файла.
OK,.. что такое «inode» файла?..
Short for index node, an inode is information contained within a Unix system that contains details about each file, such as the node, owner, file, location of file, etc. Источник: computerhope.com Сокращение от «index node»; inode — это информация внутри Unix-систем (внутри операционной системы), которая содержит детальное описание каждого файла; это описание включает в себя информацию о «node» файла, информацию о владельце файла, некоторую информацию о самом файле, информацию о месте расположения файла, и прочее.
OK,.. что такое «node» файла?..
A node or node address is a name or number that identifies a specific computer or terminal in a group of interconnected computers on a network. Источник: computerhope.com Node или node address — это имя или номер, который идентифицирует конкретный компьютер или терминал в группе взаимосвязанных по сети компьютеров.
То есть это некий идентификатор файла в системе ...

Фу-у-у, вроде с теорией более-менее разобрались ...

Итак, у нас на данный момент в папке Tests имеется файл source.txt с текстом 1 и жёсткая ссылка на него hard-link.txt
Давайте поэкспериментируем ...
Изменения как в source.txt, так и в hard-link.txt синхронизируются — ничего удивительного.
Если мы перенесём (удалим из текущей директории) любой из файлов в рамках нашей точки монтирования, то на втором файле это никак не скажется и синхронизация будет работать (имеется в виду если мы переносили файл конечно). Опять же — ничего удивительного: файл продолжает существовать пока на него указывает хоть одна ссылка (жёсткая).
Так в чём собственно прикол? Прикол в том, что как уже упоминалось выше, жёсткая ссылка ссылается на индекс файла (inode). Поэтому, например, если мы удалим любой из файлов, а затем создадим файл в этом же месте файл с таким же именем (и расширением), то кажется, что он должен быть синхронизирован с другим файлом, но не тут то было — связь потеряна: так как новый файл — новый индекс (то же самое и при копировании файла — создаётся новый файл с новым индексом и связь теряется).

Перейдём к символическим ссылкам ...

При вызове ln с параметром -s или --symbolic будет создана символическая ссылка:
ln -s source.txt soft-link.txt
Alternatively referred to as a soft link or symlink, a symbolic link is a file that links to another file or directory using its path. Unlike a hard link, a symbolic link can link to any file or directory on any computer. If you are more familiar with Microsoft Windows you can think of a symbolic link as a shortcut in Linux. In Linux and Unix symbolic links are created with the ln command. In the Windows command line you can use the mklink command to create symbolic link from the command line. Источник: computerhope.com Альтернативное название soft link (мягкая/гибкая ссылка) или symlink (симлинк); символическая ссылка — это файл, который связывается с другим файлом или директорией используя путь (адрес места расположения) последнего. В отличие от жёсткой ссылки, символическая ссылка может ссылаться на любой файл или директорию, находящуюся на любом компьютере. Если вы хорошо знакомы с Microsoft Windows, то вы можете думать о символических ссылках как о ярлыках в Linux. В Linux и Unix символические ссылки создаются с помощью команды ln. В командной строке Windows вы можете использовать команду mklink для создания символической ссылки через командную строку.
Иными словами символическая ссылка ссылается на адрес файла, а не индекс файла.
Поэкспериментируем ...
Если мы перенесём (удалим из текущей директории) символическую ссылку soft-link.txt, то это никак не отразится на исходном файле source.txt, однако при попытке открыть ссылку будет показываться сообщение о том, что связь нарушена и предлагаться удалить эту битую ссылку. А вот если мы перенесём (удалим из текущей директории) исходный файл source.txt, то файл soft-link.txt (наша символическая ссылка) станет пустым; однако, если мы создадим новый файл с таким же именем как и исходный файл (source.txt) в этой же директории, то синхронизация восстановится и будет работать.

Как-то так ...

Комментариев нет:

Отправить комментарий