Perintah which Linux: cari jalur program dalam PATH
Perintah which mencari file program yang dapat dijalankan di direktori dalam PATH, lalu menampilkan jalur yang ditemukan. PATH adalah daftar direktori pencarian program oleh shell. Untuk mengetahui apakah nama perintah ditafsirkan sebagai alias, fungsi, perintah bawaan, atau file eksternal, gunakan juga type atau command -v pada shell yang sedang dipakai.
Cara kerja which
Implementasi eksternal biasanya memeriksa direktori PATH dari kiri ke kanan dan menampilkan kecocokan pertama. Namun, which sendiri dapat berupa program eksternal, alias, atau pembungkus khusus shell. Hasilnya tidak selalu sama dengan perintah yang benar-benar dipilih shell, terutama bila ada alias atau fungsi dengan nama yang sama.
Contoh opsi which di sini mengacu pada GNU which; beberapa implementasi lain hanya menyediakan sebagian opsi. Periksa which --version, which --help, atau man which. Untuk memeriksa which itu sendiri pada Bash, gunakan type -a which. Contoh type -a di artikel ini khusus shell yang mendukung opsi tersebut, seperti Bash.
Sintaks dasar
which [OPSI]... PERINTAH...
Ganti PERINTAH dengan nama program seperti python3, bukan teks penanda itu sendiri. Which melakukan pencarian, bukan menjalankan program yang ditanyakan. Tidak ada jalur keluaran yang dijamin sama pada semua distribusi, lingkungan virtual, sesi login, layanan, atau pengguna.
Penggunaan dasar which
Cari jalur program
Contoh berikut mencari python3 di PATH yang diwarisi oleh which. Jika program tersedia, hasil dapat berupa jalur seperti /usr/bin/python3 atau lokasi lingkungan virtual. Jika tidak ditemukan, periksa pesan kesalahan dan PATH; program mungkin tetap terpasang di direktori lain. Perintah ini tidak membuktikan versi Python atau keberhasilan menjalankan program.
which python3
Periksa beberapa nama
Anda dapat memberikan beberapa nama dalam satu pemanggilan. Contoh berikut mencari sh, awk, dan sed secara terpisah. Sebagian nama bisa ditemukan sementara nama lainnya tidak. Jangan membaca satu jalur keluaran sebagai bukti bahwa semua nama berhasil ditemukan; perhatikan keluaran kesalahan serta status hasil implementasi yang dipakai.
which sh awk sed
Tampilkan semua kecocokan PATH
GNU which menyediakan -a untuk menampilkan semua kecocokan, bukan berhenti pada yang pertama. Ini membantu ketika beberapa instalasi menyediakan nama program yang sama. Urutan mengikuti pencarian PATH, bukan versi terbaru atau pilihan yang paling sesuai dengan proyek.
which -a python3
Apa arti keluaran jalur?
Pada sistem yang menyediakan ls sebagai program eksternal di lokasi berikut, kueri ini dapat menampilkan /usr/bin/ls:
which ls
Contoh salah satu kemungkinan hasil:
/usr/bin/ls
Di sistem lain, jalurnya dapat berbeda. Bahkan pada mesin yang sama, shell dapat memakai alias seperti ls dengan opsi tambahan atau fungsi ls yang dibuat pengguna. Bandingkan dengan type ls atau command -V ls untuk penjelasan shell saat ini. Perbedaan keluaran merupakan petunjuk tentang lapisan pencarian, bukan alasan untuk langsung menghapus salah satu program.
Opsi utama GNU which
| Opsi | Kegunaan |
|---|---|
-a, --all |
Tampilkan semua kecocokan program dalam PATH. |
--skip-alias |
Abaikan opsi --read-alias, sehingga daftar alias dari input tidak dibaca. |
--skip-functions |
Abaikan opsi --read-functions, sehingga definisi fungsi dari input tidak dibaca. |
--version |
Tampilkan versi implementasi yang mendukung opsi ini. |
GNU which dapat membaca daftar alias atau definisi fungsi yang sengaja dikirim melalui masukan standar dengan opsi --read-alias dan --read-functions. Program eksternal tidak otomatis mengetahui seluruh keadaan internal shell pemanggilnya. Opsi skip di atas mengendalikan fitur pembacaan itu; opsi tersebut tidak menghapus alias atau fungsi pada shell. Rincian dijelaskan pada manual GNU which dari pengembangnya.
Contoh praktis
Periksa prioritas program
Jalankan dua perintah berikut pada shell yang sama. Bandingkan urutan jalur python3 dengan urutan direktori dalam PATH yang dipisahkan tanda titik dua. Jika lingkungan virtual aktif, direktori program lingkungan itu biasanya berada lebih awal. Jangan mengubah PATH hanya untuk menyesuaikan contoh; cari dulu mengapa urutannya berbeda dari yang diharapkan.
which -a python3
printf '%s\n' "$PATH"
Hasil yang berulang tidak selalu berarti ada salinan program berbeda. Dua direktori PATH dapat menunjuk lokasi yang sama melalui tautan, atau direktori yang sama dapat tercantum lebih dari sekali. Which bukan alat untuk membuktikan identitas fisik file atau memilih versi perangkat lunak berdasarkan nomor versinya.
Tanyakan cara shell mengenali nama
Pada Bash, rangkaian berikut menampilkan semua bentuk ls yang dikenali, penjelasan bentuk yang dipilih, lalu keluaran singkat. type -a dapat memperlihatkan alias, fungsi, perintah bawaan, serta file eksternal. Keluaran command -v tidak selalu jalur absolut: untuk fungsi atau perintah bawaan, hasilnya dapat berupa nama perintah.
type -a ls
command -V ls
command -v ls
Bash juga menyimpan lokasi sebagian perintah eksternal dalam tabel hash, yaitu cache jalur perintah. Bila program dipindahkan atau diganti dan shell masih memakai lokasi lama, periksa hash -t NAMA. hash -r mengosongkan cache jalur pada shell saat ini; perintah ini tidak menghapus program dan tidak mengubah PATH. Alias, fungsi, dan cache perlu diperiksa terpisah dari pencarian which.
Periksa nama perintah dalam skrip
Gunakan status command -v untuk pemeriksaan ketersediaan yang lebih sesuai dengan resolusi shell daripada mengurai teks which. Opsi -v dan -V didefinisikan dalam POSIX (Portable Operating System Interface), seperti dijelaskan pada spesifikasi command. Simpan contoh lengkap berikut sebagai check-curl.sh, lalu jalankan dengan sh check-curl.sh pada shell yang mendukungnya. Skrip hanya memeriksa nama curl; ia tidak menjalankan curl atau membuat permintaan jaringan.
if command -v curl >/dev/null 2>&1; then
printf '%s\n' 'curl dikenali oleh shell'
else
printf '%s\n' 'curl tidak ditemukan oleh shell' >&2
exit 1
fi
Jika nama ditemukan, pesan pertama muncul dan skrip selesai dengan status 0. Jika tidak, pesan kedua dikirim ke keluaran kesalahan dan statusnya 1. >/dev/null 2>&1 menyembunyikan keluaran pemeriksaan agar keputusan memakai status, bukan teksnya. Nama yang dikenali bisa berupa fungsi atau alias dalam konteks shell yang mendukungnya; hasil ini bukan bukti bahwa sebuah berkas curl eksternal terpercaya tersedia atau bahwa koneksi HTTP akan berhasil.
Perbandingan dengan perintah lain
| Perintah | Fungsi utama | Penggunaan yang sesuai |
|---|---|---|
which |
Mencari program eksternal melalui PATH | Memeriksa jalur program dengan cepat |
command -v |
Melaporkan nama atau jalur menurut shell | Pemeriksaan ketersediaan dalam skrip |
type |
Menjelaskan jenis perintah yang dikenali shell | Diagnosis alias, fungsi, bawaan, dan file |
whereis |
Mencari berkas yang berkaitan dengan program | Program, sumber, dan halaman manual |
Untuk memilih alat berdasarkan tujuan pekerjaan, lihat referensi perintah Linux berdasarkan tugas (bahasa Inggris). Pemeriksaan nama perintah tidak menggantikan pengujian opsi, versi, atau kemampuan program yang dibutuhkan aplikasi.
Hal yang perlu diperhatikan
Alias dan fungsi dapat mengubah pilihan shell
Shell dapat mengenali nama sebelum mencari file eksternal di PATH. Gunakan type atau command -V pada shell yang benar-benar dipakai untuk menjalankan tugas. Lingkungan sebuah layanan atau skrip terjadwal juga dapat berbeda dari terminal interaktif, sehingga hasil pemeriksaan di terminal belum tentu menjelaskan perilaku layanan itu.
Opsi dan format bukan antarmuka yang universal
Jangan menganggap -a, --skip-functions, penanganan alias, atau format pesan kesalahan tersedia pada semua program bernama which. Untuk skrip lintas shell, hindari bergantung pada kalimat penjelasan type -a yang khusus Bash. Manual Bash dari pengelolanya menjelaskan command, type, dan hash untuk Bash.
Jalur bukan penilaian kepercayaan
Menemukan jalur tidak memeriksa pemilik, izin penulisan direktori induk, integritas isi, atau asal program. Jika program akan dipakai untuk tugas sensitif, periksa sumber dan kebijakan lingkungan yang relevan. Which tidak mengesahkan bahwa file dapat berjalan dengan benar pada semua kondisi.
FAQ
Apakah tidak ada keluaran berarti program belum terpasang?
Belum tentu. Program dapat berada di luar PATH, atau nama tersebut berupa alias, fungsi, atau perintah bawaan. Periksa juga pesan kesalahan dan hasil type atau command -v.
Bagaimana cara melihat semua jalur yang cocok?
Gunakan which -a NAMA pada implementasi yang mendukungnya. Urutan hasil mengikuti PATH, bukan nomor versi program.
Sebaiknya skrip memakai which atau command -v?
Untuk memeriksa apakah shell mengenali nama perintah, command -v biasanya lebih sesuai. Bila yang diperlukan khusus berkas program eksternal, pertimbangkan bahwa hasil command -v juga dapat berupa fungsi atau bawaan.
Apa perbedaan which dan whereis?
Which berfokus pada pencarian program melalui PATH. Whereis mencari lokasi berkas terkait program, termasuk sumber dan manual, sehingga tujuannya berbeda dari menjelaskan resolusi shell saat ini.




