第4章:よくあるエラーと対処法
4.0 この章で学ぶこと
- よくあるエラーの原因の見当を付けられる
- エラーメッセージから次に取るべき行動を判断できる
- トラブルシューティング用コマンドで状況を確認できる
切り分けの基本:実務では「直前の変更」「再現性」「影響範囲」「ログ(いつ/どこで/誰が)」「現在の状態(CPU/メモリ/ディスク/ネットワーク)」を整理すると、対応が速くなります。
4.1 初心者が遭遇しやすいエラー TOP 8
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 # 所有者を変更
$ 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 追加
$ 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" # ファイルを検索
$ ls # ファイル一覧を確認
$ ls -la # 隠しファイルも含めて確認
$ find . -name "test.txt" # ファイルを検索
Is a directory
cat: mydir: Is a directory
原因:
ディレクトリをファイルとして扱おうとした(例: cat や cp の引数にディレクトリを指定)
解決方法:
$ ls -la mydir # 種類(ファイル/ディレクトリ)を確認
$ cd mydir # ディレクトリなら移動して中身を見る
$ ls -la # 中のファイルを確認して正しいファイル名を指定
$ 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 # 確認後に削除(慎重に)
$ 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 # 最終手段(遅延アンマウント)
$ 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系
$ 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' # 行番号付きで該当箇所を確認
$ 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: エラーの内容
デバッグのコツ
- エラーメッセージを最後まで読む - 重要な情報は最後にあることが多い
- ファイル名やパスを確認 - タイポが原因の場合が多い
- 権限を確認 -
ls -lで確認 - ログファイルを見る -
/var/log/以下のログを確認 - エラーメッセージで検索 - Web検索や公式ドキュメントで情報を確認する
4.4 トラブルシューティングコマンド
システム情報確認
$ uname -a # システム情報
$ cat /etc/os-release # OS情報
$ free -h # メモリ使用状況
$ df -h # ディスク使用状況
$ top # プロセス監視
$ 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 # ログイン履歴
$ 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 が遮断されることがある)
$ 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 を導入)
$ sudo yum-complete-transaction # CentOS/RHEL(必要なら yum-utils を導入)
4.6 まとめ
- まずはエラーメッセージを読み、「存在しない」「権限不足」「場所が違う」などを切り分ける
- 必要に応じて
top/df/journalctlなどで状況を確認する - 再発防止には、手順の記録とバックアップが有効
次章予告:次章では、これまでのコマンドを組み合わせて簡単なシェルスクリプトを作成し、定期実行まで扱います。