hash
adalah perintah built-in bash. Tabel hash adalah fitur bash
yang mencegahnya dari harus mencari $PATH
setiap kali Anda mengetik perintah dengan menyimpan hasilnya di memori. Tabel akan dihapus pada acara yang jelas-jelas membatalkan hasil (seperti memodifikasi $PATH
)
The hash
perintah hanya bagaimana Anda berinteraksi dengan sistem yang (untuk mana alasan Anda merasa Anda perlu).
Beberapa kasus penggunaan:
Seperti Anda melihatnya mencetak berapa kali Anda menekan perintah mana jika Anda mengetiknya tanpa argumen. Ini mungkin memberi tahu Anda perintah mana yang paling sering Anda gunakan.
Anda juga dapat menggunakannya untuk mengingat file yang dapat dieksekusi di lokasi yang tidak standar.
Contoh:
[root@policyServer ~]# hash -p /lol-wut/whoami whoami
[root@policyServer ~]# whoami
Not what you're thinking
[root@policyServer ~]# which whoami
/usr/bin/whoami
[root@policyServer ~]# /usr/bin/whoami
root
[root@policyServer ~]#
Yang mungkin berguna jika Anda hanya memiliki satu executable di direktori di luar $PATH
yang ingin Anda jalankan dengan cukup ketik nama daripada memasukkan semua yang ada di direktori itu (yang akan menjadi efek jika Anda menambahkannya ke $PATH
).
Alias biasanya dapat melakukan ini juga, meskipun dan karena Anda memodifikasi perilaku shell saat ini, itu tidak dipetakan dalam program yang Anda mulai. Symlink ke executable tunggal mungkin merupakan opsi yang lebih disukai di sini. hash
adalah salah satu cara untuk melakukannya.
- Anda dapat menggunakannya untuk menghapus lintasan file. Ini berguna jika sebuah executable baru muncul di
PATH
direktori sebelumnya atau pergi mv
ke tempat lain dan Anda ingin memaksa bash untuk keluar dan menemukannya lagi, bukan tempat terakhir yang ia ingat menemukannya.
Contoh:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# cp /bin/ls /lol-wut
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /bin/ls
[root@policyServer ~]# hash -d ls
[root@policyServer ~]# ls
default.ldif newDIT.ldif notes.txt users.ldif
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /lol-wut/ls
[root@policyServer ~]#
The cp
perintah menyebabkan versi baru dari ls
eksekusi muncul di awal saya $PATH
tetapi tidak memicu pembersihan dari tabel hash. Saya digunakan hash -d
untuk membersihkan entri secara selektif ls
dari tabel hash. Bash kemudian dipaksa untuk melihat $PATH
lagi dan ketika itu terjadi, ia menemukannya di lokasi yang lebih baru (lebih awal dalam $ PATH daripada yang berjalan sebelumnya).
Anda dapat secara selektif menjalankan $PATH
perilaku "cari lokasi yang dapat dieksekusi dari " ini, meskipun:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits command
0 /lol-wut/ls
[root@policyServer ~]#
Anda sebagian besar hanya ingin melakukan ini jika Anda menginginkan sesuatu dari tabel hash dan tidak 100% Anda bisa logout dan kemudian berhasil kembali, atau Anda ingin mempertahankan beberapa modifikasi yang telah Anda buat pada shell Anda.
Untuk menghilangkan pemetaan basi, Anda juga dapat melakukan hash -r
(atau export PATH=$PATH
) yang secara efektif hanya membersihkan seluruh tabel hash bash.
Ada banyak situasi kecil seperti itu. Saya tidak tahu apakah saya akan menyebutnya salah satu dari perintah "paling berguna" tetapi memiliki beberapa kasus penggunaan.