readlink -firá :
canonize um caminho seguindo cada link simbólico em cada componente do nome fornecido recursivamente; tudo, exceto o último componente, deve existir
whichirá procurar :
para um executável ou script nos diretórios listados na variável de ambiente PATH usando o mesmo algoritmo que o bash (1)
whichnão se importa se o que encontra é um link simbólico ou não: apenas que é executável. Ele garante que o caminho impresso sempre estará dentro de um dos diretórios do PATH.
No seu sistema, /usr/bin/javaexiste um link simbólico para /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java. Quando você combina os dois comandos como este, substitui a saída de whichna linha de comando de readlink -fpara criar:
readlink -f /usr/bin/java
Ou seja, whichencontrou onde o primeiro arquivo executável chamado javaestá no seu PATHe o shell inseriu esse caminho como argumento para readlink -f. readlinkdepois, pesquisa o caminho e descobre que é um link simbólico e, portanto, resolve esse link (e quaisquer outros que encontrar) para produzir um caminho direto completo para o próprio arquivo real.
Para quase todos os propósitos, esses caminhos serão intercambiáveis para você - o link simbólico javaserá automaticamente resolvido para o caminho real quando você o usar, e as modificações no próprio arquivo serão feitas pelo seu gerenciador de pacotes, e não por você, para que você nunca tenha ver isso. Você pode executar o programa de qualquer caminho ou apenas java, e o resultado seria exatamente o mesmo, porque é o mesmo executável real que é executado no final.
O gerenciador de pacotes usará um link simbólico, em vez de colocar o arquivo real, /usr/binporque o JRE possui um conjunto inteiro de arquivos que ele gosta de ter ao lado do outro em configurações incomuns, e um link simbólico permite que o gerenciador de pacotes apresente um arranjo de aparência normal para você como usuário. Haverá muitos outros arquivos dentro dos /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64quais você nunca teria motivos para lidar, e que não participam das disposições comuns da biblioteca do sistema.