Existem três tipos de caminhos:
- caminhos relativos como
foo
,foo/bar
,../a
,.
. Eles não começam com/
e são relativos ao diretório atual do processo que faz uma chamada do sistema com esse caminho. - caminhos absolutos, como
/
,/foo/bar
ou///x
. Eles começam com 1, ou 3 ou mais/
, não são relativos, são pesquisados a partir do diretório raiz/
. - POSIX permite que
//foo
seja tratado especialmente, mas não especifica como. Alguns sistemas usam isso para casos especiais, como arquivos de rede . Tem que ser exatamente 2 barras.
Diferentemente do início, as sequências de barras agem como uma.
~
é especial apenas para o shell , ele é expandido pelo shell, não é especial para o sistema em todos. Como ele é expandido depende do shell. Shells fazem outras formas de expansão como globbing ( *.txt
) ou expansão variável /$foo/$bar
ou outras. No que diz respeito ao sistema ~foo
é apenas um caminho relativo como _foo
ou foo
.
Coisas a ter em conta:
-
foo/
não é o mesmo quefoo
. Ele está mais próximo defoo/.
thanfoo
(especialmente sefoo
for um symlink) para a maioria das chamadas de sistema na maioria dos sistemas (foo//
é o mesmo quefoo/
). -
a/b/../c
não é necessariamente igual aa/c
(por exemplo, sea/b
for um symlink). Melhor não é tratar..
especialmente. - geralmente é seguro considerar
a/././././b
o mesmo quea/b
.