GNU/Linux >> Tutoriels Linux >  >> Linux

Chemins absolus / canoniques / relatifs ?

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.)


Linux
  1. Zsh/bash :développer les chemins relatifs dans les arguments de commande à l'aide des règles de structure de répertoire logique avant l'exécution ?

  2. Différence entre les chemins absolus et relatifs sous Linux

  3. Comment exclure les chemins absolus pour tar ?

  4. Comment déplacer un lien symbolique relatif ?

  5. Déterminer si le chemin relatif ou absolu dans le programme shell

Naviguer dans le système de fichiers avec des chemins relatifs sur la ligne de commande

Comment puis-je échapper aux espaces dans les chemins pour Scp sous Linux ?

Chemin absolu ou relatif sous Linux :quelle est la différence ?

Chemins par défaut Nginx et Apache

Comment voir le chemin absolu complet d'un lien symbolique

Tarez un répertoire, mais ne stockez pas les chemins absolus complets dans l'archive