Lokasi Java dari / usr / bin / java

20

Saya mencoba mencari lokasi java saya dalam sistem Linux saya dan mendapatkan ini

[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

apa perbedaan antara 2 perintah?

pengguna1050619
sumber

Jawaban:

21

2 perintah apa? /usr/bin/javaadalah tautan lunak (simbolis) ke /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
Tidak ada perbedaan karena mereka adalah file yang sama.
Jika Anda mengetik sesuatu seperti

ls -l /usr/bin/java

Anda mungkin mendapatkan hasil seperti:

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

Yang berarti Anda dapat memiliki beberapa versi java di sistem Anda dan menggunakan alternatif untuk mengubah yang standar. Kalau tidak, Anda cukup menambahkan dan menghapus tautan untuk mengubah yang default secara manual.

Untuk membuat tautan simbolik gunakan perintah

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

Atau dalam bentuk umum

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

Dan gunakan rmuntuk menghapus tautan seperti Anda akan menghapus file lainnya.

Dani_l
sumber
5

readlink -fakan :

mengkanoniskan jalur dengan mengikuti setiap symlink di setiap komponen nama yang diberikan secara rekursif; semua kecuali komponen terakhir harus ada

whichakan mencari :

untuk skrip yang dapat dieksekusi atau di direktori yang tercantum dalam variabel lingkungan PATH menggunakan algoritma yang sama dengan bash (1)

whichtidak peduli apakah yang ditemukannya adalah symlink atau tidak: hanya saja itu dapat dieksekusi. Ini menjamin bahwa jalur yang dicetaknya akan selalu berada di dalam salah satu direktori di PATH.

Di sistem Anda, /usr/bin/javaadalah symlink ke /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java. Ketika Anda menggabungkan dua perintah bersama-sama seperti ini, Anda mengganti output whichke dalam baris perintah readlink -funtuk membuat:

readlink -f /usr/bin/java

Yaitu, whichtelah menemukan tempat file executable pertama yang dipanggil javaada di Anda PATH, dan shell telah memasukkan path itu sebagai argumen readlink -f. readlinkkemudian mencari jalan dan menemukan bahwa itu adalah tautan simbolik , dan itu memutuskan tautan itu (dan yang lainnya menemukan) untuk menghasilkan jalur langsung lengkap ke file itu sendiri.

Untuk hampir semua tujuan, jalur ini akan dapat dipertukarkan dengan Anda - symlink javaakan secara otomatis diselesaikan ke jalur nyata ketika Anda menggunakannya, dan modifikasi pada file itu sendiri akan dibuat oleh manajer paket Anda, bukan Anda, sehingga Anda tidak pernah memiliki untuk melihatnya. Anda bisa menjalankan program dari kedua jalur, atau hanya dengan java, dan hasilnya akan persis sama, karena itu adalah executable aktual yang sama yang berjalan pada akhirnya.

Manajer paket akan menggunakan symlink daripada meletakkan file yang sebenarnya di dalam /usr/binkarena JRE memiliki seluruh set file yang suka memiliki di sebelah satu sama lain dalam konfigurasi yang tidak biasa, dan symlink memungkinkan manajer paket menyajikan pengaturan yang tampak normal untuk Anda sebagai pengguna. Akan ada banyak file lain di dalamnya /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64yang Anda tidak akan pernah punya alasan untuk berurusan, dan yang tidak berpartisipasi dalam pengaturan perpustakaan biasa sistem.

Michael Homer
sumber
0

Perintah baris tunggal ini:

which java | xargs readlink -f

akan melakukan pekerjaan untuk Anda.

  • which java memberi Anda yaitu: /usr/bin/java
  • readlink -fmelewati semua tautan simbolik /usr/bin/java-> /etc/alternatives/java-> /usr/lib/jvm/java-8-oracle/jre/bin/javadan mengembalikan yang terakhir.
Marek Podyma
sumber