先說說大家熟悉的Windows,對於WindowsNT,只要你對某個文件設置了所有人不可寫的安全屬性(也就是文件權限咯),無論在哪個文件夾中都是不可以刪除的,不管他所在的文件夾的安全屬性是什麼。
當大家習慣了Windows的安全屬性設置後,形成一個觀念,文件是否可以刪除是取決於這個文件的安全屬性。我本來也有這個概念。
然後我們來看看日益增多的Linux系統。我用的是RedHat和紅旗Linux,應該其他Linux也一樣。
如果在Linux中有一個目錄假定為 share (權限 drwxrwxrwx,即任何人完全控制),他的下面有一個文件 amtr,假設這個文件是某個用戶寫給root的一個message,他不想讓別人看到文件的內容,於是把 amtr 的權限設置為 -rw-------,這樣應該差不多了吧——如果另一個用戶在 share 目錄執行cat amtr就會顯示Permission denied(沒有權限)。
但是,如果另一個用戶在 share 目錄下執行 rm amtr,你說會有什麼結果——amtr不見了。更壞的,別的用戶可以任意改名。如執行 mv amtr rootTMD,呵呵,這樣root肯定會看。
究其原因,是因為Linux把文件的i-nod信息全都交給了目錄管理。包括文件存不存在、文件名是什麼、文件存放在磁盤哪裡等信息。只要你有這個目錄的寫權限,就可以刪除目錄下的任意文件(注:這裡的文件不包括目錄)和更改目錄下的任意文件的文件名(注:包括目錄)。
特別的,對於目錄,如果你這個目錄只是一個空目錄的話,就相當於一個文件,完全可以刪除。但是因為Linux不能刪除一個非空的目錄。只要你的目錄別人沒有權利寫且目錄內有別人沒有權限寫的文件,那就不能刪除你的目錄(執行 "rm -r 目錄名" 不是把目錄從當前目錄一點截斷,而是用遞歸逐個刪除目錄內容,所以沒辦法刪除),最多改個名字。
大家應該可以看到/tmp的權限是 drwxrwxrwt ,t的意思是只有創建者可以修改。原來我以為這樣設的原因是不讓別人把tmp這個目錄給刪掉,把這個目錄設成 o+t 的原因還有不讓你刪除別人不給刪但是又在這個目錄下的東西。
所以在Linux中要小心不要把你的重要文件放在任何人完全控制的目錄裡。即使這個文件的權限是0。