A pathname beginning with a single or more than two <slash> characters
e "caminho relativo" da seguinte forma:
A pathname not beginning with a <slash> character.
Isso é tudo para caminhos relativos e absolutos.
Caminhos canônicos não são definidos em POSIX, mas o termo geralmente se refere a caminhos comparáveis, ie se você pegar dois caminhos para um objeto de sistema de arquivos e convertê-los em forma canônica, o resultado deve ser idêntico se e somente se os dois objetos do sistema de arquivos forem idênticos. Isso envolve remover “..” como você menciona, mas também significa resolver links simbólicos; então um caminho canônico poderia ser definido como
A pathname whose components are all real directories or files, excluding “.” and “..”, and whose slashes are not repeated
Em termos POSIX, um nome de caminho canônico é efetivamente um nome de caminho resolvido (desde que como você aceita que nomes de caminho canônicos só podem ser determinados para objetos do sistema de arquivos que existem).
Observe que isso só funciona porque os diretórios com hard-link não são permitidos ...
Então, responda suas perguntas:
- um caminho absoluto pode conter
/../
; - um caminho canônico não pode conter
/../
, nem pode conter/./
,//
(exceto indiscutivelmente na primeira posição) ou links simbólicos; -
foo
é um caminho relativo.
(Pedantemente, eles são todos caminhos nomes , não apenas caminhos.)