GNU/Linux >> Linux の 問題 >  >> Linux

ハッシュコマンドの目的は?

hashを実行する場合 ハッシュが最後にリセットされてから実行されたすべてのコマンドのパスが表示されます(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

マニュアルページによると、ハッシュの目的は次のとおりです。

/ usr / bin / hashユーティリティは、現在のシェル環境が見つかったユーティリティの場所を記憶する方法に影響を与えます。
指定された引数に応じて、記憶された場所のリストにユーティリティの場所を追加します
または、リストの
コンテンツを削除します。引数が指定されていない場合は、
リストの内容を報告します。 -r オプションを使用すると、
シェルは記憶されているすべての場所を忘れます。

シェルに組み込まれているユーティリティは、
ハッシュによって報告されません。

コマンドを入力した回数を確認する以外に、hashのユーティリティを確認できません。 。

thegeekstuff.comの便利なコマンドトップ15にも掲載されました

hashはどのようになっていますか 便利ですか?

承認された回答:

hash bashの組み込みコマンドです。ハッシュテーブルはbashの機能です これにより、$PATHを検索する必要がなくなります。 結果をメモリにキャッシュしてコマンドを入力するたびに。結果を明らかに無効にするイベント($PATHの変更など)でテーブルがクリアされます )

hash コマンドは、そのシステムと対話する方法です(必要と思われる理由が何であれ)。

いくつかの使用例:

  • ご覧のとおり、引数なしで入力した場合、どのコマンドを何回ヒットしたかが出力されます。これにより、最も頻繁に使用するコマンドがわかる場合があります。

  • これを使用して、非標準の場所にある実行可能ファイルを記憶することもできます。

例:

[[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] ~]#

これは、$PATHの外部のディレクトリに実行可能ファイルが1つしかない場合に役立つ可能性があります。 そのディレクトリにすべてを含めるのではなく、名前を入力するだけで実行したいこと($PATHに追加した場合に効果があります) 。

エイリアスは通常これも実行できますが、現在のシェルの動作を変更しているため、開始するプログラムにはマッピングされません。ここでは、唯一の実行可能ファイルへのシンボリックリンクがおそらく望ましいオプションです。 hash それを行う1つの方法です。

  • これを使用して、ファイルパスの記憶を取り消すことができます。これは、新しい実行可能ファイルが以前のPATHにポップアップする場合に役立ちます。 ディレクトリまたはmvを取得します 「どこか別の場所に移動し、bashを強制的に外に出して、最後に見つけた場所ではなく、もう一度見つけたいと考えています。
関連:Linux – sysrqはキーストロークで再起動しませんが、echo“ b”> / proc / sysrq-triggerで再起動しますか?

例:

[[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 コマンドにより、新しいバージョンのlsが発生しました $PATHに以前に表示される実行可能ファイル ただし、ハッシュテーブルのパージはトリガーされませんでした。 hash -dを使用しました lsのエントリを選択的に削除します ハッシュテーブルから。その後、Bashは$PATHを調べることを余儀なくされました 繰り返して、それが行われたとき、それは新しい場所でそれを見つけました(以前に実行されていたよりも$ PATHで早く)。

この「$PATHから実行可能ファイルの新しい場所を見つける」を選択的に呼び出すことができます ただし、」の動作:

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

ほとんどの場合、ハッシュテーブルから何かを取り出して、ログアウトしてから正常に再度ログインできるとは限らない場合、またはシェルに加えた変更を保持したい場合は、これを実行するだけです。

古いマッピングを取り除くために、hash -rを実行することもできます (またはexport PATH=$PATH )これは、bashのハッシュテーブル全体を効果的にパージするだけです。

そのような小さな状況がたくさんあります。これを「最も便利な」コマンドの1つと呼ぶかどうかはわかりませんが、いくつかの使用例があります。


Linux
  1. Linuxでのalternativesコマンドの概要

  2. diffコマンドの概要

  3. Bashの「評価」コマンド?

  1. Readlinkコマンドのオプションを説明しますか?

  2. Linuxでのddコマンドの5つの実用例

  3. Linux での locate コマンド

  1. Linuxlsコマンドをマスターする

  2. xargsコマンドの実用的なビュー

  3. basenameコマンドの使用方法は?