Mar*_*ter 9 dpkg package-management
我知道一个包有两个组成部分:config
和data
文件。在软件包升级(即安全升级)期间,data
文件可以被覆盖,但config
文件应始终保持不变。同时config
文件通常/etc
和data
中/usr
。然而,有时,这种区别是模糊的。
就我而言,我修改了Icedove
(Thunderbird)的图标文件:
/usr/share/applications/icedove.desktop
Run Code Online (Sandbox Code Playgroud)
现在,每次有Icedove
(Thunderbird) 更新时,我的更改都会被默认文件覆盖(即使它在更新之间没有更改)。
有什么办法可以防止这个特定的文件被覆盖?
将其设置为不可变chattr +i icedove.desktop
的并不是一个好主意,因为它会在包升级期间产生错误。
wur*_*tel 10
你想要这个dpkg-divert
实用程序。
dpkg-divert --divert /usr/share/applications/icedove.desktop.packaged --rename /usr/share/applications/icedove.desktop
Run Code Online (Sandbox Code Playgroud)
虽然wurtel 的回答按措辞回答了这个问题,但考虑到问题的背景,这表明这是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
。