エラーメッセージ辞典

Linuxを学び始めると、必ずと言っていいほど遭遇するエラーメッセージを集めた、初級の付録ページです(全16件)。「メッセージ→何が起きているか→どうすればよいか」の3段構成で、慌てずに原因を切り分けられるようにまとめています。

使い方: 検索欄にエラーメッセージの一部やキーワードを入力すると、一致する項目だけがその場で絞り込まれます。何も入力していないときは、カテゴリの見出しをクリックすると開閉できます。より詳しい原因の切り分け手順はトラブルシューティングのページでも扱っています。

コマンドが実行できないとき

bash: mycommand: command not found

何が起きているか: シェルが第7章で説明したPATH(決まったディレクトリの一覧)の中をひととおり探しても、mycommandという名前の実行ファイルが見つからなかった、という意味です。
どうすればよいか: 次の3つを順番に確認しましょう。①コマンド名にタイプミスがないか(Linuxは大文字・小文字を区別します)。②本当にインストール済みのソフトウェアか(未インストールなら第9章のパッケージ管理でインストールします)。③/sbinなど、一般ユーザーのPATHに含まれていない場所にあるコマンドを打っていないか(sudo コマンド名やフルパス指定で実行できないか試します)。より詳しい切り分け方はトラブルシューティング「コマンドが見つからない」でも扱っています。関連する章: 初級 第7章 / TS.04

sudo: mycommand: command not found

何が起きているか: 自分のユーザーでは普通に実行できるのに、sudoを付けた瞬間だけ見つからなくなる場合があります。sudoで実行すると、通常のログインシェルとは別の、より絞り込まれたPATH(secure_pathという設定で管理されることが多い)が使われることがあるためです。
どうすればよいか: フルパス(例: sudo /usr/local/bin/mycommand)で実行できるか試してみましょう。恒久的にPATHへ追加したい場合は、管理者が/etc/sudoersのsecure_path設定を編集する必要があります(中級以降で扱う内容です)。関連する章: 初級 第7章 / 中級以降

bash: ./script.sh: Permission denied

何が起きているか: 第6章で学んだパーミッションが原因です。読み取り・書き込み・実行のいずれかの権限が不足しています。スクリプトを実行しようとしている場合は、実行権限(x)が付いていないケースが典型的です。
どうすればよいか: ls -lで対象の権限を確認し、自分が所有者・グループ・その他のどれに該当するかを整理しましょう(第6章)。スクリプトを実行したいだけならchmod +x script.shで実行権限を付与します。ディレクトリの中に入れない場合は、ディレクトリ自体のx権限(通り抜ける権限)が無い可能性も確認しましょう。より詳しい切り分け方はトラブルシューティング「Permission deniedでファイルが操作できない」でも扱っています。関連する章: 初級 第6章 / TS.05

