シンボリックリンク(symlink)が読めない/壊れリンクの検査と修復

  • URLをコピーしました!
目次

概要

Linux では、ファイルやディレクトリへの参照を「シンボリックリンク(symlink)」として作成できます。
しかし、リンク先のファイルが削除・移動された場合やパス指定が誤っている場合、「リンクが壊れている」「開けない」「Not a directory」などのエラーが発生します。

この記事では、シンボリックリンクが読めない・壊れている場合の原因と修復方法を、実際のコマンド例とともに詳しく解説します。

想定されるエラーメッセージ

bash: cd: sample_link: No such file or directory
ls: cannot access 'sample_link': No such file or directory

主な原因一覧

原因内容
リンク先ファイルが削除・移動された元ファイルが存在しないためリンクが無効になっている
相対パス指定の誤りシンボリックリンク作成時のパスが間違っている
権限不足リンク先またはリンク元の権限でアクセスできない
ファイルシステムの不整合マウントミスやファイルシステム破損により参照不可

原因①:リンク先ファイルが削除・移動された

🔍 確認方法

ls -l sample_link

✅ 正常例

lrwxrwxrwx 1 user user 15 Oct  4 10:00 sample_link -> /home/user/file.txt

(矢印の先 /home/user/file.txt が存在)

❌ 異常例

lrwxrwxrwx 1 user user 15 Oct  4 10:00 sample_link -> /home/user/file.txt
ls: cannot access '/home/user/file.txt': No such file or directory

💡 解決方法

リンク先ファイルを再作成するか、リンクを再指定します。

ln -sf /correct/path/file.txt sample_link

原因②:相対パス指定の誤り

🔍 確認方法

readlink sample_link

✅ 正常例

../data/file.txt

実際に ../data/file.txt が存在していればOK。

❌ 異常例

../data/file.txt
ls ../data/file.txt
ls: cannot access '../data/file.txt': No such file or directory

💡 解決方法

正しいパスで再作成します。

ln -snf ../correct_path/file.txt sample_link

原因③:権限不足

🔍 確認方法

ls -ld sample_link $(readlink sample_link)

✅ 正常例

lrwxrwxrwx 1 user user ... sample_link -> /var/data/file.txt
-rw-r--r-- 1 user user ... /var/data/file.txt

❌ 異常例

-rw------- 1 root root ... /var/data/file.txt

💡 解決方法

リンク先の権限を見直します。

sudo chmod 644 /var/data/file.txt
sudo chown user:user /var/data/file.txt

原因④:ファイルシステムの不整合・マウントミス

🔍 確認方法

mount | grep data
df -hT | grep data

❌ 異常例

リンク先ディレクトリのマウントが外れている、またはエラーになっている場合。

💡 解決方法

再マウントまたは修復を行います。

sudo mount -a
# 必要に応じてファイルシステムチェック
sudo fsck /dev/sdXn

🧾 状態確認コマンドまとめ

目的コマンド
シンボリックリンクの詳細確認ls -l
リンク先の確認readlink <link>
壊れリンクを一括検出find -L . -type l
ファイルシステムの状態確認df -hT / mount

✅ 原因と解決策対応表

原因確認コマンド解決方法
リンク先ファイル削除・移動ls -lln -sf /正しいパス リンク名
相対パス指定の誤りreadlink正しいパスで再作成
権限不足ls -ldchmod / chown
ファイルシステム不整合mount / df -hTmount -a / fsck

まとめ

シンボリックリンクが読めない場合、まずは「リンク先が存在するか」を確認し、次に「権限」や「ファイルシステムの状態」を確認するのがポイントです。
特に find -L . -type l を使うと壊れたリンクを一括で洗い出せるため、定期点検にも活用できます。

目次