是否可以設定檔案的權限以使其可編輯但不允許覆蓋?
我的意思是可以使用文字編輯器編輯文件,但拒絕任何透過覆蓋來替換文件的嘗試。用戶是root
.我知道這不是unix檔案權限的常見結構,但我正在尋找一種棘手的方法。
我有一個文件包,因為其中一些文件是根據原始版本進行編輯/自訂的。當使用新版本更新包時,我想替換任何未更改的文件,但保護自訂文件(不要錯過編輯)。目前,我必須手動執行此操作:寫入已編輯的文件,而不是在新的更新中替換。
答案1
由於所有套件都會嘗試完全覆蓋配置文件,因此您可以透過以下方式將文件設定為僅附加模式:
chattr +a bb
因此,您無法刪除/截斷文件,只能追加它。
但在這種情況下,您將阻止套件管理器升級系統。
如果你只是不想讓套件管理器覆蓋你的自訂文件,你可以保留包,在 debian/ubuntu 上,你可以這樣做:
echo package-name hold | dpkg --set-selections
這樣這個包就不會升級,你的檔案會被保留。
答案2
這取決於「覆蓋」到底意味著什麼。如果這意味著更改現有文件的數據,那麼這是不可能的,因為作業系統無法區分「編輯」和「覆蓋」——它們都在更改文件的數據。如果這表示刪除並建立具有相同名稱的新檔案(或將新檔案重新命名為該名稱),則可以透過從包含該檔案的目錄中刪除寫入權限來實現。顯然,這適用於該目錄中的所有文件,而不是某個特定文件。
答案3
首先,對包的重要檔案進行 tar 操作。然後升級。安裝新版本後,解壓縮已儲存的文件在另一個目錄中,並將您編輯的文件與新的包中的文件進行比較。這樣,您將看到新文件是否也沒有需要添加/更改的重要內容(即,開發人員可能還對您編輯的文件添加了修改,並且這些更改也應該保留。您不能只需將new-from- new-package 檔案替換為舊的編輯內容,而無需先檢查這些新檔案是否不包含新的重要資訊)
答案4
作為 root 執行以下操作:
chattr +i foo.txt
然後嘗試:
vim foo.txt
在vim中更改檔案並嘗試儲存它。
一個範例用例是 chattr +i /etc/resolv.conf,這樣您討厭的網路管理員服務就不會用從設定錯誤的家庭/辦公室路由器取得的一些 bum 檔案來覆寫它。
您可以透過以下方式撤銷它:
chattr -i foo.txt
在 Linux 檔案系統模型中,這是您能做的最好的事情。沒有任何其他解決方案。