編輯組可編輯文件後文件所有者更改
我使用archlinux x64。我正在研究 Web 開發,為了在 Apache 服務的
srv/http
目錄下編輯 Apache 提供的文件,我創建了一個組,添加了我的使用者和 Apache 的使用者,這樣我就可以編輯文件而無需在目錄之間移動它們。問題是,我可以使用我的使用者正確編輯目錄中的文件,但是每當我保存它們時,它的使用者和組都會恢復為我的使用者和組。例如:
Me: user1:users Apache: http:http Directory ownership: http:development
然後我用我的使用者打開文件
/srv/http/index.html
,看起來像這樣……
rw-rwr-- 1 http development 1034 Mar 20 20:48 index.html
(你可以看到它對所有者和組具有讀寫權限),當我保存它時,文件權限恢復到這個……
rw-rw-r-- 1 user1 users 1034 Mar 20 20:48 index.html
groups
如果我鍵入以查看我的使用者活動組,我無法理解發生了什麼,我得到這個lp wheel network video audio storage users development
確實說我是開發成員。我認為它是別的東西。誰能告訴我發生了什麼,我該如何在節省時間進行糾正?
我知道這不是一個大問題,但我想在失去連字元之類的問題之前糾正它。
PD-如果重要的話,我會使用 sublime 編輯器。
在 UNIX 中,只能
root
更改文件的所有者。因此,我們可以得出結論,當您編輯文件時,文件的所有者沒有改變。相反,必鬚髮生的是您的編輯器正在將編輯後的內容寫入一個新文件並用新文件替換舊文件。因為它是一個全新的文件,所以該文件最終被標記為您是所有者。以這種方式更新文件有一些優點:
- 它是原子的:讀者總是看到舊版本或新版本,而不是部分編寫的新版本。
- 更容易從錯誤中恢復。如果出現磁碟已滿等錯誤,只需刪除新的臨時文件(在舊版本之上重命名之前)即可回滾。如果您正在就地更新文件,您可能無法完成和更新,也無法回滾。
- 您可以“更新”您沒有寫入權限的文件(因為您從未真正寫入舊文件)。
- 任何仍然打開文件的使用者都可以根據需要繼續使用舊版本,因此不會受到干擾。對執行檔有用!
也有缺點:
- 您需要對文件所在目錄(或至少在同一文件系統上的其他位置)具有寫權限,以便在其中創建一個新的臨時文件,然後重命名該臨時文件。
- 您無法保留文件的所有者,您可能會也可能無法保留其組。
- 在將其移動到位之前,您可能會通過在新的臨時文件中複製它們來保留一長串其他內容,例如權限、擴展屬性、文件是否是其他地方實際文件的符號連結,資源分叉 (MacOS) 等… 除非您非常小心且非常詳盡,否則很難不錯過其中的一個或多個。
所以這是一個妥協。
後台腳本、軟體安裝等自動化任務通常選擇用全新文件替換舊版本,尤其是因為原子性。
文本編輯器和其他人工任務通常選擇就地編輯文件。
我不熟悉你的編輯器,但它似乎做出了與大多數其他編輯器相反的選擇。您必須查看是否可以將其配置為停止這樣做。
順便說一句,如果您的文件根目錄中的文件所有者歸您所有,而不是 apache 使用者所有,那實際上會好得多。它提供了更好的保證,即 Web 伺服器(例如,如果受到威脅)無法編輯文件。所以你可能會考慮忽略這個特殊的“問題”並認為它是一件好事。