Как правило, в файле не существует такой вещи, как the absolute path
(это утверждение означает, что в общем случае их может быть несколько), следовательно, использование определенной статьи the не подходит)absolute path
- это любой путь, начинающийся с корня "/" и обозначающий файл без неоднозначности независимо от рабочего каталога (см., Например, wikipedia ).
A relative path
путь, который нужно интерпретировать, начиная с другого каталога.Это может быть рабочий каталог, если это relative path
, которым манипулирует приложение (хотя и не обязательно).Когда он находится в символьной ссылке в каталоге, он, как правило, должен относиться к этому каталогу (хотя пользователь может иметь в виду иное использование).
Следовательно, абсолютный путь - это просто путь относительнокорневой каталог.
Путь (абсолютный или относительный) может содержать или не содержать символические ссылки.Если это не так, это также несколько непроницаемо для изменений в структуре связи, но это не обязательно требуется или даже желательно.Некоторые люди называют canonical path
(или canonical file name
или resolved path
) absolute path
, в котором все символические ссылки были разрешены, т. Е. Заменены путем на путь, куда они ссылаются.Команды realpath
и readlink
обе ищут канонический путь, но только у realpath
есть возможность получить абсолютный путь, не удосуживаясь разрешить символические ссылки (наряду с несколькими другими опциями, чтобы получить различные виды путей, абсолютные илиотносительно некоторого каталога).
Это требует нескольких замечаний:
- символические ссылки могут быть разрешены, только если все, на что они должны ссылаться, уже создано, что, очевидно, не всегдадело.Команды
realpath
и readlink
имеют опции для учета этого. - каталог на пути может впоследствии стать символической ссылкой, что означает, что путь больше не является
canonical
.Следовательно, эта концепция зависит от времени (или среды). - даже в идеальном случае, когда все символические ссылки могут быть разрешены, в файле может быть еще более одного
canonical path
по двум причинам: - раздел, содержащий файл, возможно, был смонтирован одновременно (
ro
) в нескольких точках монтирования. - могут быть жесткие ссылки на файл, то есть, по сути, файл существует в нескольких разных каталогах.
Следовательно, даже при гораздо более ограничительном определении canonical path
может быть несколько канонических путей к файлу.Это также означает, что квалификатор canonical
несколько неадекватен, поскольку обычно подразумевает понятие уникальности.
Это расширяет краткое обсуждение темы в ответе на другой похожий вопрос на Bash: получить абсолютныйотносительный путь
Мой вывод таков, что realpath
лучше спроектирован и гораздо более гибок, чем readlink
.Единственное использование readlink
, которое не охватывается realpath
, - это вызов без опции, возвращающий значение символической ссылки.