答案1
如果您想要的是文件完整性检查器,那么 RPM 将满足您的需求。rpm -qaV
(注意大写的V)。这将通过并检查:
- 文件大小
- 模式(权限和文件类型)
- MD5校验和
- 设备号(检查是否有人通过安装另一个分区来隐藏文件
- readlink 路径(如果符号链接指向不同的文件)
- 用户所有权
- 集团所有权
- 修改时间
这应该是一个相当全面的清单。
rpm -qa --filesbypkg | awk '{print $2}'
将列出系统上已记录的所有文件。
find / | grep -vf /tmp/files-on-system.txt
将查找系统上不在 RPM 数据库中的所有文件。在一个命令中完成这两个命令的另一种方法是rpm -qf 'find /'#replace single quote with backtick
注意:这也会在目录中标记为错误文件,例如
/dev
/home
/proc
/var/run
/var/log
/var/lib
/tmp
答案2
在 Debian 和其他使用 dpkg 的系统上,sort -u /var/lib/dpkg/info
将为您提供软件包提供的所有文件的列表。与系统上实际存在的文件列表进行比较,会发现任何软件包都没有提供大量文件。此列表是对一台 Debian 挤压机的快速浏览,绝不是详尽无遗的。
- 明显的嫌疑人:
/etc
、/usr/local
、/opt
、/var
、/home
、/srv
、 各种挂载点。 - 由软件包安装脚本创建的许多符号链接。通常这是因为该文件曾经位于一个包中,现在已被替代方案替换:首先解压缩新包,然后删除它所替换的旧包,最后新包的 postinst 脚本创建链接。
- 的一些用途
dpkg-divert
。 - 在
/boot
,initrd-*
(从安装的内核和额外模块自动重新生成)和引导加载程序文件(/boot/grub/*
)中。 - 在 中
/lib/modules/*
,模块依赖文件和符号映射,以及自动编译模块(来自 dkms)。 - 安装软件包时从其唯一授权来源下载的各种不可再分发的内容。大部分是文档,也有一些字体。
- X11 字体包含在
/usr/X11R6/lib/X11/fonts
. - CUPS 后端从 复制
/usr/lib/cups/backend-available/
到/usr/lib/cups/backend/http/
。 - 安装时编译的各种文件:
*.pyc
(Python)、*.elc
(Emacs)、*.dll
(Mono)…… - 生成的文档索引
/usr/share/doc/HTML
(来自帮助)。
如果您想了解每个文件,则必须跟踪它们的历史记录。换句话说,要通过审核,您不能只显示您拥有的文件,还需要您作为被审核者来显示每个文件的有效性证明。
经典的方法是使用类似的工具绊线,当文件更改时它会提醒您。如果您正在追求更强大的功能,可以让您跟踪更改,那么这正是版本控制。 Debian 为/etc
via提供交钥匙版本控制等等管理员。它不是默认安装的一部分(不幸的是)。安装软件包,在 中选择您最喜欢的版本控制系统/etc/etckeeper/etckeeper.conf
,然后运行etckeeper init
。以下所有更改将在每天晚上以及运行或其他 APT 前端/etc
之前和之后自动提交;apt-get
您可以禁用这些自动提交以强制管理员手动运行etckeeper commit
(并输入日志消息)。
答案3
如果您确实想要一个干净、一致的构建系统,那么您可能最好使用文件系统快照,例如 LVM 提供的快照。您可以在 LVM 上安装具有 /usr 等文件系统的系统。然后,您可以通过命令创建要恢复到原始状态的任何文件系统的快照lvsnapshot
。您可以将这些快照挂载为可写,以代替其正常挂载。当您想要恢复到之前的状态时,只需卸载、删除并重新创建快照,然后再次挂载新快照即可。如果你想保持 /home 或其他文件系统的当前状态,你可以将它们放在 LVM 上,但不要为它们创建快照。
我在测试软件部署或自定义安装磁盘时使用的另一种方法是使用 VirtualBox 或 VMware 工作站等虚拟机。它们可以拍摄整个磁盘快照并根据请求恢复它们。它还具有诸如在主机重新启动时暂停机器之类的优点。虚拟机启动后,就会从暂停时的状态恢复。特别是,VirtualBox 可以拍摄多个磁盘快照,然后将其恢复到任何以前的快照,同时仍保留它们。如果需要,您可以在两行或多行快照之间切换。