![Debian:防止特定文件在软件包升级过程中被覆盖](https://linux22.com/image/56552/Debian%EF%BC%9A%E9%98%B2%E6%AD%A2%E7%89%B9%E5%AE%9A%E6%96%87%E4%BB%B6%E5%9C%A8%E8%BD%AF%E4%BB%B6%E5%8C%85%E5%8D%87%E7%BA%A7%E8%BF%87%E7%A8%8B%E4%B8%AD%E8%A2%AB%E8%A6%86%E7%9B%96.png)
我知道一个包有两个组件:config
和data
文件。在软件包升级(即安全升级)期间,data
文件可以被覆盖,但config
文件应始终保持不变。文件通常config
位于/etc
和data
中/usr
。然而,有时这种区别是模糊的。
Icedove
就我而言,我修改了(Thunderbird)的图标文件:
/usr/share/applications/icedove.desktop
现在,每次Icedove
(Thunderbird)更新时,我的更改都会被默认文件覆盖(即使它在更新之间没有更改)。
有什么办法可以防止这个特定的文件被覆盖吗?
将其设置为不可变chattr +i icedove.desktop
并不是一个好主意,因为它会在软件包升级期间产生错误。
答案1
你想要dpkg-divert
实用程序。
dpkg-divert --divert /usr/share/applications/icedove.desktop.packaged --rename /usr/share/applications/icedove.desktop
答案2
尽管乌特尔的回答回答问题的措辞,考虑到问题的背景表明,这是另一个案例XY问题。
在这种特殊情况下,/usr/share/applications/icedove.desktop
首先不应修改,但应将覆盖默认配置的本地配置文件放置在合适的位置。符合 freedesktop.org 的系统符合XDG 基目录规范,其目的正是为了消除在软件包升级过程中修改被覆盖的配置文件的需要。
如果要在系统范围内进行配置,icedove.desktop
则应将本地配置放置在applications
之前的搜索路径的子目录/usr/share
中$XDG_DATA_DIRS
。该环境变量的值默认为/usr/local/share/:/usr/share/
,但实际值因发行版而异。因为在这种情况下,配置应该是本地的,所以正确的位置是/usr/local/share/applications/icedove.desktop
,尽管请记住它们可能是特定于发行版的覆盖,这可能优先于下面的配置usr/local/share
。
另一方面,如果配置缩进为用户特定的,则本地icedove.desktop
应放置applications
在 指示的位置下$XDG_DATA_HOME
。通常默认为$HOME/.local/share
,即配置文件的位置应为$HOME/.local/share/applications/icedove.desktop
。