UNIX/Linuxの部屋 用語集:Command not found

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




用語集 Command not found コマンドが見付からないというエラー このエントリーをはてなブックマークに追加

コマンドラインからコマンド foo を実行しようとしたときに、
% foo
foo: Command not found
あるいは
% foo
-bash: foo: コマンドが見つかりません
というエラーになった場合の対処方法をまとめる。


1. タイプミス
まずはタイプミスを疑うこと。人間はコンピュータよりミスをするものである。

2. パスが通っていない
例えば、FreeBSD のデフォルトでは /sbin・/usr/sbin などにパスが通っていない。そのため、mount コマンドや ping コマンドはフルパスで指定するか、/sbin・/usr/sbin/ にパスを通しておかなくてはならない。
% echo $PATH
として、現在のパス設定を確認してほしい。パスの設定方法は下記を参照。

3. ハッシュテーブルを再構築していない
csh か tcsh を使っている場合、コマンドをインストールした直後や、スクリプトを作成した直後に、そのコマンドを実行しようとすると実行できないことがある。これは、シェルのハッシュテーブルの内容が古いままになっており、今インストールした or 作成したばかりのコマンドを見付けられないからである。rehash コマンドを実行してから、再度コマンドを入力すべし。

sh・bash でもハッシュテーブルの仕組みはあるものの、csh・tcsh とは考え方が異なるので、Command not found の原因とはならない。興味がある方は hash コマンドを参照のこと。

4. 実行権限がない
自分でスクリプトを作ったときは、chmod +x を忘れないこと。

5. スクリプトのパスが違っている
これは知らないと結構はまるだろう。スクリプトの1行目には
#!/dir/foo
などと書いてあるが、この /dir/foo が存在しなかったら Command not found となるのである。
/dir/foo: Command not found.
と表示されるならわかりやすいのだが、実際は
スクリプト名: Command not found.
となるので、なかなか気づきにくい。

また、改行コードが CR LF、つまり
#!/dir/foo(CR)(LF)
となっていると、
/dir/foo(CR)
というコマンドを実行しようとして Command not found となる。DOS や Windows で作成したスクリプトを実行するときは注意。

改行コードの確認をするには、hd コマンドや od コマンドでスクリプトをダンプしてみるとよい。
改行コードの変更は、tr・perl・qkc などを使うとよい、

6. 外部パッケージからインストールする必要がある
外部パッケージとして提供されている可能性がある。例えば telnet コマンドや perl コマンドなど、 以前は標準コマンドであったものが外部パッケージとして切り出されたものは数多くある。下記を参照に、外部パッケージとして提供されていないか探してみてほしい。

7. コマンドが存在しない
以上の 1〜7 のいずれでもないなら、そもそもそういうコマンドはないということかもしれない。その前に locate コマンドや find コマンドで、どこかにインストールされていないか調べてみるとよい。