readlink -f
буде :
канонізувати шлях, слідуючи за кожним символьним посиланням у кожному компоненті даної назви рекурсивно; всі, крім останнього компонента, повинні існувати
which
буде шукати :
для виконуваного файлу або сценарію в каталогах, перелічених у змінній середовища PATH, використовуючи той же алгоритм, що і bash (1)
which
Неважливо, знайдене це символьне посилання чи ні: лише те, що воно виконується. Це гарантує, що шлях, який він надрукує, завжди знаходитиметься в одному з каталогів PATH
.
У вашій системі /usr/bin/java
є символьним посиланням на /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
. Коли ви комбінуєте дві команди разом так, ви підміняєте вихід which
у командний рядок readlink -f
для створення:
readlink -f /usr/bin/java
Тобто, which
знайшов, де java
у вашому першому викликаному файлі є виклик PATH
, і оболонка вставила цей шлях як аргумент readlink -f
. readlink
потім шукає шлях і виявляє, що це символічне посилання , і тому він вирішує це посилання (і будь-які інші, які він знаходить), щоб створити повний прямий шлях до самого фактичного файлу.
Майже в усіх цілях ці шляхи будуть для вас взаємозамінними - символьне посилання java
автоматично буде вирішено до реального шляху, коли ви його використовуєте, а зміни до самого файлу будуть зроблені менеджером пакунків, а не ви, тому у вас ніколи не буде щоб побачити це. Ви можете запустити програму з будь-якого контуру, або з просто java
, і результат був би абсолютно однаковий, тому що це той самий фактичний виконуваний файл, який працює в кінці кінців.
Менеджер пакунків буде використовувати символьне посилання, а не ставити фактичний файл всередину, /usr/bin
тому що в JRE є цілий набір файлів, які він любить мати поруч один з одним у незвичних конфігураціях, а символьна посилання дозволяє менеджеру пакунків представляти звичайний вигляд розташування ви як користувач. Всередині буде багато інших файлів, з /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
якими ви ніколи не матимете жодних підстав мати справу, і які не беруть участі у звичайних бібліотечних системах системи.