Как создавать символические ссылки в 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 лучшим выбором даже для удаления ссылок.
-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 и легко управлять ими.
Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.