Permissions

為什麼 rm 可以刪除只讀文件?

  • September 22, 2021

如果我創建一個文件,然後將其權限更改為444(只讀),怎麼rm能刪除它?

如果我這樣做:

echo test > test.txt
chmod 444 test.txt
rm test.txt

rm會詢問我是否要刪除防寫文件test.txt。我本來預計rm不能刪除這樣的文件,我必須先做一個chmod +w test.txt。如果我這樣做了,rm -f test.txt那麼rm即使它是只讀的,也會在不詢問的情況下刪除該文件。

誰能澄清一下?我正在使用 Ubuntu 12.04/bash。

所有rm需要的是對目錄的**寫入+執行權限。**文件本身的權限無關緊要。

這是一個參考,它比我以往任何時候都更清楚地解釋了權限模型:

任何訪問文件數據的嘗試都需要讀取權限。任何修改文件數據的嘗試都需要寫入權限。任何執行文件(程序或腳本)的嘗試都需要執行權限…

由於目錄的使用方式與正常文件不同,因此權限的工作方式略有不同(但僅略有不同)。嘗試列出目錄中的文件需要對該目錄的讀取權限,但不需要對其中的文件具有讀取權限。 嘗試將文件添加到目錄、從目錄中刪除文件或重命名文件,都需要目錄的寫權限,但(可能令人驚訝的是)不需要. 執行權限不適用於目錄(目錄也不能是程序)。但是該權限位被用於其他目的的目錄。

目錄需要執行權限才能 cd 進入它(即,使某個目錄成為您目前的工作目錄)。

需要在目錄上執行才能訪問其中文件的“inode”資訊。您需要它來搜尋目錄以讀取其中文件的 inode。因此,對目錄的執行權限通常稱為搜尋權限。

引用自:https://unix.stackexchange.com/questions/48579