readlink -f
wird :
Kanonisieren Sie einen Pfad, indem Sie jedem Symlink in jeder Komponente des angegebenen Namens rekursiv folgen. alle bis auf die letzte Komponente müssen vorhanden sein
which
wird suchen :
für eine ausführbare Datei oder ein Skript in den in der Umgebungsvariablen PATH aufgelisteten Verzeichnissen unter Verwendung desselben Algorithmus wie bash (1)
which
Es ist egal, ob es sich um einen Symlink handelt oder nicht: Nur, dass er ausführbar ist. Es wird garantiert, dass sich der Pfad, den es druckt, immer in einem der Verzeichnisse in befindet PATH
.
Auf Ihrem System /usr/bin/java
befindet sich ein Symlink zu /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
. Wenn Sie die beiden Befehle zusammen wie diese kombinieren Sie ersetzen die Ausgabe which
in der Befehlszeile readlink -f
zu erstellen:
readlink -f /usr/bin/java
Das heißt, es which
wurde gefunden, wo sich die erste aufgerufene ausführbare Datei java
in Ihrer befindet PATH
, und die Shell hat diesen Pfad als Argument für eingefügt readlink -f
. readlink
Dann wird der Pfad nachgeschlagen und festgestellt, dass es sich um eine symbolische Verknüpfung handelt. Daher wird diese Verknüpfung (und alle anderen gefundenen Verknüpfungen) aufgelöst, um einen vollständigen direkten Pfad zur eigentlichen Datei selbst zu erstellen.
Für fast alle Zwecke sind diese Pfade für Sie austauschbar - der Symlink java
wird automatisch in den tatsächlichen Pfad aufgelöst, wenn Sie ihn verwenden, und Änderungen an der Datei selbst werden von Ihrem Paketmanager vorgenommen und nicht von Ihnen Es zu sehen. Sie könnten das Programm entweder über den Pfad oder mit nur ausführen java
, und das Ergebnis wäre genau das gleiche, da es letztendlich dieselbe ausführbare Datei ist, die auch ausgeführt wird.
Der Paketmanager verwendet einen Symlink, anstatt die eigentliche Datei darin abzulegen, /usr/bin
da die JRE eine ganze Reihe von Dateien in ungewöhnlichen Konfigurationen nebeneinander hat, und ein Symlink ermöglicht es dem Paketmanager, eine normal aussehende Anordnung zu präsentieren Sie als Benutzer. Es gibt viele andere Dateien in der /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
Bibliothek, mit denen Sie sich nie befassen müssten und die nicht an den üblichen Bibliotheksarrangements des Systems beteiligt sind.