Quelle est la différence entre les chemins absolus / canoniques / relatifs ?
Je suppose que l'absolu commence par un /
. Peut-il contenir /../
?
Un chemin canonique est-il différent d'un chemin absolu en ce sens qu'il ne peut pas contenir /../
?
Est foo
un chemin relatif ?
Googling posix canonical path
n'est pas apparu beaucoup... Quelles sont les références POSIX pour ces termes ?
Réponse acceptée :
POSIX définit le "chemin d'accès absolu" comme suit :
Un nom de chemin commençant par un seul ou plus de deux caractères
et "chemin relatif" comme suit :
Un nom de chemin ne commençant pas par un caractère
.
C'est tout ce qu'il y a à faire pour les chemins relatifs et absolus.
Les chemins canoniques ne sont pas définis dans POSIX, mais le terme fait généralement référence à des chemins comparables, c'est-à-dire si vous prenez deux chemins vers un objet du système de fichiers et que vous les convertissez en forme canonique, le résultat devrait être identique si et seulement si les deux objets du système de fichiers sont identiques. Cela implique de supprimer « .. » comme vous le mentionnez, mais cela signifie également résoudre les liens symboliques; donc un chemin canonique pourrait être défini comme
Un nom de chemin dont les composants sont tous de vrais répertoires ou fichiers, à l'exception de "." et "..", et dont les barres obliques ne sont pas répétées
En termes POSIX, un nom de chemin canonique est effectivement un nom de chemin résolu (tant que vous acceptez que les noms de chemin canoniques ne peuvent être déterminés que pour les objets du système de fichiers qui existent).
Notez que cela ne fonctionne que parce que les répertoires liés en dur ne sont pas autorisés…
Alors pour répondre à vos questions :
- un chemin absolu peut contenir
/../
; - un chemin canonique ne peut pas contenir
/../
, il ne peut pas non plus contenir/./
,//
(sauf sans doute en première position), ou des liens symboliques ; foo
est un chemin relatif.
(De manière pédante, ce sont tous des noms de chemin , pas seulement des chemins.)