UNIXの部屋 コマンド: Command not found


※空白区切りで AND 検索 (例:「ファイル 削除」)

用語集 Command not found コマンドが見付からないというエラー

コマンドラインからコマンド foo を実行しようとしたときに、
% foo
foo: Command not found
とエラーになった場合、以下の原因が考えられる。

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

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

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

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. コマンドが存在しない
以上の 1〜5 のいずれでもないなら、そもそもそういうコマンドはないということ。どこかから探してきてインストールしましょう。ただし、その前に locate コマンドや find コマンドで、どこかにインストールされていないか調べてみるとよい。


頑張って書いたおすすめコンテンツ!