readlink -f
akan :
mengkanoniskan jalur dengan mengikuti setiap symlink di setiap komponen nama yang diberikan secara rekursif; semua kecuali komponen terakhir harus ada
which
akan mencari :
untuk skrip yang dapat dieksekusi atau di direktori yang tercantum dalam variabel lingkungan PATH menggunakan algoritma yang sama dengan bash (1)
which
tidak peduli apakah yang ditemukannya adalah symlink atau tidak: hanya saja itu dapat dieksekusi. Ini menjamin bahwa jalur yang dicetaknya akan selalu berada di dalam salah satu direktori di PATH
.
Di sistem Anda, /usr/bin/java
adalah symlink ke /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
. Ketika Anda menggabungkan dua perintah bersama-sama seperti ini, Anda mengganti output which
ke dalam baris perintah readlink -f
untuk membuat:
readlink -f /usr/bin/java
Yaitu, which
telah menemukan tempat file executable pertama yang dipanggil java
ada di Anda PATH
, dan shell telah memasukkan path itu sebagai argumen readlink -f
. readlink
kemudian mencari jalan dan menemukan bahwa itu adalah tautan simbolik , dan itu memutuskan tautan itu (dan yang lainnya menemukan) untuk menghasilkan jalur langsung lengkap ke file itu sendiri.
Untuk hampir semua tujuan, jalur ini akan dapat dipertukarkan dengan Anda - symlink java
akan secara otomatis diselesaikan ke jalur nyata ketika Anda menggunakannya, dan modifikasi pada file itu sendiri akan dibuat oleh manajer paket Anda, bukan Anda, sehingga Anda tidak pernah memiliki untuk melihatnya. Anda bisa menjalankan program dari kedua jalur, atau hanya dengan java
, dan hasilnya akan persis sama, karena itu adalah executable aktual yang sama yang berjalan pada akhirnya.
Manajer paket akan menggunakan symlink daripada meletakkan file yang sebenarnya di dalam /usr/bin
karena JRE memiliki seluruh set file yang suka memiliki di sebelah satu sama lain dalam konfigurasi yang tidak biasa, dan symlink memungkinkan manajer paket menyajikan pengaturan yang tampak normal untuk Anda sebagai pengguna. Akan ada banyak file lain di dalamnya /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
yang Anda tidak akan pernah punya alasan untuk berurusan, dan yang tidak berpartisipasi dalam pengaturan perpustakaan biasa sistem.