Geralmente não há tal coisa como o absolute path
para um arquivo (o que significa demonstração de que pode haver mais de um em geral, daí o uso do artigo definido o não é o caso). An absolute path
é qualquer caminho que começa na raiz "/" e designa um arquivo sem ambiguidade, independentemente do diretório de trabalho (veja, por exemplo, wikipedia ).
A relative path
é um caminho que deve ser interpretado a partir de outro diretório. Pode ser o diretório de trabalho se for umrelative path
sendo manipulado por um aplicativo (embora não necessariamente). Quando está em um link simbólico em um diretório, geralmente se destina a ser relativo a esse diretório (embora o usuário possa ter outros usos em mente).
Portanto, um caminho absoluto é apenas um caminho relativo ao diretório raiz.
Um caminho (absoluto ou relativo) pode ou não conter links simbólicos. Caso contrário, também é um pouco impermeável a alterações na estrutura de ligação, mas isso não é necessariamente necessário ou mesmo desejável. Algumas pessoas chamam canonical path
(ou canonical file name
ou resolved path
) um absolute path
em que todos os links simbólicos foram resolvidos, ou seja, foram substituídos por um caminho para onde quer que eles estejam. Os comandos realpath
e os readlink
dois procuram um caminho canônico, mas só realpath
têm uma opção para obter um caminho absoluto sem se preocupar em resolver links simbólicos (junto com várias outras opções para obter vários tipos de caminhos, absolutos ou relativos a algum diretório).
Isso exige várias observações:
- links simbólicos só podem ser resolvidos se o que eles deveriam vincular já estiver criado, o que obviamente nem sempre é o caso. Os comandos
realpath
e readlink
tem opções para explicar isso.
- posteriormente, um diretório em um caminho pode se tornar um link simbólico, o que significa que o caminho não é mais
canonical
. Portanto, o conceito depende do tempo (ou do ambiente).
- mesmo no caso ideal, quando todos os links simbólicos podem ser resolvidos, ainda pode haver mais de um
canonical path
para um arquivo, por dois motivos:
- a partição que contém o arquivo pode ter sido montada simultaneamente (
ro
) em vários pontos de montagem.
- pode haver links físicos para o arquivo, significando essencialmente que o arquivo existe em vários diretórios diferentes.
Portanto, mesmo com a definição muito mais restritiva de canonical path
, pode haver vários caminhos canônicos para um arquivo. Isso também significa que o qualificador canonical
é um tanto inadequado, pois geralmente implica uma noção de singularidade.
Isso expande uma breve discussão sobre o tópico em uma resposta a outra pergunta semelhante em Bash: recuperar o caminho absoluto dado
Minha conclusão é que realpath
é melhor projetado e muito mais flexível do que readlink
. O único uso readlink
disso não coberto realpath
é a chamada sem opção retornando o valor de um link simbólico.