当サイトはプロモーションが含まれています。

root権限で削除できないファイルを削除する

コード

サーバー内で動作しているアプリが生成したファイルがroot権限でも削除できなかったので、原因と対処方法を調査してみました。(アプリ側で削除しようとすると削除できる)

lsコマンドで調べてみると、

[root@server ~]# ll -a
-rw-r--r--   1 apply  apply      8  7月  1 11:44 2016 sample.txt

と、権限的には問題なし。
けれど、削除やファイル名変更などを行おうとすると、

[root@server ~]# rm sample.txt
rm: remove 通常ファイル `sample.txt'? y
rm: cannot remove `sample.txt': 許可されていない操作です

[root@server ~]# mv sample.txt sample_2.txt
mv: cannot move `sample.txt' to `sample_2.txt': 許可されていない操作です

エラーとなります。(viでファイルを開くとreadonly

Google先生で調べてみると「ファイル属性が付与されているのでは?」とのこと。
lsattrコマンドで確認できるらしいので確認してみると、

[root@server ~]# lsattr
----i--------e- ./sample.txt

「i」が付与されていました。これは削除や変更をできなくする属性とのこと。
他に「a」(追記のみ許可)「u」(削除禁止)などの属性もある模様です。

chattrコマンドで属性を変更できるらしいので取り払ってみると、

[root@server ~]# chattr -i sample.txt

[root@server ~]# lsattr
-------------e- ./sample.txt

[root@server ~]# rm sample.txt
rm: remove 通常ファイル `sample.txt'? y

無事に削除できました。