Posizione Java da / usr / bin / java


20

Sto cercando di trovare la mia posizione java nel mio sistema Linux e ho capito

[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

qual è la differenza tra i 2 comandi?

Risposte:


21

quali 2 comandi? /usr/bin/javaè un collegamento soft (simbolico) a /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
Non vi è alcuna differenza poiché sono lo stesso file.
Se digiti qualcosa di simile

ls -l /usr/bin/java

Potresti ottenere un risultato come:

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

Il che significherebbe che puoi avere diverse versioni java sul tuo sistema e utilizzare alternative per modificare quella predefinita. Altrimenti puoi semplicemente aggiungere e rimuovere collegamenti per cambiare manualmente quello predefinito.

Per creare collegamenti simbolici utilizzare il comando

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

O in forma generale

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

E utilizzare rmper eliminare il collegamento come si eliminerebbe qualsiasi altro file.


5

readlink -fsarà :

canonicalizzare un percorso seguendo ricorsivamente ogni collegamento simbolico in ogni componente del nome dato; tutti tranne l'ultimo componente devono esistere

whichcercherà :

per un eseguibile o uno script nelle directory elencate nella variabile d'ambiente PATH usando lo stesso algoritmo di bash (1)

whichnon importa se quello che trova è un symlink o no: solo che è eseguibile. Garantisce che il percorso che stampa sarà sempre all'interno di una delle directory in PATH.

Sul tuo sistema, /usr/bin/javac'è un link simbolico a /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java. Quando si combinano i due comandi in questo modo, si sostituisce l'output di whichnella riga di comando di readlink -fper creare:

readlink -f /usr/bin/java

Cioè, whichha trovato dove si trova il primo file eseguibile chiamato javanel tuo PATHe la shell ha inserito quel percorso come argomento per readlink -f. readlinkquindi cerca il percorso e scopre che si tratta di un collegamento simbolico , quindi risolve quel collegamento (e tutti gli altri che trova) per produrre un percorso diretto completo al file stesso.

Per quasi tutti gli scopi, questi percorsi saranno intercambiabili con te: il link simbolico javaverrà automaticamente risolto nel percorso reale quando lo utilizzi e le modifiche al file stesso verranno apportate dal gestore dei pacchetti, piuttosto che da te, quindi non hai mai per vederlo. È possibile eseguire il programma da entrambi i percorsi, o con just java, e il risultato sarebbe esattamente lo stesso, perché è lo stesso eseguibile effettivo che viene eseguito alla fine.

Il gestore pacchetti utilizzerà un collegamento simbolico anziché inserire il file effettivo /usr/binperché JRE ha un intero set di file che preferisce avere l'uno accanto all'altro in configurazioni insolite e un collegamento simbolico consente al gestore pacchetti di presentare una disposizione dall'aspetto normale a tu come utente. Ci saranno molti altri file all'interno dei /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64quali non avresti mai avuto motivo di occuparti e che non partecipano alle normali disposizioni della libreria del sistema.


0

Questo comando a riga singola:

which java | xargs readlink -f

farà il lavoro per te.

  • which java ti dà cioè: /usr/bin/java
  • readlink -fpassa attraverso tutti i collegamenti simbolici /usr/bin/java-> /etc/alternatives/java-> /usr/lib/jvm/java-8-oracle/jre/bin/javae restituisce l'ultimo.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.