readlink -f
hará :
canonicalizar una ruta siguiendo cada enlace simbólico en cada componente del nombre dado de forma recursiva; todos menos el último componente debe existir
which
buscará :
para un ejecutable o script en los directorios enumerados en la variable de entorno PATH usando el mismo algoritmo que bash (1)
which
no le importa si lo que encuentra es un enlace simbólico o no: solo que es ejecutable. Garantiza que la ruta que imprima siempre estará dentro de uno de los directorios PATH
.
En su sistema, /usr/bin/java
es un enlace simbólico a /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
. Cuando combina los dos comandos juntos de esta manera, sustituye la salida de which
en la línea de comandos de readlink -f
crear:
readlink -f /usr/bin/java
Es decir, which
se ha encontrado que el primer archivo ejecutable llamado java
está en su PATH
, y la cáscara ha insertado ese camino como un argumento a readlink -f
. readlink
luego busca la ruta y descubre que es un enlace simbólico , por lo que resuelve ese enlace (y cualquier otro que encuentre) para producir una ruta directa completa al archivo real.
Para casi todos los propósitos, estas rutas serán intercambiables para usted: el enlace simbólico java
se resolverá automáticamente a la ruta real cuando lo use, y su administrador de paquetes realizará las modificaciones en el archivo, en lugar de usted, por lo que nunca tendrá para verlo. Puede ejecutar el programa desde cualquier ruta o con solo java
, y el resultado sería exactamente el mismo, porque es el mismo ejecutable real que se ejecuta al final.
El administrador de paquetes usará un enlace simbólico en lugar de poner el archivo real en su interior /usr/bin
porque el JRE tiene un conjunto completo de archivos que le gusta tener uno al lado del otro en configuraciones inusuales, y un enlace simbólico permite que el administrador de paquetes presente una disposición de aspecto normal para usted como usuario Habrá muchos otros archivos dentro de los /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
que nunca tendría ninguna razón para tratar, y que no participan en los arreglos ordinarios de la biblioteca del sistema.