久しぶりに初歩的なところでハマったのでメモ.多人数が使用するサーバ上で,何故かrmすることのできないファイルがあった.パーミッションも所有者もグループも特に変なところは見当たらず,ファイルが壊れているわけでもGUIで他のプログラムが使用中というわけでもない.なのに,rmしようとすると以下のようなエラーが出てしまう(例示しているコマンドラインは手元で再現した状況).

1
2
3
$ rm hehehe
remove hehehe? y
rm: hehehe: Permission denied

sudo権限を持っていないのでなんともしがたいなーと思いつつ,適当にディレクトリ名を”fuga_broken”に変更して放置していたのだけれども,たまたま機会があって人に相談したら「ディレクトリの書き込み権限が無いんじゃない?」と言われて,そこでようやく気がついた.

1
2
3
$ ls -l
合計 0
dr-xr-xr-x 3 yag_ays staff 102  7 13 15:27 fuga/

というわけで,ディレクトリの書き込み権限がなかったせいで,そのディレクトリ内のファイルの消去ができなかっただけだったというオチ.なぜ書き込み権限が無くなっていたのかはいまだに不明だ.対象となるディレクトリをchmodで書き込み権限を付加したら,あっさりファイルを削除することができた.

1
2
3
4
$ chmod +w fuga
$ rm fuga/hehehe
remove fuga/hehehe? y
$ 

なんともまあ呆気なく解決してしまった.普段からディレクトリのパーミッションはまったく変えないので,問題解決の際にディレクトリにまで考えが及ばなく,久々に自分の経験の浅さを実感した.