GNU/Linux >> Belajar Linux >  >> Linux

Tujuan Perintah Hash?

Jika Anda menjalankan hash ini menunjukkan jalur semua perintah yang dijalankan sejak hash terakhir direset (hash -r )

[[email protected] ~]# hash
hash: hash table empty

[[email protected] ~]# whoami
root

[[email protected] ~]# hash
hits    command
   1    /usr/bin/whoami

[[email protected] ~]# whoami
root

[[email protected] ~]# hash
hits    command
   2    /usr/bin/whoami

Menurut halaman manual, tujuan hash adalah:

Utilitas /usr/bin/hash mempengaruhi cara lingkungan shell
saat ini mengingat lokasi utilitas yang ditemukan.
Bergantung pada argumen yang ditentukan, ia menambahkan lokasi utilitas
ke daftar lokasi yang diingat atau menghapus
isi daftar. Ketika tidak ada argumen yang ditentukan, itu
melaporkan isi daftar. -r opsi menyebabkan
shell melupakan semua lokasi yang diingat.

Utilitas yang disediakan sebagai bawaan untuk shell tidak
dilaporkan oleh hash.

Selain melihat berapa kali saya memasukkan perintah, saya tidak dapat melihat utilitas hash .

Itu bahkan ditampilkan dalam 15 perintah berguna teratas thegeekstuff.com

Dalam hal apa hash berguna?

Jawaban yang Diterima:

hash adalah perintah bawaan bash. Tabel hash adalah fitur bash yang mencegahnya untuk mencari $PATH setiap kali Anda mengetik perintah dengan menyimpan hasil di memori. Tabel akan dihapus pada peristiwa yang jelas-jelas membatalkan hasil (seperti memodifikasi $PATH )

hash perintah adalah bagaimana Anda berinteraksi dengan sistem itu (untuk alasan apa pun yang Anda rasa perlu).

Beberapa kasus penggunaan:

  • Seperti yang Anda lihat, itu 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 executable di lokasi non-standar.

Contoh:

[[email protected] ~]# hash -p /lol-wut/whoami whoami
[[email protected] ~]# whoami
Not what you're thinking
[[email protected] ~]# which whoami
/usr/bin/whoami
[[email protected] ~]# /usr/bin/whoami
root
[[email protected] ~]#

Yang mungkin berguna jika Anda hanya memiliki satu yang dapat dieksekusi di direktori di luar $PATH yang ingin Anda jalankan hanya dengan mengetikkan nama alih-alih memasukkan semua yang ada di direktori itu (yang akan menjadi efek jika Anda menambahkannya ke $PATH ).

Alias ​​​​biasanya dapat melakukan ini juga, dan karena Anda memodifikasi perilaku shell saat ini, itu tidak dipetakan dalam program yang Anda mulai. Sebuah symlink ke satu-satunya yang dapat dieksekusi mungkin merupakan opsi yang lebih disukai di sini. hash adalah salah satu cara untuk melakukannya.

  • Anda dapat menggunakannya untuk menghapus jalur file. Ini berguna jika executable baru muncul di PATH sebelumnya direktori atau dapatkan mv 'd ke tempat lain dan Anda ingin memaksa bash untuk keluar dan menemukannya lagi, bukan tempat terakhir yang diingatnya untuk menemukannya.
Terkait:Linux – sysrq tidak akan reboot dengan penekanan tombol, tetapi dengan echo “b”> /proc/sysrq-trigger?

Contoh:

[[email protected] ~]# hash
hits    command
   1    /bin/ls
[[email protected] ~]# cp /bin/ls /lol-wut
[[email protected] ~]# hash
hits    command
   1    /bin/cp
   1    /bin/ls
[[email protected] ~]# hash -d ls
[[email protected] ~]# ls
default.ldif  newDIT.ldif  notes.txt  users.ldif
[[email protected] ~]# hash
hits    command
   1    /bin/cp
   1    /lol-wut/ls
[[email protected] ~]#

cp perintah menyebabkan versi baru ls dapat dieksekusi untuk muncul lebih awal di $PATH saya tetapi tidak memicu pembersihan tabel hash. Saya menggunakan hash -d untuk secara selektif membersihkan entri untuk ls dari tabel hash. Bash kemudian dipaksa untuk melihat melalui $PATH lagi dan ketika berhasil, ia menemukannya di lokasi yang lebih baru (lebih awal di $PATH daripada yang dijalankan sebelumnya).

Anda dapat secara selektif memanggil ini "temukan lokasi baru yang dapat dieksekusi dari $PATH ” perilaku, meskipun:

[[email protected] ~]# hash
hits    command
   1    /bin/ls
[[email protected] ~]# hash ls
[[email protected] ~]# hash
hits    command
   0    /lol-wut/ls
[[email protected] ~]#

Anda sebagian besar hanya ingin melakukan ini jika Anda menginginkan sesuatu dari tabel hash dan tidak 100% bahwa Anda dapat keluar dan masuk kembali dengan sukses, 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 sebagai salah satu perintah "paling berguna" tetapi memiliki beberapa kasus penggunaan.


Linux
  1. Kuasai perintah Linux ls

  2. Pengantar perintah alternatif di Linux

  3. Pengantar perintah diff

  1. Bagaimana cara menggunakan perintah nama dasar?

  2. Perintah "eval" Di Bash?

  3. Tujuan Perintah 'instal'?

  1. Tampilan praktis dari perintah xargs

  2. Dapatkan Pelengkap Dari Hasil Perintah Ls?

  3. Jelaskan Pilihan Perintah Readlink?