Generalmente, no hay tal cosa como la absolute path
de un archivo (este medio declaración de que no puede haber más de uno, en general, de ahí el uso del artículo definido el no es el caso). Una absolute path
es cualquier ruta que comienza desde la raíz "/" y designa un archivo sin ambigüedad independientemente del directorio de trabajo (ver, por ejemplo, wikipedia ).
A relative path
es una ruta que se debe interpretar a partir de otro directorio. Puede ser el directorio de trabajo si está relative path
siendo manipulado por una aplicación (aunque no necesariamente). Cuando está en un enlace simbólico en un directorio, generalmente está destinado a ser relativo a ese directorio (aunque el usuario puede tener otros usos en mente).
Por lo tanto, una ruta absoluta es solo una ruta relativa al directorio raíz.
Una ruta (absoluta o relativa) puede o no contener enlaces simbólicos. Si no lo hace, también es algo impermeable a los cambios en la estructura de enlace, pero esto no es necesariamente necesario ni deseable. Algunas personas llaman canonical path
(o canonical file name
o resolved path
) una absolute path
en la que se han resuelto todos los enlaces simbólicos, es decir, han sido sustituidos por un camino a la Whetever que enlazan a. Los comandos realpath
y readlink
ambos buscan una ruta canónica, pero solo realpath
tiene una opción para obtener una ruta absoluta sin molestarse en resolver enlaces simbólicos (junto con varias otras opciones para obtener varios tipos de rutas, absolutas o relativas a algún directorio).
Esto requiere varios comentarios:
- los enlaces simbólicos solo pueden resolverse si lo que se supone que deben vincular ya está creado, lo que obviamente no siempre es así. Los comandos
realpath
y readlink
tienen opciones para dar cuenta de eso.
- un directorio en una ruta puede luego convertirse en un enlace simbólico, lo que significa que la ruta ya no lo es
canonical
. Por lo tanto, el concepto depende del tiempo (o del entorno).
- incluso en el caso ideal, cuando se pueden resolver todos los enlaces simbólicos, puede haber más de uno
canonical path
en un archivo, por dos razones:
- la partición que contiene el archivo puede haberse montado simultáneamente (
ro
) en varios puntos de montaje.
- puede haber enlaces duros al archivo, lo que significa que esencialmente el archivo existe en varios directorios diferentes.
Por lo tanto, incluso con la definición mucho más restrictiva de canonical path
, puede haber varias rutas canónicas a un archivo. Esto también significa que el calificador canonical
es algo inadecuado, ya que generalmente implica una noción de unicidad.
Esto amplía una breve discusión del tema en una respuesta a otra pregunta similar en Bash: recuperar la ruta absoluta dada relativa
Mi conclusión es que realpath
está mejor diseñado y es mucho más flexible que readlink
. El único uso readlink
que no está cubierto realpath
es la llamada sin opción que devuelve el valor de un enlace simbólico.