Files
在使用者打開文件時更改 inode 中的文件權限
根據這個SO question,當我們打開一個文件來讀取它時,我們只在打開它時檢查一次權限。如果我們更改文件的權限並說不再允許使用者從文件中讀取,使用者仍然可以讀取文件。這提出了幾個問題:
- 難道我們不需要繼續檢查權限,因為例如我們打開一個文件來讀取它,然後嘗試使用
write
,我們不應該得到一個錯誤嗎?這意味著我們檢查我們被允許對文件做什麼。(也許我們使用 fd 在本地保存我們允許使用它執行的操作並每次都檢查它們?)- 我們在更新權限的時候,是更新inode表中的inode的單副本還是直接更新磁碟上的副本?因為如果我們直接在磁碟上的副本上更新權限,其他查看 inode 表的程序將看不到更新的版本,所以更新 inode 表並讓作業系統從那裡將更改寫回磁碟。
難道我們不需要繼續檢查權限,因為例如我們打開一個文件來讀取它,然後嘗試使用 write,我們不應該得到一個錯誤嗎?
不,我們不應該!這是有意的。讀取文件時的權限
open
很重要,而不是以後。這就是 API。我們在更新權限的時候,是更新inode表中的inode的單副本還是直接更新磁碟上的副本?
這完全是文件系統層的一個實現細節。我們不知道——而且,我們不必在意。我們所知道的是,這應該在多個流程中保持一致,並且在哪裡進行更改並不重要。