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