Как найти цель символической ссылки

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом руководстве вы узнаете, как найти цель символической ссылки в системе Linux. Символические ссылки (англ. symbolic links, также известные как symlinks) — это специальные типы файлов, которые служат указателями на другие файлы или каталоги. Они обычно используются в системах Linux для создания ярлыков, организации файлов и управления версиями программного обеспечения.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/ln("Link Creating") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/find("File Searching") subgraph Lab Skills linux/ls -.-> lab-392854{{"Как найти цель символической ссылки"}} linux/ln -.-> lab-392854{{"Как найти цель символической ссылки"}} linux/cat -.-> lab-392854{{"Как найти цель символической ссылки"}} linux/cd -.-> lab-392854{{"Как найти цель символической ссылки"}} linux/find -.-> lab-392854{{"Как найти цель символической ссылки"}} end

Понимание символических ссылок

Символические ссылки (англ. symbolic links, symlinks) — это специальные файлы в Linux, которые указывают на другие файлы или каталоги. Они работают аналогично ярлыкам в других операционных системах, но более мощны и интегрированы в файловую систему.

Начнем с изучения символических ссылок, которые были созданы для этого руководства. Сначала перейдите в проектную директорию:

cd ~/project/symlink-tutorial

Теперь выведем список файлов в этой директории, чтобы посмотреть, что у нас есть:

ls -la

Вы должны увидеть вывод, похожий на следующий:

total 20
drwxr-xr-x 3 labex labex 4096 Jul 15 10:00 .
drwxr-xr-x 3 labex labex 4096 Jul 15 10:00 ..
lrwxrwxrwx 1 labex labex   12 Jul 15 10:00 broken-link.txt -> ../nonexistent-file.txt
lrwxrwxrwx 1 labex labex   13 Jul 15 10:00 dir-link -> test-directory
lrwxrwxrwx 1 labex labex   13 Jul 15 10:00 nested-link.txt -> simple-link.txt
-rw-r--r-- 1 labex labex   35 Jul 15 10:00 original.txt
lrwxrwxrwx 1 labex labex   10 Jul 15 10:00 passwd-link -> /etc/passwd
lrwxrwxrwx 1 labex labex   12 Jul 15 10:00 simple-link.txt -> original.txt
drwxr-xr-x 2 labex labex 4096 Jul 15 10:00 test-directory

Обратите внимание, что символические ссылки выглядят иначе в списке:

  • Они начинаются с l в правах доступа к файлу (первый столбец)
  • После их имен стоит стрелка (->), указывающая на их цель
  • Они обычно имеют права доступа lrwxrwxrwx

Рассмотрим файл simple-link.txt, который является символической ссылкой на original.txt. Вы можете просмотреть содержимое этой ссылки, используя команду cat:

cat simple-link.txt

Вывод:

This is the original file content.

Даже если вы обращаетесь к simple-link.txt, вы фактически видите содержимое original.txt. Вот как работают символические ссылки — они прозрачно перенаправляют доступ к своей цели.

Теперь попробуем также символическую ссылку на каталог:

ls -la dir-link

Вывод:

total 12
drwxr-xr-x 2 labex labex 4096 Jul 15 10:00 .
drwxr-xr-x 3 labex labex 4096 Jul 15 10:00 ..
-rw-r--r-- 1 labex labex   42 Jul 15 10:00 test-file.txt
lrwxrwxrwx 1 labex labex   16 Jul 15 10:00 relative-link.txt -> ../original.txt

Как вы можете видеть, когда вы выводите список содержимого dir-link, вы фактически видите содержимое test-directory, на который она указывает.

Использование команды ls для определения символических ссылок

Команда ls с определенными параметрами является одним из простейших способов определить символические ссылки и узнать, на что они указывают. Исследуем различные способы использования ls для этой цели.

Вывод списка с параметром -l

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

ls -l simple-link.txt

Вывод:

lrwxrwxrwx 1 labex labex 12 Jul 15 10:00 simple-link.txt -> original.txt

Стрелка (->) показывает, что simple-link.txt указывает на original.txt.

