Поиск по сайту:

Как создавать символические ссылки в Linux [Полное руководство]


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

Что такое символическая ссылка в Linux и почему она используется?

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

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

Если вы используете команду ls с опцией -l, символическая ссылка выглядит следующим образом:

lrwxrwxrwx 1 abhishek abhishek 23 Jul  2 08:51 link_prog -> newdir/test_dir/prog.py

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

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

Теперь, когда вы немного знаете о символических ссылках, давайте посмотрим, как их создавать.

Как создать символическую ссылку в Linux

Чтобы создать символическую ссылку на целевой файл по имени ссылки, вы можете использовать команду ln с опцией -s следующим образом:

ln -s target_file link_name

Здесь важна опция -s. Он определяет, что ссылка является мягкой ссылкой. Если вы его не используете, будет создана жесткая ссылка. Я объясню разницу между мягкими и жесткими ссылками в другой статье.

Как перейти по символической ссылке

Чтобы узнать, на какой реальный файл на самом деле указывает ссылка, используйте команду realpath:

realpath link_name

Есть и другие способы перейти по мягкой ссылке на исходный файл, но Realpath — самый простой.

Как удалить символическую ссылку

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

rm link_name

Удаление ссылки не приведет к удалению исходного файла, на который она ссылается.

Вы также можете удалить несколько символических ссылок одной командой:

rm link1 link2

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

💡
Если вы хотите вывести список символических ссылок с помощью команды find, вы можете использовать опцию -type l.

Что следует помнить о символических ссылках

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

Изменения, внесенные в ссылку, отражаются в исходном файле.

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

У меня есть файл prog.py в newdir/test_dir. Он имеет следующие атрибуты:

-rw-r--r-- 1 abhishek abhishek 163 Apr 13 15:07 newdir/test_dir/prog.py

Теперь я создам мягкую ссылку на этот файл в моем текущем каталоге:

ln -s newdir/test_dir/prog.py link_prog

Вот атрибуты вновь созданной ссылки:

lrwxrwxrwx 1 abhishek abhishek 23 Jul  2 08:51 link_prog -> newdir/test_dir/prog.py

Обратите внимание на l (это L, а не один) в начале строки? Если вы знакомы с правами доступа к файлам в Linux, вы знаете, что буква «l» означает ссылку и, таким образом, говорит вам, что этот файл на самом деле является ссылкой. Чтобы освежить вашу память, – означает файл, а d – каталог.

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

touch link_prog 

ls -l newdir/test_dir/prog.py 

-rw-r--r-- 1 abhishek abhishek 163 Jul  2 10:04 newdir/test_dir/prog.py

Это ссылка на файл или каталог? Вы можете не знать!

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

Вы можете создавать ссылки на несуществующий файл или каталог.

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

Вы получите сообщение об ошибке только при попытке получить доступ к целевому файлу либо по ссылке, либо самостоятельно. Однако команда ls все равно будет работать.

ln -s non_existant_dir link_dir
less link_dir
link_dir: No such file or directory

Символические ссылки создаются с разрешением 777, но это ничего не значит.

Вы заметили права доступа к файлу по символической ссылке? Символические ссылки всегда создаются с разрешением 777 (rwxrwxrwx). Для обычного файла это будет означать, что любой может получить доступ к файлу. Но это не относится к ссылкам.

lrwxrwxrwx 1 abhishek abhishek 23 Jul  2 08:51 link_prog -> newdir/test_dir/prog.py

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

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

Вы можете создать ссылку на ссылку, или цепную символическую ссылку.

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

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

Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.

Статьи по данной тематике: