我得到了一个包含我修补过的程序的软件包。更新软件包后,我的修改消失了。我可以保留对特定文件的编辑吗?
答案1
根据修改的性质,您可以复制文件并将其放在其他位置以覆盖原始文件,而不是就地修改。但是,这可能会导致其他问题。例如,如果更新原始文件以修复错误,则您修改的副本将不会获得这些更新。
例如,如果您只想修改桌面文件或图标,您可以复制桌面文件,~/.local/share/applications/
然后修改该副本,更改该文件中的图标路径等。
/usr/
许多应用程序在或中安装配置文件/lib/
,并且根据应用程序的不同,您可能能够修改主目录中的配置文件版本,或将其复制到/etc/
不应被覆盖的并行路径。
如果修改后的文件位于/bin/
应用程序的目录中,您可以将其复制到~/bin/
并确保该目录位于应用程序的 bin 目录之前。
如果文件是应用程序的核心部分,则可能没有一种干净的方法可以不被覆盖地进行更改。您唯一的选择是在更新时重新修补文件或冻结该应用程序的更新。
答案2
否:Apt、Snap、Pip 和其他软件包管理器不会察觉到您所做的任何更改,并将覆盖这些更改。标准化是软件包的一个特性。
如果您不想让您的软件包被覆盖并且自定义设置丢失,那么请使用 apt-pinning 或 apt-marking 来阻止 apt 更新该软件包。
例如,您可以运行以下命令,以便在系统升级时不升级该包。
sudo apt-mark hold packagename
但是,由于 APT 不知道您的更改,因此在升级过程中这些文件将被覆盖。如果您认为这些更改很重要,请考虑向上游源代码发送拉取请求。但是,即使您的更改被接受,您很可能不会在当前版本的 Ubuntu 中获得新版本作为升级,但它可能会在未来的 Ubuntu 版本中可用。