Вывод списка всех файлов с параметром -la

Совместное использование параметров -la выводит список всех файлов (включая скрытые) с подробной информацией:

ls -la

Это показывает все файлы в текущем каталоге, включая символические ссылки и их цели.

Вывод списка с цветовой кодировкой

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

ls --color=always

В выводе символические ссылки будут отображаться особым цветом.

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

Вы можете использовать команду find для вывода списка только символических ссылок в текущем каталоге:

find . -maxdepth 1 -type l

Вывод:

./broken-link.txt
./dir-link
./nested-link.txt
./passwd-link
./simple-link.txt

Эта команда выводит список всех символических ссылок в текущем каталоге (.) без перехода в подкаталоги (-maxdepth 1).

Проверка вложенной символической ссылки

Рассмотрим nested-link.txt, которая указывает на другую символическую ссылку:

ls -l nested-link.txt

Вывод:

lrwxrwxrwx 1 labex labex 13 Jul 15 10:00 nested-link.txt -> simple-link.txt

А simple-link.txt указывает на:

ls -l simple-link.txt

Вывод:

lrwxrwxrwx 1 labex labex 12 Jul 15 10:00 simple-link.txt -> original.txt

Таким образом, nested-link.txt указывает на simple-link.txt, которая в свою очередь указывает на original.txt. Это пример цепочки символических ссылок.

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

Самое простое использование readlink - это указать имя символической ссылки:

readlink simple-link.txt

Вывод:

original.txt

Это показывает, что simple-link.txt указывает на original.txt.

Чтение вложенных символических ссылок

Для вложенных символических ссылок базовая команда readlink возвращает только непосредственную цель:

readlink nested-link.txt

Вывод:

simple-link.txt

Для перехода по всей цепочке ссылок до конечной цели используйте параметр -f (follow - следовать):

readlink -f nested-link.txt

Вывод:

/home/labex/project/symlink-tutorial/original.txt

Это показывает полный путь к конечному целевому файлу.

Работа с относительными путями

Рассмотрим символическую ссылку с относительным путем:

ls -l test-directory/relative-link.txt

Вывод:

lrwxrwxrwx 1 labex labex 16 Jul 15 10:00 test-directory/relative-link.txt -> ../original.txt

Использование readlink с параметром -f разрешает относительный путь:

readlink -f test-directory/relative-link.txt

Вывод:

/home/labex/project/symlink-tutorial/original.txt

Работа с битыми ссылками

Иногда символические ссылки указывают на несуществующие файлы. Проверим нашу битую ссылку:

readlink broken-link.txt

Вывод:

../nonexistent-file.txt

Команда readlink по-прежнему показывает, на что указывает битая ссылка, даже если цель не существует.

Использование readlink -f с битой ссылкой попытается разрешить путь, но все равно укажет, что ссылка битая:

readlink -f broken-link.txt

Вывод:

/home/labex/project/nonexistent-file.txt

Команда readlink предлагает несколько полезных параметров:

  • -e: Возвращать канонизированный путь только если он существует
  • -m: Не разыменовывать символические ссылки, отображать путь символической ссылки даже если она указывает на несуществующий файл
  • -n: Не выводить символ новой строки
  • -v Verb: Подробный вывод

Пример использования параметра -e:

readlink -e broken-link.txt

Эта команда не даст вывода, так как целевой файл не существует.

Альтернативные методы для нахождения целей символических ссылок

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

Использование команды file

Команда file определяет тип файла, включая символические ссылки:

file simple-link.txt

Вывод:

simple-link.txt: symbolic link to original.txt

Это четко показывает, что simple-link.txt является символической ссылкой, указывающей на original.txt.

Попробуем использовать ее для ссылки на каталог:

file dir-link

Вывод:

dir-link: symbolic link to test-directory

Команда file работает как с ссылками на файлы, так и на каталоги.

Использование команды realpath

Команда realpath отображает разрешенный путь к файлу, что полезно для нахождения конечной цели символических ссылок:

realpath simple-link.txt

Вывод:

/home/labex/project/symlink-tutorial/original.txt

Это показывает абсолютный путь к целевому файлу.