bash: syntax error near unexpected token `)'

何が起きているか: シェルへの入力が、文法的に完結しないまま実行されようとしたことを示すエラーです。よくある原因は、括弧やクォート(引用符)の閉じ忘れ、あるいは全角文字が紛れ込んでしまっていることです。
どうすればよいか: 直前に入力したコマンドの括弧・クォートの数が合っているか数えてみましょう。特にWebページや文書からコマンドをコピペした場合、全角スペースや全角の「(」「)」が紛れ込んでいないか確認するのがおすすめです。関連する章: 初級 第3章

-bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory

何が起きているか: WindowsとLinuxでは、改行の表し方が異なります(Windows=CRLF、Linux=LF)。Windows環境で作成・編集したスクリプトをLinuxで実行しようとすると、1行目の#!/bin/bashの末尾に見えない余分な文字(^Mと表示される、復帰コード)がくっついてしまい、シェルが「/bin/bash^Mという名前のプログラムなんて存在しない」と誤解してしまいます。
どうすればよいか: dos2unix script.shコマンドがあれば、それでファイルの改行コードをLinux形式(LF)に変換できます。無い場合はsed -i 's/\r$//' script.shでも同様の変換ができます(中級で扱うsedの応用例です)。テキストエディタ側で「改行コードをLFに設定して保存」できる場合は、そちらで直しても構いません。関連する章: 初級 第5章 / 中級

ファイル・ディレクトリの操作でつまずいたとき

cat: memo.txt: No such file or directory

何が起きているか: 指定した名前のファイル・ディレクトリが、その場所には存在しないという意味です。原因の多くは、①現在地(カレントディレクトリ)を勘違いしている、②相対パスと絶対パスを取り違えている、③大文字・小文字の違い(Linuxは区別します)、のいずれかです。
どうすればよいか: pwdで現在地を確認し、lsで実在するファイル名を確認しましょう。タイプミスを避けるため、表示されたファイル名はコピペする、またはタブ補完(第3章のコラム参照)を使うのが確実です。関連する章: 初級 第2章 / 第3章

cat: notes: Is a directory / cd: memo.txt: Not a directory

何が起きているか: catのような「ファイル用」のコマンドにディレクトリ名を渡してしまった場合や、逆にcdのような「ディレクトリ用」の操作にファイル名を渡してしまった場合に出るエラーです。コマンドが「ファイルのつもりで開いたらディレクトリだった(あるいはその逆)」と教えてくれています。
どうすればよいか: ls -lで、対象が本当にファイルなのかディレクトリなのかを確認してから、適切なコマンドを選び直しましょう(先頭がdならディレクトリ、-ならファイルです)。関連する章: 初級 第2章 / 第6章

rmdir: failed to remove 'notes': Directory not empty

何が起きているか: rmdirは、中身が空のディレクトリしか削除できない設計になっています。これは、うっかり中身ごと消してしまう事故を防ぐための安全装置です。中にファイルやディレクトリが残っている場合、このエラーになります。
どうすればよいか: 中身ごと削除したい場合は、第4章で扱ったrm -rを使います。先に中身を確認してから安全に消したい場合は、まずlsで中を見てから判断しましょう。関連する章: 初級 第4章

bash: ./script.sh: Text file busy

何が起きているか: 実行中のプログラム本体そのものを、直接上書きしようとしたときに出る、比較的珍しいエラーです。プログラムが動いている間、OSはそのデータ領域を使用中として扱うため、直接の上書きができません。
どうすればよいか: 動いているプロセスを一度終了(第7章のkill)してから書き換えましょう。あるいは、新しい内容を別名で保存してからmvで置き換える方法もあります。mvは第4章で学んだとおり、同じファイルシステム内では名前の対応表を書き換えるだけの操作なので、実行中でも安全にすり替えられます。関連する章: 初級 第4章 / 第7章

bash: /bin/rm: Argument list too long

何が起きているか: ワイルドカードなどで展開した結果、コマンドに渡す引数(ファイル名)の数があまりに多すぎて、OSが一度に受け取れる上限を超えてしまった状態です。第7章で学んだとおり、ワイルドカードはシェルが実際のファイル名一覧に展開してからコマンドに渡すため、対象が数万〜数十万個などになると、この上限にぶつかることがあります。
どうすればよいか: xargsというコマンドを使うと、大量の引数を適切な数に分割して、繰り返しコマンドを実行してくれます(例: find . -name "*.log" | xargs rm)。findとxargsの組み合わせは、大量のファイルをまとめて操作するときの定番パターンです。関連する章: 初級 第7章

ディスクやメモリなど、リソースにまつわるエラー

umount: /mnt/usb: target is busy

何が起きているか: アンマウント(取り外し)しようとしたディスクを、まだどこかのプロセスが使用中であることを示すエラーです。そのディレクトリの中に自分のターミナルがいる、どこかのプログラムがファイルを開いたままになっている、といった状況で起こります。
どうすればよいか: まず、自分のターミナルが対象ディレクトリの中にいないか確認し、いる場合はcdで一旦抜けましょう。それでも解決しない場合、中級以降で扱うlsofやfuserというコマンドで、どのプロセスが使用中かを特定できます。関連する章: 初級 第2章 / 中級

cp: writing 'file.txt': No space left on device

何が起きているか: ディスクの空き容量が尽きている、という意味です。詳しい容量の調べ方(dfコマンドなど)は中級で扱いますが、初級のうちは「ディスクがいっぱいになった」という意味だけ理解しておけば十分です。
どうすればよいか: 不要なファイルを削除して空き容量を確保しましょう。ただし、ファイルを削除したのに空き容量が増えない場合は、第4章で学んだ「使用中のファイルは、名前を消してもプログラムが開いている間はデータが残り続ける」という仕組みが関係している可能性があります。詳しい切り分け方はトラブルシューティング「ディスクの空き容量がない」でも扱っています。関連する章: 初級 第4章 / TS.01

Killed

何が起きているか: 直前に実行していたプログラムが、OSによって強制終了されたことを示すメッセージです。多くの場合、メモリを使いすぎたプログラムを、システム全体を守るためにOSが自動的に強制終了する「OOM Killer(Out Of Memory Killer)」という仕組みによるものです。
どうすればよいか: 扱うデータ量を減らす、一度に処理する範囲を分割する、より多くのメモリを積んだ環境で実行する、といった対処が必要になります。実機ではdmesgコマンド(要sudo、中級以降)で「Out of memory」や「Killed process」という記録を確認できます。関連する章: 初級 第7章 / 中級

ネットワークにつながらないとき

ssh: connect to host 203.0.113.10 port 22: Connection refused

何が起きているか: 相手のマシン自体は応答しているものの、指定したポート番号(この例では22番)で待ち受けているサービスが存在しない、という意味です。サービスが起動していない、ポート番号を間違えている、といった原因が考えられます。
どうすればよいか: 接続先のサービス(この例ではSSH)が起動しているかを確認しましょう。ポート番号の指定ミスがないかも見直します。詳しい切り分け方はトラブルシューティング「SSHで接続できない」でも扱っています。関連する章: TS.03 / 中級 第22章

ssh: connect to host 203.0.113.10 port 22: Connection timed out

何が起きているか: 一定時間待っても、相手からまったく応答が返ってこない、という意味です。ネットワークの経路上でパケットが破棄されている、ファイアウォールで(相手に何も知らせずに)拒否されている、相手先が起動していない、といった原因が考えられます。「相手はいるが拒否された(Connection refused)」のとは異なり、「そもそも応答が返ってこない」点が特徴です。
どうすればよいか: 接続先のIPアドレス・ポート番号に誤りがないか確認しましょう。ネットワークの経路やファイアウォール設定の確認は中級以降で扱う内容ですが、初級の段階では「無言で無視されている状態」というイメージを持っておけば十分です。関連する章: 中級 第22章

ssh: connect to host 203.0.113.10 port 22: No route to host

何が起きているか: 相手までの通信経路(ルート)そのものが見つからない、というネットワークの土台部分でのエラーです。IPアドレスの指定ミスや、ネットワークの設定自体に問題があるケースが多く、上の2つのエラーよりも一段手前の段階でつまずいていることを示します。
どうすればよいか: IPアドレスの入力ミスがないか、自分のマシンのネットワーク設定に問題がないかを見直しましょう。詳しいネットワークの基礎は中級編で扱います。関連する章: 中級 第22章

エラーに出会ったときの心構え: エラーメッセージは「あなたの操作が失敗した証拠」ではなく、「今何が起きているかをコンピュータが教えてくれているヒント」です。焦って再入力を繰り返す前に、メッセージ全体を最後まで読み、分からない単語があればこのページや用語集で確認する習慣をつけると、原因の切り分けが早くなります。