用于删除系统上所有非包文件的工具

用于删除系统上所有非包文件的工具

例如,如果您想保持构建或服务器系统干净,那么能够检查所有文件是否存在并已说明情况通过包元数据。在工作中,我们有一个非常好的工具,如果在没有任何参数的情况下运行,它只需为任何包未提及的任何和所有文件/目录创建一个带有rm/语句的文件(不包括一些树,如)。这是rmdir/home不同的rpm -Vdebsums,它只检查包已经提到的文件。

DEB/RPM/Ports/其他打包系统有类似的工具吗? DEB 是最好的,但是从另一个系统(或者我们自己的系统,如果没有其他系统存在的话)移植可能是可行的。

PS:我是不是寻找替代架构。这里的问题是要考虑到系统上的每个文件。 VM 等不适用。

答案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
  • /bootinitrd-*(从安装的内核和额外模块自动重新生成)和引导加载程序文件(/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 为/etcvia提供交钥匙版本控制等等管理员。它不是默认安装的一部分(不幸的是)。安装软件包,在 中选择您最喜欢的版本控制系统/etc/etckeeper/etckeeper.conf,然后运行etckeeper init。以下所有更改将在每天晚上以及运行或其他 APT 前端/etc之前和之后自动提交;apt-get您可以禁用这些自动提交以强制管理员手动运行etckeeper commit(并输入日志消息)。

答案3

如果您确实想要一个干净、一致的构建系统,那么您可能最好使用文件系统快照,例如 LVM 提供的快照。您可以在 LVM 上安装具有 /usr 等文件系统的系统。然后,您可以通过命令创建要恢复到原始状态的任何文件系统的快照lvsnapshot。您可以将这些快照挂载为可写,以代替其正常挂载。当您想要恢复到之前的状态时,只需卸载、删除并重新创建快照,然后再次挂载新快照即可。如果你想保持 /home 或其他文件系统的当前状态,你可以将它们放在 LVM 上,但不要为它们创建快照。

我在测试软件部署或自定义安装磁盘时使用的另一种方法是使用 VirtualBox 或 VMware 工作站等虚拟机。它们可以拍摄整个磁盘快照并根据请求恢复它们。它还具有诸如在主机重新启动时暂停机器之类的优点。虚拟机启动后,就会从暂停时的状态恢复。特别是,VirtualBox 可以拍摄多个磁盘快照,然后将其恢复到任何以前的快照,同时仍保留它们。如果需要,您可以在两行或多行快照之间切换。

相关内容