LinuxPC

Cara Menggunakan Perintah “which” di Linux

Perintah Linux which mengidentifikasi biner yang dapat dieksekusi yang diluncurkan saat Anda mengeluarkan perintah ke shell. Jika Anda memiliki versi berbeda dari program yang sama di komputer, Anda dapat menggunakannya untuk mengetahui versi mana yang akan digunakan shell.

Binari dan Path


Ketika Anda mencoba menjalankan suatu program atau perintah dari jendela terminal, shell (biasanya, Bash pada distribusi modern) harus menemukan perintah itu dan meluncurkannya. Beberapa perintah, seperti cd, history, dan pwd, dibangun ke dalam shell, jadi Bash tidak perlu bekerja terlalu keras untuk menemukannya.

Tetapi bagaimana cara Bash menemukan perintah, program, dan binari mandiri eksternal lainnya? Nah, Bash menggunakan path atau jalur, yang sebenarnya merupakan kumpulan jalur, yang masing-masing mengarah ke direktori. Kemudian mencari setiap direktori tersebut untuk dieksekusi yang cocok dengan perintah atau program yang Anda coba jalankan. Ketika menemukannya, Bash meluncurkannya dan meninggalkan pencarian.

Anda dapat menggunakan echo untuk memeriksa variabel lingkungan $PATH dan melihat direktori di jalur Anda. Untuk melakukannya, ketikkan yang berikut ini, lalu tekan Enter:

echo $PATH

Daftar output setiap jalur dipisahkan oleh titik dua (:). Di komputer yang kami gunakan, Bash akan menelusuri direktori berikut dalam urutan ini:

  • /usr/local/sbin
  • /usr/local/bin
  • /usr/sbin
  • /usr/bin
  • /sbin
  • /bin
  • /user/games
  • /usr/local/games
  • /snap/bin

Ada banyak folder bernama /sbin dan /bin di sistem file, yang dapat menyebabkan kebingungan.

Perhatikan Jalurnya


Misalkan kami memiliki versi terbaru dari program yang disebut htg. Itu ada di direktori kami saat ini, dan kami dapat menjalankannya dengan mengetik perintah berikut:

./htg

Ini bukanlah sebuah program — ini hanya mencetak nomor versi, lalu ditutup. Versi baru adalah 1.2.138.

Untuk menjalankan program di direktori kerja saat ini, Anda harus mengetik “./” di depan nama program, jadi Bash tahu di mana menemukannya.

Karena kami ingin menjalankan program khusus ini dari direktori mana pun, kami akan memindahkan file yang dapat dieksekusi ke direktori /usr/bin. Bash akan menemukan program itu di jalurnya dan menjalankannya untuk kita.

Kami tidak membutuhkan executable di direktori kami saat ini, kami juga tidak perlu mengetik “./” di depan nama program, seperti yang ditunjukkan di bawah ini:

sudo mv htg /usr/bin

Sekarang, coba jalankan program dengan mengetik:

htg

Ada yang berjalan, tetapi ini bukanlah program kami yang baru dan diperbarui. Sebaliknya, ini adalah versi yang lebih lama, 1.2.105.

Perintah which


Masalah yang kami tunjukkan di atas adalah alasan mengapa perintah which dirancang.

Dalam contoh ini, kami akan menggunakan which dan meneruskan nama program yang kami selidiki sebagai parameter baris perintah:

which htg

which melaporkan bahwa ditemukan versi htg di direktori /usr/local/bin. Karena lokasi tersebut muncul di jalur sebelum direktori tempat kami memindahkan htg yang diperbarui, Bash menggunakan program versi sebelumnya.

Namun, jika kita menggunakan opsi -a (all / semua) seperti yang ditunjukkan di bawah ini, which terus mencari meskipun sudah menemukan kecocokan:

which -a htg

Kemudian daftar semua kecocokan di salah satu direktori di jalur.

Jadi, itulah masalahnya — ada versi program sebelumnya dalam direktori yang juga ada dalam patch. Dan direktori itu sedang dicari sebelum direktori tempat kami menjatuhkan versi baru dari program tersebut.

Untuk memverifikasi, kita dapat mengetik seperti contoh berikut ini dan secara eksplisit menjalankan setiap versi program:

/usr/local/bin/htg
/usr/bin/htg

Ini menjelaskan masalahnya, dan solusinya sederhana.

Sebenarnya, kami punya pilihan. Kita dapat menghapus versi lama di direktori /usr/local/bin atau memindahkannya dari /usr/bin ke /usr/local/bin.

Perhatikan Hasilnya


Dua hasil tidak selalu berarti dua file biner.

Mari kita lihat contoh di mana kita akan menggunakan perintah which dengan opsi -a (all) dan mencari versi program less:

which -a less

which melaporkan dua lokasi yang menampung versi program less, tetapi apakah itu benar? Aneh jika memiliki dua versi berbeda (atau versi yang sama di banyak lokasi) less diinstal pada komputer Linux. Jadi, kami tidak akan menerima output which. Sebaliknya, mari kita gali lebih dalam.

Kita dapat menggunakan opsi ls, -l (long listing / daftar panjang), dan -h (human-readable / dapat dibaca manusia) untuk melihat apa yang terjadi:

ls -lh /usr/bin/less

Ukuran file dilaporkan sebagai sembilan byte! Itu jelas bukan salinan lengkap dari less.

Karakter pertama dari daftar adalah “l”. File normal akan memiliki tanda hubung (-) sebagai karakter pertama. Huruf “l” adalah simbol yang berarti link simbolik. Jika Anda melewatkan detail itu, simbol –> juga menunjukkan bahwa ini adalah tautan simbolis, yang dapat Anda anggap sebagai semacam pintasan. Yang ini menunjuk ke salinan less di /bin.

Mari coba lagi dengan versi less di /bin:

ls -lh /bin/less

Entri ini jelas merupakan eksekusi biner “real”. Karakter pertama dari daftar adalah tanda hubung (-), yang berarti ini adalah file biasa, dan ukuran file adalah 167 KB. Jadi, hanya satu salinan less yang dipasang, tetapi ada tautan simbolis ke sana dari direktori lain, yang juga ditemukan Bash saat menelusuri jalurnya.

Memeriksa Beberapa Perintah Sekaligus

Anda dapat meneruskan beberapa program dan perintah ke which, dan itu akan memeriksanya secara berurutan.

Misalnya, jika Anda mengetik:

which ping cat uptime date head

which bekerja melalui daftar program dan perintah yang Anda berikan dan daftar hasilnya untuk masing-masing.

Which yang mana?

Jika Anda sangat penasaran, Anda dapat menggunakannya sendiri dengan mengetik berikut ini:

which which

Terlepas dari melihat-lihat sistem file Linux karena penasaran, yang paling berguna ketika Anda mengharapkan serangkaian perilaku dari sebuah perintah atau program, tetapi dapatkan yang lain.

Baca juga: Cara Menggunakan ss Command di Linux

Anda dapat menggunakan which dalam kasus ini untuk memverifikasi perintah yang diluncurkan Bash yang ingin Anda gunakan.

Artikel Terkait

Back to top button