![在升级包之前,我如何知道哪些文件将被修改?](https://linux22.com/image/65816/%E5%9C%A8%E5%8D%87%E7%BA%A7%E5%8C%85%E4%B9%8B%E5%89%8D%EF%BC%8C%E6%88%91%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E5%93%AA%E4%BA%9B%E6%96%87%E4%BB%B6%E5%B0%86%E8%A2%AB%E4%BF%AE%E6%94%B9%EF%BC%9F.png)
我必须更新一些机器,但我使用的是修补版本的linux,并且不希望软件包修改特定文件。为了更清楚起见,这里列出了我不希望包执行的操作:
Modify the boot sequence (modify grub)
Change the init files (init.d)
The kernel image
因此,我列出了几个软件包并将其搁置,内容如下:
for package in 'package_list grub2-common...'
do
echo $package hold|dpkg --set-selections
done
我还可以将它们以 -1 优先级添加到 /etc/apt/prefences 中,但我认为没有必要。
我想让这个过程自动化,给定一个文件列表,找到所有使用它们的更新包并将它们搁置。如果我可以在不安装每个包的情况下找到它所执行的操作,那将是一个很好的开始。
编辑:使用chattr -i <filelist>.
允许我阻止对某些文件的访问,但我宁愿有一个更干净的面向包的方法来解决我的问题。
感谢您的帮助。
答案1
这可能不是最好的答案,但如果您“不希望包修改特定文件”,您可以使这些文件不可变的使用chattr -i <filelist>
。所以,如果我是你,我会考虑:
find /etc/init.d /boot -type f -exec chattr +i "{}" +
完成后,更改+i
为-i
(或保持这种状态直到需要修改文件为止)。此操作设置/重置“不可变”位,这是 Linux 特有的特殊扩展属性。只要该位被设置,文件就不能被修改或删除。