Команда Linux realpath
realpath — это практичный инструмент командной строки в системах Linux, используемый для получения абсолютного пути к файлу или каталогу (абсолютный путь — это полный путь, начинающийся с корневого каталога /). Он разрешает все символические ссылки и нормализует ссылки в пути к.(текущему каталогу) и..(родительскому каталогу).
Зачем нужен realpath
В повседневной работе мы часто сталкиваемся со следующими ситуациями:
- Нужно получить абсолютный путь к скрипту или файлу конфигурации
- При работе с путями, содержащими символические ссылки, нужно знать фактическое местоположение, на которое они указывают
- Нормализовать пути, введённые пользователем, чтобы устранить ссылки на относительные пути
- Обеспечить точность путей при написании сценариев
Команда realpath предназначена специально для решения этих проблем.
Базовый синтаксис
realpath [选项] 文件或目录...
Объяснение общих параметров
| Опция | Описание |
|---|---|
-eили--canonicalize-existing |
Разрешать только пути, которые действительно существуют (поведение по умолчанию) |
-mили--canonicalize-missing |
Разрешать путь, даже если он не существует |
-Lили--logical |
При разрешении символических ссылок не следовать по символическим ссылкам |
-Pили--physical |
При разрешении символических ссылок следовать всем символическим ссылкам (поведение по умолчанию) |
-qили--quiet |
Тихий режим, не отображать сообщения об ошибках |
--relative-to=DIR |
Возвращать путь относительно указанного каталога |
--relative-base=DIR |
Нормализовать только часть пути, находящуюся в указанном каталоге |
-sили--stripили--no-symlinks |
Не разыменовывать символические ссылки |
-zили--zero |
Разделять вывод символами NUL вместо символов новой строки |
Примеры использования
Пример 1: Получить абсолютный путь к файлу
Пример
/home/user/documents/example.txt
Пример 2: Разыменовать символические ссылки
Предположим/usr/bin/pythonявляется символической ссылкой, указывающей на/usr/bin/python3.8символическая ссылка:
Пример
/usr/bin/python3.8
Пример 3: Обработка несуществующего пути
Пример
/nonexistent/path
Пример 4: Получить относительный путь
Пример
documents/file.txt
Пример 5: Обработка нескольких файлов пакетно
Пример
/home/user/file1.txt
/home/user/file2.txt
/home/user/dir
Практические сценарии применения
Сценарий 1: Получить абсолютный путь текущего скрипта в скрипте
Пример
SCRIPT_PATH=$(realpath "$0")
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
echo "Каталог, в котором находится скрипт:$SCRIPT_DIR"
Сценарий 2: Сравнить, указывают ли два пути на одно и то же место
Пример
path2=$(realpath "/actual/path")
if [ "$path1" = "$path2" ]; then
echo "Оба пути указывают на одно и то же место"
fi
Сценарий 3: Нормализация путей, введённых пользователем
Пример
normalized_path=$(realpath -m "$user_path")
echo "Нормализованный путь:$normalized_path"
Часто задаваемые вопросы (FAQ)
Вопрос 1: В чём разница между realpath и readlink?
readlinkОна в основном используется для чтения цели, на которую указывает символическая ссылка, тогда какrealpathобеспечивает более полные возможности разрешения путей, включая обработку ссылок на относительные пути и нормализацию форматов путей.
Вопрос 2: Почему в моей системе нет команды realpath?
realpath входит в состав GNU coreutils, но в некоторых урезанных дистрибутивах Linux он может быть не предустановлен. Его можно получить, установив пакет coreutils:
Пример
sudo apt install coreutils
# RHEL/CentOS
sudo yum install coreutils
Вопрос 3: Как реализовать аналогичную функциональность в системах, которые не поддерживают realpath?
Можно использовать комбинацию команд:
Пример
readlink -f /path/to/file
# Или
(cd /path/to/file && pwd -P)
Рекомендации по лучшим практикам
- Всегда используйте абсолютные пути в скриптах: чтобы избежать проблем с путями, вызванных изменениями рабочего каталога
- Сначала нормализуйте пути при обработке пользовательского ввода: чтобы предотвратить атаки с внедрением пути
- Проверьте, существует ли путь: используйте
-eопцию, чтобы убедиться, что путь корректен - Учитывайте влияние символических ссылок: четко определите, нужно ли разрешать символические ссылки
- Обрабатывайте пути, содержащие специальные символы, такие как пробелы: всегда заключайте переменные путей в кавычки
Итог
realpath — это простой, но мощный инструмент обработки путей, особенно подходящий для использования в сценарном программировании и системном администрировании. Из этой статьи вы должны были освоить:
- Основные функции и синтаксис realpath
- Конкретное применение различных опций
- Практические сценарии применения и пример кода
- Решения типичных проблем
- Лучшие практики использования
Теперь вы можете начать применять команду realpath в своих проектах, чтобы сделать работу с путями более надёжной и безопасной!
Другие расширения
Справочник команд Linux