Символическая ссылка, также известная как символическая или программная ссылка , представляет собой специальный тип файла, который просто указывает на другой файл или каталог, как ярлыки в 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 здесь важна. Определяет, что ссылка является мягкой ссылкой. Если вы не используете его, он создаст жесткую ссылку . Я объясню разницу между мягкими ссылками и жесткими ссылками в другой статье.
Что нужно помнить о символических ссылках
Символические ссылки иногда могут сбивать с толку, поэтому следует помнить о нескольких вещах.
Изменения, внесенные в ссылку, отражаются в исходном файле.
В этом и заключается вся цель ссылок. Вы получаете доступ к целевому файлу, перейдя по ссылке. Вы можете внести изменения в целевой файл по ссылкам. Давайте посмотрим на примере.
У меня есть файл 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 и легко управлять ими.