ตำแหน่ง Java จาก / usr / bin / java


20

ฉันพยายามค้นหาตำแหน่ง java ของฉันภายในระบบ Linux และได้รับสิ่งนี้

[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 คำสั่งคืออะไร?

คำตอบ:


21

คำสั่งที่ 2? /usr/bin/javaเป็นลิงก์อ่อน (สัญลักษณ์) ไปที่/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
ไม่มีความแตกต่างเนื่องจากเป็นไฟล์เดียวกัน
หากคุณพิมพ์สิ่งที่ชอบ

ls -l /usr/bin/java

คุณอาจได้รับผลลัพธ์เช่น:

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

ซึ่งหมายความว่าคุณสามารถมีจาวาเวอร์ชันต่าง ๆ ในระบบของคุณและใช้ทางเลือกเพื่อเปลี่ยนค่าเริ่มต้น มิฉะนั้นคุณสามารถเพิ่มและลบลิงค์เพื่อเปลี่ยนค่าเริ่มต้นด้วยตนเอง

เพื่อสร้างลิงค์สัญลักษณ์ใช้คำสั่ง

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

หรือในรูปแบบทั่วไป

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

และใช้rmเพื่อลบลิงก์เช่นเดียวกับที่คุณลบไฟล์อื่น ๆ


5

readlink -fจะ :

กำหนดเส้นทางให้เป็นมาตรฐานโดยติดตามทุก symlink ในทุกองค์ประกอบของชื่อที่กำหนดซ้ำ ทั้งหมดยกเว้นองค์ประกอบสุดท้ายจะต้องมีอยู่

whichจะค้นหา :

สำหรับไฟล์เรียกทำงานหรือสคริปต์ในไดเรกทอรีที่แสดงรายการในตัวแปรสภาพแวดล้อม PATH โดยใช้อัลกอริทึมเช่นเดียวกับ bash (1)

whichไม่สนใจว่าสิ่งที่พบนั้นเป็น symlink หรือไม่: เพียงแค่ใช้งานได้ มันรับประกันว่าเส้นทางที่พิมพ์จะอยู่ในไดเรกทอรีใดไดเรกทอรีPATHหนึ่งเสมอ

ในระบบของคุณ/usr/bin/javaเป็นsymlink/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/javaไป เมื่อคุณรวมคำสั่งทั้งสองเข้าด้วยกันเช่นนี้คุณจะแทนที่เอาต์พุตของwhichลงในบรรทัดคำสั่งของreadlink -fเพื่อสร้าง:

readlink -f /usr/bin/java

นั่นคือการwhichได้พบที่แฟ้มที่ปฏิบัติการครั้งแรกเรียกว่าjavaอยู่ในของคุณและเปลือกได้แทรกเส้นทางที่เป็นอาร์กิวเมนต์ไปยังPATH จากนั้นค้นหาพา ธ และพบว่าเป็นลิงก์สัญลักษณ์ดังนั้นจึงสามารถแก้ไขลิงก์นั้น (และอื่น ๆ ที่พบ) เพื่อสร้างพา ธ โดยตรงที่สมบูรณ์ไปยังไฟล์จริงreadlink -freadlink

สำหรับวัตถุประสงค์เกือบทั้งหมดเส้นทางเหล่านี้จะใช้แทนกันได้ - symlink javaจะได้รับการแก้ไขให้เป็นเส้นทางจริงโดยอัตโนมัติเมื่อคุณใช้งานและการแก้ไขไฟล์จะถูกทำโดยผู้จัดการแพ็คเกจของคุณแทนที่จะเป็นคุณดังนั้นคุณจึงไม่เคยมี เพื่อดูมัน คุณสามารถเรียกใช้โปรแกรมจากเส้นทางใดเส้นทางหนึ่งหรือเพียงแค่javaและผลลัพธ์ก็จะเหมือนกันทุกประการเพราะเป็นไฟล์ปฏิบัติการจริงที่ทำงานในตอนท้าย

ตัวจัดการแพ็กเกจจะใช้ symlink แทนที่จะวางไฟล์จริงไว้ภายใน/usr/binเพราะ JRE มีไฟล์ทั้งชุดซึ่งมันชอบที่จะอยู่ติดกันในการกำหนดค่าที่ผิดปกติและ symlink ช่วยให้ตัวจัดการแพคเกจนำเสนอการจัดการที่ดูเป็นปกติ คุณในฐานะผู้ใช้ จะมีไฟล์อื่น ๆ อีกมากมาย/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64ที่คุณไม่เคยมีเหตุผลที่จะจัดการและจะไม่มีส่วนร่วมในการจัดเรียงไลบรารีปกติของระบบ


0

คำสั่งบรรทัดเดียวนี้:

which java | xargs readlink -f

จะทำงานให้คุณ

  • which java ให้เช่น: /usr/bin/java
  • readlink -fผ่านการเชื่อมโยงสัญลักษณ์ทั้งหมด/usr/bin/java-> /etc/alternatives/java-> /usr/lib/jvm/java-8-oracle/jre/bin/javaและส่งคืนลิงก์ล่าสุด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.