Permission deniedでファイルが操作できない
ファイルを開こう・実行しよう・書き込もうとしたら Permission denied と言われて弾かれる——という状況を切り分けていきます。
どんな症状か
cat や vi で開こうとして拒否される、./script.sh のように実行しようとして拒否される、他のユーザーが作成したファイルを編集しようとして拒否される、といったケースです。
原因を切り分ける
ステップ1:誰が所有していて、誰に何の権限があるか確認する
$ ls -l notes.txt
-rw-r----- 1 alice staff 1240 ... notes.txt
先頭のパーミッション表記(所有者/グループ/その他の3ブロック)と、そのあとの所有者・グループ名を確認します。上の例は「所有者aliceは読み書き可、グループstaffは読み取りのみ、それ以外は権限なし」という意味です。自分がaliceでもstaffのメンバーでもない場合は、Permission deniedになります。
ステップ2:自分がどのユーザー・グループに属しているか確認する
$ whoami
$ id
uid=1001(bob) gid=1001(bob) groups=1001(bob),100(users)
自分のユーザー名と、所属しているグループの一覧を確認します。ステップ1で見たファイルの所有者・グループと照らし合わせます。
ステップ3:実行しようとしている場合は実行権限(x)を確認する
$ ls -l script.sh
-rw-r--r-- 1 alice staff 320 ... script.sh
読み取り権限(r)はあっても実行権限(x)が付いていなければ、./script.sh はPermission deniedになります。
ステップ4:ディレクトリ自体の権限も確認する
ファイル自体の権限に問題がなくても、そのファイルが置かれている親ディレクトリに実行権限(ディレクトリの場合は「中に入る権限」の意味になります)がないと、中のファイルにアクセスできずPermission deniedになることがあります。
解決方法
- 自分のファイルの場合:
chmodで必要な権限を追加します(例:chmod +x script.sh、chmod u+w notes.txt)。 - 他人のファイルの場合: まず所有者に相談し、本当にアクセスが必要な理由を確認します。必要であれば所有者にグループへ追加してもらう(
usermod -aG グループ名 ユーザー名、反映には再ログインが必要)方法もあります。 - むやみにsudoを使わない: sudoで強制的に開くこともできますが、なぜそのファイルに権限がないのか(意図的な保護かもしれません)を先に確認するのが安全です。
関連する章: パーミッションの基本は初級「パーミッションと所有者」、応用的な使い方は中級「パーミッション応用とリンク」で扱っています。