/ Usr / bin / java'dan Java konumu


20

Java konumumu Linux sistemimde bulmaya çalışıyorum ve bunu anladım

[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

2 komut arasındaki fark nedir?

Yanıtlar:


21

hangi 2 komut? /usr/bin/javayumuşak (sembolik) link /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
onlar aynı dosya olduğu gibi hiçbir fark yoktur.
Gibi bir şey yazarsanız

ls -l /usr/bin/java

Aşağıdaki gibi bir sonuç alabilirsiniz:

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

Bu, sisteminizde birkaç java sürümüne sahip olabileceğiniz ve varsayılanı değiştirmek için alternatifler kullanabileceğiniz anlamına gelir. Aksi takdirde, varsayılanı manuel olarak değiştirmek için bağlantılar ekleyebilir ve kaldırabilirsiniz.

Sembolik bağlantılar oluşturmak için şu komutu kullanın:

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

Veya genel olarak

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

Ve rmbağlantıyı başka bir dosyayı sildiğiniz gibi silmek için kullanın.


5

readlink -folacak :

verilen adın her bileşenindeki her sembolik bağı tekrar tekrar izleyerek bir yolu standartlaştırır; son bileşen hariç hepsi mevcut olmalıdır

whicharayacak :

bash (1) ile aynı algoritmayı kullanan ortam değişkeni PATH'de listelenen dizinlerdeki bir yürütülebilir dosya veya komut dosyası için

whichbulduğu şeyin bir symlink olup olmadığı umurunda değil: sadece çalıştırılabilir olması. Yazdırdığı yolun her zaman içindeki dizinlerden birinde olmasını garanti eder PATH.

Sisteminizde, /usr/bin/javabir olan sembolik bağı için /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java. Eğer böyle biraraya iki komutları birleştirmek zaman yerine çıktısını whichkomut satırına readlink -foluşturmak için:

readlink -f /usr/bin/java

Yani, bir whichadlandırılan ilk yürütülebilir dosya nerede bulmuştur javaGözlerinde farklı olduğunu PATHve kabuk bir argüman olarak bu yolu eklemiş readlink -f. readlinkdaha sonra yolu arar ve bunun sembolik bir bağlantı olduğunu bulur ve böylece bu bağlantıyı (ve bulduğu diğerlerini) gerçek dosyanın kendisine tam bir doğrudan yol üretecek şekilde çözer.

Neredeyse tüm amaçlar için, bu yollar sizin için değiştirilebilir - symlink'i javakullandığınızda gerçek yola otomatik olarak çözümlenir ve dosyada yapılan değişiklikler sizden ziyade paket yöneticiniz tarafından yapılacaktır, böylece asla görmek için. Programı her iki yoldan ya da sadece ile çalıştırabilirsiniz javave sonuç tamamen aynı olacaktır, çünkü sonuçta çalışan aynı gerçek yürütülebilir dosyadır.

/usr/binJRE, olağandışı yapılandırmalarda yan yana olmasını sevdiği bir dizi dosya içerdiğinden, paket yöneticisi gerçek dosyayı koymak yerine bir sembolik bağlantı kullanır ve bir sembolik bağlantı, paket yöneticisinin normal görünümlü bir düzenleme sunmasına izin verir. kullanıcı olarak. İçinde /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64asla uğraşmak için hiçbir nedeniniz olmayacak ve sistemin sıradan kütüphane düzenlemelerine katılmayan birçok dosya olacaktır .


0

Bu tek satırlık komut:

which java | xargs readlink -f

işi senin için yapacak.

  • which java yani: /usr/bin/java
  • readlink -ftüm sembolik bağlardan geçer /usr/bin/java-> /etc/alternatives/java-> /usr/lib/jvm/java-8-oracle/jre/bin/javave sonuncusu döner.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.