hash
bash組み込みコマンドです。ハッシュテーブルは、結果をメモリにキャッシュすることにより、コマンドを入力するたびbash
に検索する必要がないようにする機能です$PATH
。結果を明らかに無効にするイベント(変更など$PATH
)でテーブルがクリアされます
hash
コマンドは、あなたが(あなたがする必要があると感じ方の理由で)そのシステムと対話するだけの方法です。
いくつかのユースケース:
例:
[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 ~]#
それは$PATH
、そのディレクトリのすべてを含めるのではなく、名前を入力するだけで実行したい外部のディレクトリに単一の実行可能ファイルがある場合に便利です(これを追加すると効果があります$PATH
)。
エイリアスは通常これを行うこともできますが、現在のシェルの動作を変更しているため、キックオフするプログラムにはマップされません。ここでは、おそらく単独の実行可能ファイルへのシンボリックリンクが望ましいオプションです。hash
それを行う1つの方法です。
- これを使用して、ファイルパスを記憶することができます。これは、新しい実行可能ファイルが以前の
PATH
ディレクトリにポップアップしたり、mv
別の場所に移動したりして、bashを強制的に終了させて、最後に見つけた場所ではなく再び見つけたい場合に便利です。
例:
[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 ~]#
このcp
コマンドにより、新しいバージョンのls
実行可能ファイルがmyの前に表示されました$PATH
が、ハッシュテーブルのパージはトリガーされませんでした。ハッシュテーブルからhash -d
選択的にエントリを削除するために使用していましたls
。その後、Bashは$PATH
再度調べなければならなかったため、新しい場所(以前実行していたよりも$ PATHで以前)で見つけました。
$PATH
ただし、この「実行可能ファイルの新しい場所を見つける」動作を選択的に呼び出すことができます。
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits command
0 /lol-wut/ls
[root@policyServer ~]#
ハッシュテーブルから何かを望んでいて、ログアウトしてから正常に戻ることができなかった場合、またはシェルに加えた変更を保存したい場合は、たいていこれを行うだけです。
古いマッピングを取り除くために、bashのハッシュテーブル全体を効果的に削除するhash -r
(またはexport PATH=$PATH
)こともできます。
そのような小さな状況がたくさんあります。「最も便利な」コマンドの1つと呼ぶかどうかはわかりませんが、いくつかの使用例があります。