Для вложенных ссылок realpath автоматически следует по всей цепочке:

realpath nested-link.txt

Вывод:

/home/labex/project/symlink-tutorial/original.txt

Использование команды stat

Команда stat предоставляет подробную информацию о файле, включая то, является ли он символической ссылкой:

stat simple-link.txt

Вывод (частичный):

  File: simple-link.txt -> original.txt
  Size: 12        	Blocks: 0          IO Block: 4096   symbolic link
...

Этот вывод показывает, что simple-link.txt является символической ссылкой, указывающей на original.txt.

Создание тестовой символической ссылки

Создадим новую символическую ссылку для практики:

ln -s /etc/hostname my-hostname

Это создает символическую ссылку с именем my-hostname, которая указывает на файл /etc/hostname.

Теперь используем изученные команды для проверки этой новой ссылки:

ls -l my-hostname

Вывод:

lrwxrwxrwx 1 labex labex 12 Jul 15 11:00 my-hostname -> /etc/hostname
readlink my-hostname

Вывод:

/etc/hostname
file my-hostname

Вывод:

my-hostname: symbolic link to /etc/hostname
cat my-hostname

Вывод (пример, ваше имя хоста может отличаться):

labex-ubuntu

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

Практические применения и продвинутое использование

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

Работа с глубоко вложенными символическими ссылками

Для глубоко вложенных ссылок (ссылка, указывающая на другую ссылку, которая, в свою очередь, указывает на еще одну ссылку и так далее), параметр -f команды readlink является обязательным:

## Create a chain of links
ln -s original.txt link1.txt
ln -s link1.txt link2.txt
ln -s link2.txt link3.txt

## Check the chain
readlink -f link3.txt

Вывод:

/home/labex/project/symlink-tutorial/original.txt

Поиск всех символических ссылок в каталоге

Для поиска всех символических ссылок в каталоге и его подкаталогах:

find /home/labex/project/symlink-tutorial -type l

Эта команда ищет все объекты типа l (символические ссылки) в указанном каталоге и его подкаталогах.

Поиск и просмотр целей символических ссылок

Для поиска всех символических ссылок и просмотра того, на что они указывают:

find /home/labex/project/symlink-tutorial -type l -ls

Эта команда комбинирует find с параметром -ls для предоставления подробного списка каждой символической ссылки.

Изменение файлов через символические ссылки

Когда вы изменяете файл через символическую ссылку, вы фактически изменяете целевой файл. Давайте продемонстрируем это:

## Display the original content
cat original.txt

Вывод:

This is the original file content.
## Append to the file through the symbolic link
echo "Line added through symlink." >> simple-link.txt

## Check the original file
cat original.txt

Вывод:

This is the original file content.
Line added through symlink.

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

Замена символических ссылок

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

## Create a new file
echo "This is a new target file." > new-target.txt

## Update the symlink
ln -sf new-target.txt simple-link.txt

## Check what the link points to now
readlink simple-link.txt

Вывод:

new-target.txt

Очистка

Давайте удалим файлы, которые мы создали на этом этапе:

rm link1.txt link2.txt link3.txt new-target.txt

Когда использовать символические ссылки

Символические ссылки полезны во многих ситуациях:

  • Создание ярлыков для часто используемых файлов или каталогов
  • Поддержка нескольких версий файлов или программного обеспечения
  • Создание более интуитивно понятных путей к файлам
  • Создание ссылок на конфигурационные файлы
  • Организация файлов на разных файловых системах

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

Резюме

В этом руководстве вы узнали, как найти цель символических ссылок в Linux с использованием различных методов:

  1. Использование команды ls -l для определения символических ссылок и просмотра их целей
  2. Использование команды readlink для вывода значения символической ссылки
  3. Использование readlink -f для перехода по всей цепочке символических ссылок до конечной цели
  4. Исследование альтернативных методов, таких как file, realpath и stat
  5. Работа с практическими примерами и сценариями продвинутого использования

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

Теперь у вас есть знания, которые позволяют уверенно определять, создавать и управлять символическими ссылками в вашей среде Linux.