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を強制的に外に出して、最後に見つけた場所ではなく、もう一度見つけたいと考えています。
例:
[[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つと呼ぶかどうかはわかりませんが、いくつかの使用例があります。