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?
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:
hangi 2 komut?
/usr/bin/java
yumuş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 rm
bağlantıyı başka bir dosyayı sildiğiniz gibi silmek için kullanın.
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
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
which
bulduğ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/java
bir 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ı which
komut satırına readlink -f
oluşturmak için:
readlink -f /usr/bin/java
Yani, bir which
adlandırılan ilk yürütülebilir dosya nerede bulmuştur java
Gözlerinde farklı olduğunu PATH
ve kabuk bir argüman olarak bu yolu eklemiş readlink -f
. readlink
daha 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 java
kullandığı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 java
ve sonuç tamamen aynı olacaktır, çünkü sonuçta çalışan aynı gerçek yürütülebilir dosyadır.
/usr/bin
JRE, 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_64
asla 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 .
Bu tek satırlık komut:
which java | xargs readlink -f
işi senin için yapacak.
which java
yani: /usr/bin/java
readlink -f
tüm sembolik bağlardan geçer /usr/bin/java
-> /etc/alternatives/java
-> /usr/lib/jvm/java-8-oracle/jre/bin/java
ve sonuncusu döner.