Символические ссылки в Unix / Linux

Различные файловые системы во вселенной UNIX / Linux допускают различные записи, такие как обычные файлы, каталоги, сокеты, именованные каналы и ссылки. В этой статье я объясню вам, что такое ссылки, какие типы ссылок существуют, как создать символическую ссылку и как легко обнаружить неработающие символические ссылки. Ссылки позволяют иметь несколько точек входа в файловую систему, позволяя иметь намного меньше копий (иногда только одну), но сохраняя гибкость, имея несколько способов достижения заданного

Различные файловые системы во вселенной UNIX / Linux допускают различные записи, такие как обычные файлы, каталоги, сокеты, именованные каналы и ссылки. В этой статье я объясню вам, что такое ссылки, какие типы ссылок существуют, как создать символическую ссылку и как легко обнаружить неработающие символические ссылки. Ссылки позволяют иметь несколько точек входа в файловую систему, позволяя иметь намного меньше копий (иногда только одну), но при этом сохраняя гибкость, имея несколько способов доступа к заданному файлу.

Связывание записей

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

Инструмент ln входит в список необходимого программного обеспечения в Unix / Linux. В Debian GNU / Linux и Ubuntu он является частью пакета coreutils .

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

Жесткие ссылки Мягкая ссылка (символическая ссылка)


Цель должна существовать Цель может уже существовать, но не обязательно Разрешено только в файловых системах Разрешено между разными файловыми системами Ссылки непосредственно на место хранения файла Ссылки на запись в таблице файловой системы (узел) Удаление ссылки означает удаление всего файла Удаление ссылки означает удаление ссылки на узел, а не сам файл

Выполнение команды ln без параметров создает жесткую ссылку от источника к месту назначения. Вместо этого с помощью параметра -s создается символическая ссылка. -s - это короткое имя параметра, а --symbolic - более длинное имя. Ссылка будет создана в текущем каталоге файловой системы в момент ее создания. Разработчики просто используют термин символическая ссылка. В общем, назовите это так:

 $ ln -s [target] [link_name] 

target - это файл или каталог, на который нужно link_name ссылку, а link_name - это имя ссылки, которая должна ссылаться на цель. Например, этот вызов создает символическую ссылку от link_to_python к /usr/bin/python :

Пример 1: Создание символической ссылки

 $ ln -s /usr/bin/python link_to_python 
 $ ls -la link_to_python 
 lrwxrwxrwx 1 frank frank 15 Oct 5 14:25 link_to_python -> /usr/bin/python 

Чтобы увидеть, что ln , полезная опция -v ( --verbose для более длинной опции). Это дает вам дополнительную информацию о действии.

Пример 2: Создание символической ссылки с дополнительной информацией

 $ ln -sv /usr/bin/python link_to_python 
 link_to_python -> /usr/bin/python 

Как видите, вывод команды отображает созданную новую ссылку.

Сценарии использования

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

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

Что, если вы удалите файл, на который указывает символическая ссылка? Мы называем эти ссылки с несуществующей «целью» «мертвыми». Для обнаружения таких случаев весьма полезна команда find. Поэтому в игру вступают -L и -type l Флаг -L find следовать символическим ссылкам, в то время как -type l будет соответствовать только символическим ссылкам.

В примере 3 текущий каталог содержит два файла с именами auto и backup , а также две символические ссылки - data указывающие на auto , и generic указывающие на files . К сожалению, файл / каталог files

Используя команду find , мы можем проверить ссылки и вывести их имена в случае, если цель ссылки не существует. В нашем случае это символическая ссылка с именем generic указывающая на несуществующие files

Пример 3: Обнаружение битых ссылок с помощью find

 $ ls -la 
 total 4 
 drwxr-xr-x 2 frank frank 1024 Oct 5 13:36 . 
 drwxrwxrwt 44 root root 3072 Oct 5 13:35 .. 
 -rw-r--r-- 1 frank frank 0 Oct 5 13:34 auto 
 -rw-r--r-- 1 frank frank 0 Oct 5 13:34 backup 
 lrwxrwxrwx 1 frank frank 1 Oct 5 13:35 data -> auto 
 lrwxrwxrwx 1 frank frank 1 Oct 5 13:35 generic -> files 
 $ find -L . -type l 
 ./generic 

В качестве альтернативы вам может понравиться команда symlinks . Это нестандартный пакет, доступный как для Debian GNU / Linux, так и для Ubuntu. С двумя параметрами -s и -v symlinks обнаруживают записи. Как показано в примере 4 ниже, ссылки без действительных целей классифицируются как висячие.

Пример 4: Обнаружение битых ссылок с помощью symlinks

 $ symlinks -sv . 
 dangling: /directory/generic -> files 
 relative: /directory/data -> auto 

Заключение

В концепции символических ссылок нет большой загадки. Создание этих ссылок может упростить использование программного обеспечения и помогает тестировать его разные версии в одной и той же системе. Имейте в виду, чтоLinux Professional Institute (LPI) задаст вам вопросы об этом во время сертификации для LPI1.

Благодарности

Автор благодарит Герольда Рупрехта за поддержку и критику при подготовке этой статьи.

comments powered by Disqus