Vị trí Java từ / usr / bin / java


20

Tôi đang cố gắng tìm vị trí java của mình trong hệ thống Linux của tôi và nhận được vị trí này

[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

sự khác biệt giữa 2 lệnh là gì?

Câu trả lời:


21

2 lệnh nào? /usr/bin/javalà một liên kết mềm (tượng trưng) đến /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
Không có sự khác biệt vì chúng là cùng một tệp.
Nếu bạn gõ một cái gì đó như

ls -l /usr/bin/java

Bạn có thể nhận được một kết quả như:

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

Điều đó có nghĩa là bạn có thể có một số phiên bản java trên hệ thống của mình và sử dụng các phiên bản thay thế để thay đổi phiên bản mặc định. Nếu không, bạn chỉ cần thêm và xóa liên kết để thay đổi liên kết mặc định theo cách thủ công.

Để tạo liên kết tượng trưng, ​​sử dụng lệnh

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

Hoặc ở dạng chung

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

Và sử dụng rmđể xóa liên kết như bạn sẽ xóa bất kỳ tập tin khác.


5

readlink -fsẽ :

chuẩn hóa một đường dẫn bằng cách theo từng đệ trình symlink trong mọi thành phần của tên đã cho theo cách đệ quy; tất cả trừ thành phần cuối cùng phải tồn tại

whichsẽ tìm kiếm :

cho một tập lệnh thực thi hoặc tập lệnh trong các thư mục được liệt kê trong biến môi trường PATH bằng thuật toán tương tự như bash (1)

whichkhông quan tâm liệu những gì nó tìm thấy có phải là một liên kết tượng trưng hay không: chỉ là nó có thể thực thi được. Nó đảm bảo rằng đường dẫn mà nó in sẽ luôn nằm trong một trong các thư mục PATH.

Trên hệ thống của bạn, /usr/bin/javalà một liên kết tượng trưng đến /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java. Khi bạn kết hợp hai lệnh với nhau như thế này, bạn thay thế đầu ra của whichdòng lệnh readlink -fđể tạo:

readlink -f /usr/bin/java

Đó là, whichđã tìm thấy nơi tệp thực thi đầu tiên được gọi javanằm trong của bạn PATHvà shell đã chèn đường dẫn đó làm đối số readlink -f. readlinksau đó tra cứu đường dẫn và thấy rằng đó là một liên kết tượng trưng , và do đó, nó giải quyết liên kết đó (và bất kỳ liên kết nào khác mà nó tìm thấy) để tạo ra một đường dẫn trực tiếp hoàn chỉnh đến chính tệp thực tế.

Đối với hầu hết tất cả các mục đích, các đường dẫn này sẽ có thể hoán đổi cho bạn - liên kết tượng trưng javasẽ tự động được giải quyết thành đường dẫn thực khi bạn sử dụng và việc sửa đổi tệp sẽ do người quản lý gói của bạn thực hiện, thay vì bạn, vì vậy bạn không bao giờ có để xem nó Bạn có thể chạy chương trình từ một trong hai đường dẫn hoặc chỉ java, và kết quả sẽ hoàn toàn giống nhau, bởi vì đó là cùng một thực thi thực tế chạy cuối cùng.

Trình quản lý gói sẽ sử dụng một liên kết tượng trưng thay vì đặt tệp thực tế vào bên trong /usr/binvì JRE có toàn bộ các tệp mà nó muốn có cạnh nhau trong các cấu hình bất thường và một liên kết tượng trưng cho phép trình quản lý gói trình bày cách sắp xếp trông bình thường bạn là người dùng Sẽ có nhiều tệp khác bên trong /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64mà bạn không bao giờ có bất kỳ lý do nào để xử lý và không tham gia vào các sắp xếp thư viện thông thường của hệ thống.


0

Lệnh dòng đơn này:

which java | xargs readlink -f

sẽ làm công việc cho bạn.

  • which java cung cấp cho bạn tức là: /usr/bin/java
  • readlink -fđi qua tất cả các liên kết tượng trưng /usr/bin/java-> /etc/alternatives/java-> /usr/lib/jvm/java-8-oracle/jre/bin/javavà trả về cái cuối cùng.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.