第4章:よくあるエラーと対処法

4.0 この章で学ぶこと

  • よくあるエラーの原因の見当を付けられる
  • エラーメッセージから次に取るべき行動を判断できる
  • トラブルシューティング用コマンドで状況を確認できる
切り分けの基本:実務では「直前の変更」「再現性」「影響範囲」「ログ(いつ/どこで/誰が)」「現在の状態(CPU/メモリ/ディスク/ネットワーク)」を整理すると、対応が速くなります。

4.1 初心者が遭遇しやすいエラー TOP 8

Linux エラーメッセージ診断チャート 1. Permission denied 権限がありません 解決: sudo を使う または chmod で権限変更 2. Command not found コマンドが見つかりません 解決: apt/yum/dnf でインストール または PATH を確認 3. No such file or directory ファイルが存在しません 解決: パスを確認 pwd と ls で現在地確認 4. Is a directory ディレクトリです(ファイルではない) 解決: cd でディレクトリに移動 または正しいファイル名を指定 5. Device or resource busy 使用中のため操作できません 解決: lsof でプロセス確認 必要なら kill で終了 6. No space left on device ディスク容量不足 解決: df -h で容量確認 不要ファイルを削除 7. Connection refused 接続が拒否されました 解決: サービスが起動しているか確認 systemctl status でチェック 8. Syntax error 構文エラー 解決: スペルミスや記号を確認 特にスペースや引用符に注意

4.2 エラー別対処法詳細

Permission denied

bash: /etc/hosts: Permission denied

原因:

ファイルやディレクトリへのアクセス権限がない

解決方法:

$ sudo nano /etc/hosts # 管理者権限で実行
$ ls -l file.txt # 権限を確認
$ chmod 644 file.txt # 権限を変更
$ sudo chown $USER file.txt # 所有者を変更

Command not found

git: command not found

原因:

コマンドがインストールされていない、または PATH が通っていない

解決方法:

$ sudo apt install git # Ubuntu/Debian
$ sudo yum install git # CentOS/RHEL
$ sudo dnf install git # Fedora/RHEL8+
$ which git # インストール確認
$ echo $PATH # PATH確認
$ export PATH=$PATH:/new/path # 一時的に PATH 追加

No such file or directory

cat: test.txt: No such file or directory

原因:

指定したファイルやディレクトリが存在しない

解決方法:

$ pwd # 現在のディレクトリを確認
$ ls # ファイル一覧を確認
$ ls -la # 隠しファイルも含めて確認
$ find . -name "test.txt" # ファイルを検索

Is a directory

cat: mydir: Is a directory

原因:

ディレクトリをファイルとして扱おうとした(例: catcp の引数にディレクトリを指定)

解決方法:

$ ls -la mydir # 種類(ファイル/ディレクトリ)を確認
$ cd mydir # ディレクトリなら移動して中身を見る
$ ls -la # 中のファイルを確認して正しいファイル名を指定

No space left on device

cp: error writing './large.file': No space left on device

原因:

ディスクの空き容量が不足

解決方法:

$ df -h # ディスク使用状況確認
$ du -sh * # 各ディレクトリのサイズ確認
$ sudo apt autoremove # 不要パッケージ削除
$ sudo apt clean # キャッシュクリア
$ find /tmp -type f -mtime +7 -print # 例: 7日より古いファイルをまず確認
$ find /tmp -type f -mtime +7 -delete # 確認後に削除(慎重に)

Device or resource busy

umount: /mnt: target is busy

原因:

ファイルやディレクトリが使用中

解決方法:

$ lsof /mnt # 使用中のプロセスを確認
$ fuser -v /mnt # 使用中のプロセスを表示
$ cd / # ディレクトリから移動
$ sudo umount /mnt # 通常のアンマウント
$ sudo umount -l /mnt # 最終手段(遅延アンマウント)

Connection refused

curl: (7) Failed to connect to localhost port 80: Connection refused

原因:

