本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「hash」コマンドです。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、シェルが記憶しているコマンドのパスを確認する「hash」コマンドです。
シェルがビルトインコマンドではないコマンドを実行する場合、環境変数PATHから該当する実行ファイルを探す必要がありますが、頻繁に使うコマンドは「ハッシュテーブル」と呼ばれる場所に記憶しています。「hash」はこのハッシュテーブルの表示や削除、追加を行うコマンドになります。
hashコマンドの主なオプションは次の通りです。
オプション | 意味 |
---|---|
-r | ハッシュテーブルに記憶しているパス情報を消去する |
-d コマンド名 | コマンド名に対応する記憶を削除する |
-t コマンド名 | コマンド名に対応するパス名を表示する |
-p パス名 コマンド名 | コマンド名に対応するフルパス名を登録する |
-l | 現在の記憶内容を「hash -p パス名 コマンド名」という書式で出力する(出力を保存しておくとスクリプトとして実行できる) |
「type」コマンド(本連載第13回参照)を実行すると、「<コマンド名> is hashed」あるいは「<コマンド名> はハッシュされています」と表示されることがあります。これは、Bashが既にこのコマンドの位置を記憶している、従って環境変数PATHのディレクトリを検索せずにその位置にあるコマンドを実行する、という意味です。
コマンドの位置を記憶している場所は「ハッシュテーブル」と呼ばれ、hashコマンドでその内容を一覧表示できます。なお、hashはBashのビルトインコマンドです。
「hash」だけを実行すると、ハッシュテーブルに記憶されているパス名と、そのパスでコマンドを実行した回数が表示されます。また、「hash -t コマンド名」を実行すると、コマンド名に対応するハッシュテーブルの記憶内容を確認することができます(画面1)。複数のコマンドを同時に指定したい場合は、空白で区切ります。
hash
(ハッシュテーブルに記憶されているパスを表示する)
hash -t コマンド名
(コマンド名に対応する記憶内容を表示する)
ハッシュテーブルは、通常、自動的にメンテナンスされます。しかし、コマンドを削除したり、移動したりした影響などで「ファイルは存在しないのに、ハッシュテーブルにだけ残っている」といった現象が起こることがあります。このような場合には「hash -d コマンド名」で該当するコマンドの記憶を削除したり、「hash -r」でテーブル全てを削除したりすることができます。
hash -d コマンド名
(指定したコマンドの記憶を削除する)
hash -r
(ハッシュテーブルを削除する)
例えば、以下の画面2ではコマンドラインで「tree」と入力したところ、“「/usr/local/bin/tree」がない”というエラーメッセージが表示されています。treeは手動で追加したコマンドで、「rm」コマンドで削除したために「/usr/local/bin」には存在しませんが、ハッシュテーブルにパス情報が残っていたためこのようなエラーが表示されました。
「hash -d tree」でハッシュテーブルからtreeコマンドの情報を削除すると、「コマンドが見つかりませんでした」というエラーに変わることが分かります(画面2)。
PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.