Существует правило , нет такого понятия , как в файл (это утверждение означает , что там может быть больше , чем один в целом, поэтому использование определенного артикля не подходит). An - это любой путь, начинающийся с корня "/" и обозначающий файл без неоднозначности независимо от рабочего каталога (см., Например, википедию ). absolute path
absolute 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
на вызов без опции, возвращающей значение символической ссылки.