サービスが起動していない、またはポートが閉じている

解決方法:

$ sudo systemctl status apache2 # Debian/Ubuntu
$ sudo systemctl status httpd # RHEL系
$ sudo systemctl start apache2 # Debian/Ubuntu
$ sudo systemctl start httpd # RHEL系
$ sudo ss -tlnp # ポート確認
$ sudo ufw status # Debian/Ubuntu(UFW)
$ sudo firewall-cmd --state # RHEL系(firewalld)
$ sudo ufw allow 80/tcp # Debian/Ubuntu
$ sudo firewall-cmd --permanent --add-service=http && sudo firewall-cmd --reload # RHEL系

Syntax error

bash: syntax error near unexpected token `then'

原因:

スペルミス、引用符('/")の閉じ忘れ、if/fi の対応漏れなど

解決方法:

$ bash -n script.sh # 実行せず構文だけチェック
$ nl -ba script.sh | sed -n '1,120p' # 行番号付きで該当箇所を確認

4.3 エラーメッセージの読み方

エラーメッセージの構造

bash: /usr/bin/foo: No such file or directory

この例を分解すると:

  • bash: エラーを出したプログラム
  • /usr/bin/foo: 問題のあるファイルやコマンド
  • No such file or directory: エラーの内容

デバッグのコツ

  1. エラーメッセージを最後まで読む - 重要な情報は最後にあることが多い
  2. ファイル名やパスを確認 - タイポが原因の場合が多い
  3. 権限を確認 - ls -l で確認
  4. ログファイルを見る - /var/log/ 以下のログを確認
  5. エラーメッセージで検索 - Web検索や公式ドキュメントで情報を確認する

4.4 トラブルシューティングコマンド

システム情報確認

$ uname -a # システム情報
$ cat /etc/os-release # OS情報
$ free -h # メモリ使用状況
$ df -h # ディスク使用状況
$ top # プロセス監視

ログ確認

$ sudo tail -f /var/log/syslog # システムログ(Debian/Ubuntu)
$ sudo tail -f /var/log/messages # システムログ(RHEL系)
$ sudo journalctl -xe # systemdログ
$ dmesg # カーネルメッセージ
$ last # ログイン履歴

ネットワーク診断

$ ping -c 4 1.1.1.1 # 接続確認(環境により ICMP が遮断されることがある)
$ ip addr # IPアドレス確認
$ ss -tlnp # ソケット/ポート確認
$ netstat -tlnp # ポート確認(net-tools)
$ traceroute 1.1.1.1 # 経路確認(環境により UDP/ICMP が遮断されることがある)

4.5 よくある質問と回答

Q: sudo で求められるパスワードを忘れました

A: 多くの環境では、sudo で求められるのは自分のログインパスワードであり、専用の「sudo パスワード」ではありません。思い出せない場合は、許可された手順でリカバリーモード等から再設定するか、管理者に依頼します。

$ passwd username # (rootシェルで実行)

Q: ファイルを誤って削除しました

A: Linux では通常、削除したファイルの復元は困難です。まずはバックアップ/スナップショットの有無を確認し、再発防止として定期的なバックアップを運用します。

Q: システムが重い/遅い

A: top コマンドでCPU/メモリ使用率の高いプロセスを確認します。

$ top # qで終了

Q: パッケージの依存関係エラー

A: パッケージマネージャーの修復コマンドを実行します。

$ sudo apt --fix-broken install # Ubuntu/Debian
$ sudo yum-complete-transaction # CentOS/RHEL(必要なら yum-utils を導入)

4.6 まとめ

  • まずはエラーメッセージを読み、「存在しない」「権限不足」「場所が違う」などを切り分ける
  • 必要に応じて top/df/journalctl などで状況を確認する
  • 再発防止には、手順の記録とバックアップが有効
次章予告:次章では、これまでのコマンドを組み合わせて簡単なシェルスクリプトを作成し、定期実行まで扱います。