場景:
公司要求卸載軟件時, 也包含卸載一個目錄下的所有文件. 於是去修改刪除文件的shell腳本, 添加了刪除文件及文件夾的命令(當然是在root權限下的)
如: rm -rf /home/vito/****
但發現運行shell腳本時, 死活刪除不了那個目錄下的文件, 當然也就刪除不了目錄, 同時提示----rm: cannot remove '/home/vito/****/xxx.xxx': Permission denied.
在網上查了一下, 說這種情況下, 一般都是該文件被設置了一些不可刪除的屬性, 如圖:
可以通過命令lsattr filename, 查看文件所以具有的屬性, 從上圖也可以看出, 這個文件具有 i 和 a 屬性, 至於這些字母代表什么意思, 可以參考這個連接
http://www.cnblogs.com/JasonYangBlogs/p/4833896.html(雖然通過linux命令: man chattr, 也可以看到英文版本, 不過中文版理解起來更快一些)
a :設置a之后,這個文件將只能增加數據,而不能刪除也不能修改數據,只有root才能設置這個屬性。
i :它可以讓一個文件不能被刪除、改名,設置連接也無法寫入或添加數據。只有root才能設置這個屬性。
因此, 這個file1具有這兩個隱藏屬性后, 直接使用rm命令是無法刪除這個文件的.
那怎么辦呢, 很簡單, 通過chattr命令, 修改這兩個文件的屬性后, 就可以正常刪除了.
命令為: chattr -ia ./file1
這里 '-' 的意思表示去除, 同理, "+" 表示設置文件的屬性, 如圖
--------------------------------------------- 分割線---------------------------------------------
新情況, 即使取消了無法刪除的屬性, 依然無法刪除文件
如圖:
這是為什么, 明明刪除去除了文件的不可刪屬性, 怎么還是刪除不了文件, 連root用戶都刪除不了, 那還有其它用戶可以刪除么???
答案是不可能, 如果連root用戶都刪除不了的文件, 其它用戶更不可能刪除得了, 因此只能是其它問題引起的, 當時想了很久, 一直沒有明白為什么會刪除不了, 網上也沒有找到想要的答案, 就這樣一直耗着.
后來, 請教別人的時候, 看到別人會查看文件夾的隱藏屬性, 實然之間, 就明白是什么回事了.
--------------------------------------------- 分割線 -------------------------------------------
問題的解決
其實這個問題很簡單, 就是因為當前文件的文件夾(目錄)的隱藏屬性是不可刪除的, 因此當你要刪除文件夾(目錄)下面的文件時, 系統也會提示文件不可刪除, 權限不足.
如圖
file2文件在文件夾(目錄)dir1下, 雖然file2文件已經去掉了不可刪除屬性, 但因為其所在的文件夾(目錄)的屬性也是不可刪除, 最終, file2文件也因此無法刪除!!!!
解決的辦法就是將當前文件所在的文件夾(目錄){有時候可能不止一層文件夾(目錄)被設置成了不可刪除屬性}的不可刪除屬性去掉即可, 若是有多層文件夾(目錄)都具有不可刪除屬性, 那就需要保證每層的不可刪除屬性都去掉了, 之后就可以刪除那一直以來刪除不了的文件了
如圖:
總結:
思維還是應該多發散一些, IT的邏輯還是很清晰的, 需要個人好好思考!