readlink -f
sẽ :
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
which
sẽ 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)
which
khô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/java
là 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 which
dò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 java
nằm trong của bạn PATH
và shell đã chèn đường dẫn đó làm đối số readlink -f
. readlink
sau đó 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 java
sẽ 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/bin
vì 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_64
mà 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.