Lokalizacja Java z / usr / bin / java


20

Próbuję znaleźć moją lokalizację Java w moim systemie Linux i mam to

[980@b449 ~]$ which java
/usr/bin/java


[980@b449 ~]$ readlink -f $(which java)
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java

jaka jest różnica między 2 poleceniami?

Odpowiedzi:


21

które 2 polecenia? /usr/bin/javato miękki (symboliczny) link do /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
Nie ma różnicy, ponieważ są one tym samym plikiem.
Jeśli wpiszesz coś takiego

ls -l /usr/bin/java

Możesz uzyskać wynik, taki jak:

lrwxrwxrwx. 1 root root 22 Aug  5 17:01 /usr/bin/java -> /etc/alternatives/java

Co oznaczałoby, że możesz mieć kilka wersji Java w swoim systemie i użyć alternatywnych rozwiązań, aby zmienić domyślną. W przeciwnym razie możesz po prostu dodać i usunąć linki, aby ręcznie zmienić domyślny.

Aby utworzyć dowiązania symboliczne, użyj polecenia

ln -s /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java /usr/bin/java

Lub w formie ogólnej

ln -s <original file> <link to file>

I użyj, rmaby usunąć link, tak jak byś usunął każdy inny plik.


5

readlink -fbędzie :

kanonizować ścieżkę, rekurencyjnie podążając za każdym dowiązaniem symbolicznym w każdym komponencie danej nazwy; wszystkie oprócz ostatniego komponentu muszą istnieć

whichwyszuka :

dla pliku wykonywalnego lub skryptu w katalogach wymienionych w zmiennej środowiskowej PATH przy użyciu tego samego algorytmu co bash (1)

whichnie obchodzi, czy to, co znajduje, jest dowiązaniem symbolicznym, czy nie: wystarczy, że jest wykonywalne. Gwarantuje, że ścieżka, którą drukuje, zawsze będzie znajdować się w jednym z katalogów w PATH.

W twoim systemie /usr/bin/javajest dowiązanie symboliczne do /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java. Po połączeniu dwóch poleceń razem w ten sposób, podstawiasz wynik whichpolecenia w wierszu poleceń w readlink -fcelu utworzenia:

readlink -f /usr/bin/java

Znaczy to, whichże javaw twoim pliku znajduje się pierwszy wywoływany plik wykonywalny PATH, a powłoka wstawiła tę ścieżkę jako argument readlink -f. readlinknastępnie wyszukuje ścieżkę i stwierdza, że ​​jest to dowiązanie symboliczne , więc rozwiązuje to dowiązanie (i wszelkie inne znalezione), aby utworzyć pełną bezpośrednią ścieżkę do samego pliku.

Dla prawie wszystkich celów ścieżki te będą dla ciebie wymienne - dowiązanie symboliczne javazostanie automatycznie przetłumaczone na prawdziwą ścieżkę, gdy z niej skorzystasz, a zmiany w samym pliku zostaną wprowadzone przez menedżera pakietów, a nie przez Ciebie, więc nigdy nie masz żeby to zobaczyć. Możesz uruchomić program z dowolnej ścieżki lub z just java, a wynik byłby dokładnie taki sam, ponieważ jest to ten sam rzeczywisty plik wykonywalny, który działa na końcu.

Menedżer pakietów będzie używał dowiązania symbolicznego, zamiast umieszczać rzeczywisty plik w środku, /usr/binponieważ środowisko JRE zawiera cały zestaw plików, które lubi mieć obok siebie w nietypowych konfiguracjach, a dowiązanie symboliczne pozwala menedżerowi pakietu przedstawić normalnie wyglądające ustawienie ty jako użytkownik. Wewnątrz będzie wiele innych plików, z /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64którymi nigdy nie miałbyś powodu się zajmować i które nie uczestniczą w zwykłych aranżacjach bibliotek systemu.


0

To polecenie jednowierszowe:

which java | xargs readlink -f

wykona za ciebie pracę.

  • which java daje ci np .: /usr/bin/java
  • readlink -fprzechodzi przez wszystkie dowiązania symboliczne /usr/bin/java-> /etc/alternatives/java-> /usr/lib/jvm/java-8-oracle/jre/bin/javai zwraca ostatni.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.