readlink -fhará :
canonicalizar una ruta siguiendo cada enlace simbólico en cada componente del nombre dado de forma recursiva; todos menos el último componente debe existir
whichbuscará :
para un ejecutable o script en los directorios enumerados en la variable de entorno PATH usando el mismo algoritmo que bash (1)
whichno 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/javaes 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 whichen la línea de comandos de readlink -fcrear:
readlink -f /usr/bin/java
Es decir, whichse ha encontrado que el primer archivo ejecutable llamado javaestá en su PATH, y la cáscara ha insertado ese camino como un argumento a readlink -f. readlinkluego 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 javase 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/binporque 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_64que nunca tendría ninguna razón para tratar, y que no participan en los arreglos ordinarios de la biblioteca del sistema.