この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:atom
更新日時:2026-06-11 07:10:02

タイトル: エラー一覧
SEOタイトル: Linux よくあるエラー集(Permission denied / No such file / command not found 他)

この記事の要点
  • Permission denied: ファイル・ディレクトリの権限不足。ls -la で確認、chmod / chown で修正
  • No such file or directory: パス誤り / 改行コード CRLF(シェルスクリプト) / 32bit バイナリ実行も同じ表示に
  • command not found: PATH に無い / パッケージ未インストール / typo
  • Segmentation fault (core dumped): メモリ不正アクセス。dmesggdbcore ファイルで解析
  • Out of memory: OOM Killer 発動。dmesg | grep -i oom/var/log/syslog、メモリ確保戦略を見直し

このページについて

Linux で開発・運用していて頻出するエラーメッセージと、その原因 / 対処を一覧でまとめます。詳細は各記事を参照してください。

権限・ファイル系

Permission denied

$ ./deploy.sh
bash: ./deploy.sh: Permission denied

$ cat /etc/shadow
cat: /etc/shadow: Permission denied

$ mkdir /opt/app
mkdir: cannot create directory '/opt/app': Permission denied

原因: 実行権限なし / 読み取り権限なし / 親ディレクトリへの書込権限なし / SELinux / AppArmor。

対処:

# 1. 権限の確認
ls -la deploy.sh
# -rw-r--r-- 1 user user 100 Jun 10 deploy.sh  ← x が無い

# 2. 実行権限付与
chmod +x deploy.sh
chmod 755 deploy.sh

# 3. 所有者を変更
sudo chown user:user deploy.sh

# 4. ディレクトリの場合は再帰
sudo chown -R user:user /opt/app
sudo chmod -R 755 /opt/app

# 5. sudo で実行
sudo ./deploy.sh

# 6. SELinux / AppArmor の確認
getenforce       # SELinux 状態
sudo ausearch -m AVC -ts recent   # SELinux 拒否ログ
sudo aa-status   # AppArmor 状態

No such file or directory

$ cat config.yml
cat: config.yml: No such file or directory

$ ./script.sh
-bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory
                                  # ↑ 改行コードが CRLF(Windows 起源)

意外な原因:

  • シェバン行の改行コードが CRLFdos2unix script.sh
  • シェバン行のインタプリタパス間違い (/bin/python なのに /usr/bin/python) → 修正 or symlink
  • 32bit バイナリを 64bit OS で実行sudo apt install libc6-i386 / ldd で確認
  • 動的ライブラリが見つからないldd a.out で「not found」を確認、LD_LIBRARY_PATH 設定 or /etc/ld.so.conf.d/ に追記 + ldconfig

Read-only file system

$ touch /mnt/data/file
touch: cannot touch '/mnt/data/file': Read-only file system
  • ファイルシステム破損で自動的に ro 再マウントされている → dmesg 確認、fsck
  • SD カードのライトプロテクト
  • 意図的に ro マウントされている → mount -o remount,rw /mnt/data

Disk quota exceeded / No space left on device

$ touch large.bin
touch: cannot touch 'large.bin': No space left on device

# 残量確認(ブロック)
df -h
df -i        # inode(i ノード枯渇の場合)

