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/barou///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
//fooseja 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 sefoofor um symlink) para a maioria das chamadas de sistema na maioria dos sistemas (foo//é o mesmo quefoo/). -
a/b/../cnão é necessariamente igual aa/c(por exemplo, sea/bfor um symlink). Melhor não é tratar..especialmente. - geralmente é seguro considerar
a/././././bo mesmo quea/b.