readlink
Что делает команда readlink в Linux
Команда readlink в Linux используется для отображения фактического пути, на который указывает символическая ссылка. Когда системный администратор или разработчик хочет узнать, куда ссылается симлинк, именно эта утилита помогает получить точный путь. Команда возвращает значение, содержащее путь назначения, или, при определённых опциях, абсолютный путь.
В базовом виде команда выглядит просто:
readlink symlink_name
Если файл symlink_name указывает на другой путь, то в терминале будет показано его значение. Например:
ln -s /usr/local/bin/python3 /usr/bin/python
readlink /usr/bin/python
Результат:
/usr/local/bin/python3
Это пример того, как команда readlink в Linux помогает точно определить назначение символьной ссылки.
readlink вместе с параметром -f, чтобы всегда получать полный путь к файлуОсновные параметры команды readlink в Linux
Команда readlink в Linux поддерживает несколько параметров, которые позволяют гибко управлять выводом.
Параметр -f (или —canonicalize)
Параметр -f используется для вывода канонического пути, то есть полного абсолютного пути к файлу или директории, без относительных ссылок и символических переходов.
Пример:
readlink -f /usr/bin/python
Результат может быть таким:
/usr/local/bin/python3.10
Это особенно полезно, когда вы хотите узнать конечный реальный путь, а не только первый уровень символической ссылки.
Совет: при написании bash-скриптов для установки программ лучше использовать readlink -f "$0" — это поможет получить абсолютный путь к самому скрипту, независимо от того, где он запущен.
Параметр -e (или —canonicalize-existing)
Если использовать -e, команда readlink в Linux возвращает полный путь только в случае, если все компоненты пути существуют. Это помогает избежать ошибок при обращении к несуществующим файлам.
Пример:
readlink -e /tmp/nonexistent
Если файл отсутствует, команда не выведет ничего и вернёт ненулевой код выхода.
Параметр -m (или —canonicalize-missing)
Опция -m похожа на -f, но в отличие от неё, не требует, чтобы все части пути реально существовали. Она может использоваться для вычисления пути, даже если некоторые директории ещё не созданы.
Пример:
readlink -m /home/user/newfolder/file.txt
Даже если newfolder отсутствует, команда вернёт ожидаемый путь /home/user/newfolder/file.txt.
Параметр -n (или —no-newline)
По умолчанию команда добавляет символ новой строки в конце вывода. Если вы хотите использовать результат команды readlink в Linux в одной строке, например, в скриптах, применяйте флаг -n.
readlink -n symlink
Это удобно, когда вывод команды передаётся другой программе или используется в условии.
Параметр -v (или —verbose)
Параметр -v включает подробный вывод. Команда readlink в Linux покажет не только результат, но и дополнительную информацию о процессе разрешения символической ссылки.
readlink -v /usr/bin/python
Это бывает полезно при отладке сложных цепочек ссылок.
Параметр -q (или —quiet)
Этот параметр отключает сообщения об ошибках. При работе с большим количеством ссылок, где некоторые могут быть повреждены, -q помогает избежать лишнего шума в выводе.
readlink -q /path/to/link
Команда просто пропустит несуществующие пути.
Примеры практического использования команды readlink в Linux
Чтобы лучше понять, как применять команду readlink в Linux на практике, рассмотрим несколько примеров.
Пример 1: Получение пути исполняемого файла
Допустим, вы хотите узнать, где находится бинарный файл, связанный с командой bash.
readlink -f $(which bash)
Вы получите полный путь, например /usr/bin/bash. Это помогает убедиться, какой именно файл используется в текущей системе.
Пример 2: Использование в bash-скриптах
Внутри скриптов команда readlink в Linux часто применяется для определения собственного расположения:
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
echo "Скрипт находится в: $SCRIPT_DIR"
Это удобно при копировании или запуске скриптов из разных директорий.
Пример 3: Проверка целостности символических ссылок
Если нужно быстро проверить, не “сломаны” ли ссылки, можно использовать цикл:
for link in $(find /usr/bin -type l); do
if ! readlink -e "$link" > /dev/null; then
echo "Битая ссылка: $link"
fi
done
Этот подход помогает системным администраторам находить повреждённые симлинки в системе.
Пример 4: Комбинация readlink с другими утилитами
Команда readlink в Linux часто используется вместе с find, xargs, awk или sed. Например, чтобы вывести все ссылки и их реальные пути:
find /etc -type l -print0 | xargs -0 -n1 readlink -f
Это позволяет быстро просмотреть всю структуру симлинков в системе.
Дополнительные технические детали
Команда readlink в Linux является частью пакета GNU coreutils, что делает её доступной практически во всех дистрибутивах: Ubuntu, Debian, CentOS, Fedora и других. Она работает с системными вызовами readlink() и realpath(), которые напрямую обращаются к файловой системе.
Коды возврата команды:
0— успешное выполнение,1— ошибка при чтении ссылки,2— некорректные аргументы.
Если нужно проверить успешность выполнения:
if readlink -f /usr/bin/python > /dev/null; then
echo "Ссылка работает"
else
echo "Ошибка при чтении"
fi
Когда стоит использовать команду readlink
- При разработке системных скриптов, где требуется знать точное местоположение исполняемых файлов.
- При диагностике путей, когда симлинки ведут через несколько уровней.
- При настройке окружений и контейнеров, где важно понимать, какие реальные файлы используются внутри образов.
readlink -f — это помогает избежать путаницы между относительными путями внутри контейнера и на хосте.Таким образом, команда readlink в Linux — это мощный инструмент для анализа и управления символическими ссылками. Она незаменима при написании автоматизационных сценариев, администрировании систем и отладке сложных структур файлов. Зная ключевые параметры (-f, -e, -m, -n, -v, -q), можно гибко адаптировать вывод под любые задачи.