# 使用量の多いディレクトリを探す
du -sh /var/* 2>/dev/null | sort -h | tail
sudo du -hcx --max-depth=1 / | sort -h

# ログ圧縮 / 削除
sudo journalctl --vacuum-time=7d
sudo apt clean
sudo rm -rf /var/log/old/*.log

# 古いカーネル削除
sudo apt autoremove --purge

コマンド系

command not found

$ git
-bash: git: command not found

# 1. パスを確認
which git
type -a git
echo $PATH

# 2. インストール
sudo apt install git           # Debian / Ubuntu
sudo dnf install git           # RHEL / CentOS / Fedora
brew install git               # macOS

# 3. PATH に追加
export PATH="$HOME/.local/bin:$PATH"   # ~/.bashrc に追記

# 4. sudo で動かしたいのに見つからない場合
sudo env "PATH=$PATH" mycmd
# /etc/sudoers の secure_path を確認

Bad fd number / Argument list too long

$ rm *.log
-bash: /bin/rm: Argument list too long

# 原因: ファイル数が ARG_MAX 超え
getconf ARG_MAX     # 2097152 等

# 対処: xargs / find -delete
find . -name "*.log" -delete
find . -name "*.log" -print0 | xargs -0 rm

プロセス・メモリ系

Segmentation fault (core dumped)

$ ./a.out
Segmentation fault (core dumped)

# core ファイル生成を有効化
ulimit -c unlimited
# 生成先 (Ubuntu は apport, RHEL は /var/lib/systemd/coredump)
cat /proc/sys/kernel/core_pattern

# gdb で解析
gdb ./a.out /var/lib/systemd/coredump/core.a.out.*
(gdb) bt        # スタックトレース

# 実行時の追跡
strace -f -o trace.log ./a.out
ltrace ./a.out

# dmesg にも記録される
dmesg | tail

Out of memory (OOM Killer)

$ java -Xmx8g -jar app.jar
Killed

# OOM 確認
dmesg | grep -i oom
journalctl -k | grep -i oom

# 例: "Out of memory: Killed process 12345 (java) total-vm:..."

# 対処
# 1. メモリ追加 or アプリのメモリ削減
# 2. swap を増やす
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 3. cgroup でアプリのメモリ上限を明示
# 4. 重要プロセスを OOM 対象から外す
echo -1000 > /proc/$(pidof important)/oom_score_adj

Device or resource busy

$ umount /mnt/usb
umount: /mnt/usb: target is busy.

# 誰が掴んでいるか
sudo lsof +D /mnt/usb
sudo fuser -m /mnt/usb

# プロセス強制終了
sudo fuser -mk /mnt/usb

# 遅延アンマウント
sudo umount -l /mnt/usb

I/O 系

エラー意味確認方法
Input/output errorディスク故障 / ネットワーク FS 切断dmesg, smartctl -a /dev/sda
Too many open filesfd 上限到達ulimit -n, /etc/security/limits.conf
Connection refused該当ポートで listen されていないss -tlnp, systemctl status
Connection timed out到達不可・ファイアウォールtraceroute, nc -vz
E2BIG引数リストが大きすぎるxargs で分割
ENOSPC空き容量不足df -h, df -i
EMFILEプロセスごとの fd 上限ulimit -n
ENFILEシステム全体の fd 上限cat /proc/sys/fs/file-max

SELinux 関連

# SELinux が原因か切り分け
sudo setenforce 0          # 一時的に Permissive モード
# → エラーが消えれば SELinux が原因

# 監査ログ
sudo ausearch -m AVC -ts recent
sudo sealert -a /var/log/audit/audit.log

# 個別許可(policycoreutils-python-utils 必要)
sudo audit2allow -a -M mypolicy
sudo semodule -i mypolicy.pp

# 元に戻す
sudo setenforce 1

ログを確認する場所

ログ内容コマンド
dmesgカーネルメッセージ(OOM、ハードウェアエラー)dmesg -T \| tail
journalctlsystemd 統合ログjournalctl -xe, journalctl -u nginx -f
/var/log/syslog or /var/log/messagesシステム全般tail -F
/var/log/auth.log認証関連(sudo / ssh)tail -F
/var/log/audit/audit.logSELinux 監査ausearch

原因不明時の汎用デバッグ手順

  1. 正確なエラーメッセージをコピーして検索(コード番号 / プロセス名込みで)
  2. strace -f -e trace=openat,access,connect でシステムコール追跡
  3. ltrace で動的ライブラリ呼び出し追跡
  4. dmesg -T でカーネル直近メッセージ
  5. journalctl -xe で systemd 統合ログ
  6. 該当パスの権限と SELinux コンテキストls -laZ

FAQ

Q: エラーメッセージが英語で読めない
A: LANG=ja_JP.UTF-8 で日本語化されるパターンもあるが、英語で検索したほうが情報量が多い。OS 全体は英語、必要に応じてコマンド単発で LANG=C を付けるのが定石。

Q: core ファイルが生成されない
A: ulimit -c unlimited がデフォルト 0 になっていることが多い。Ubuntu は apport が捕捉、RHEL は systemd-coredump が捕捉する設定の違いも要確認。

Q: dmesg が「Operation not permitted」になる
A: kernel.dmesg_restrict=1 の影響。sudo dmesg か、sudo sysctl kernel.dmesg_restrict=0 で一時的に開放。