Команда Linux realpath

Linux 命令大全Справочник команд Linux


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: Получить абсолютный путь к файлу

Пример

$ realpath example.txt
/home/user/documents/example.txt

Пример 2: Разыменовать символические ссылки

Предположим/usr/bin/pythonявляется символической ссылкой, указывающей на/usr/bin/python3.8символическая ссылка:

Пример

$ realpath /usr/bin/python
/usr/bin/python3.8

Пример 3: Обработка несуществующего пути

Пример

$ realpath -m /nonexistent/path
/nonexistent/path

Пример 4: Получить относительный путь

Пример

$ realpath --relative-to=/home/user /home/user/documents/file.txt
documents/file.txt

Пример 5: Обработка нескольких файлов пакетно

Пример

$ realpath file1.txt file2.txt dir/
/home/user/file1.txt
/home/user/file2.txt
/home/user/dir

Практические сценарии применения

Сценарий 1: Получить абсолютный путь текущего скрипта в скрипте

Пример

#!/bin/bash
SCRIPT_PATH=$(realpath "$0")
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
echo "Каталог, в котором находится скрипт:$SCRIPT_DIR"

Сценарий 2: Сравнить, указывают ли два пути на одно и то же место

Пример

path1=$(realpath "/path/to/link")
path2=$(realpath "/actual/path")
if [ "$path1" = "$path2" ]; then
    echo "Оба пути указывают на одно и то же место"
fi

Сценарий 3: Нормализация путей, введённых пользователем

Пример

read -p "Пожалуйста, введите путь к файлу: " user_path
normalized_path=$(realpath -m "$user_path")
echo "Нормализованный путь:$normalized_path"

Часто задаваемые вопросы (FAQ)

Вопрос 1: В чём разница между realpath и readlink?

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

Вопрос 2: Почему в моей системе нет команды realpath?

realpath входит в состав GNU coreutils, но в некоторых урезанных дистрибутивах Linux он может быть не предустановлен. Его можно получить, установив пакет coreutils:

Пример

# Debian/Ubuntu
sudo apt install coreutils

# RHEL/CentOS
sudo yum install coreutils

Вопрос 3: Как реализовать аналогичную функциональность в системах, которые не поддерживают realpath?

Можно использовать комбинацию команд:

Пример

# Получить абсолютный путь
readlink -f /path/to/file

# Или
(cd /path/to/file && pwd -P)

Рекомендации по лучшим практикам

  1. Всегда используйте абсолютные пути в скриптах: чтобы избежать проблем с путями, вызванных изменениями рабочего каталога
  2. Сначала нормализуйте пути при обработке пользовательского ввода: чтобы предотвратить атаки с внедрением пути
  3. Проверьте, существует ли путь: используйте-eопцию, чтобы убедиться, что путь корректен
  4. Учитывайте влияние символических ссылок: четко определите, нужно ли разрешать символические ссылки
  5. Обрабатывайте пути, содержащие специальные символы, такие как пробелы: всегда заключайте переменные путей в кавычки

Итог

realpath — это простой, но мощный инструмент обработки путей, особенно подходящий для использования в сценарном программировании и системном администрировании. Из этой статьи вы должны были освоить:

  • Основные функции и синтаксис realpath
  • Конкретное применение различных опций
  • Практические сценарии применения и пример кода
  • Решения типичных проблем
  • Лучшие практики использования

Теперь вы можете начать применять команду realpath в своих проектах, чтобы сделать работу с путями более надёжной и безопасной!


Linux 命令大全Справочник команд Linux

Другие расширения