如何查找不属于任何包的文件?

gea*_*net 16 debian apt repository

在我的系统中,我有不属于任何包的文件,它们是我的或来自安装了make install. 如何找到不属于任何包的所有文件?

Pat*_*que 12

/var/lib/dpkg/info.list文本文件,包含在通过Debian的包管理器安装在每个package¹列表中的所有文件。

在文件系统中查找与任何条目不匹配的所有文件可以通过这样的简单操作来实现:

find / -xdev -type f \( -exec grep -xq "{}" /var/lib/dpkg/info/*.list \; -or -print \)
Run Code Online (Sandbox Code Playgroud)

这显然需要很长时间,因为将扫描整个文件系统。如果您对系统目录使用不同的分区(例如/usr/var),请在初始/.

警告:这并没有包括由包脚本创建的文件。例如:

  • /etc/hosts.allow未在任何地方列出,但它可能来自libwrap0可能创建它的文件,如果该文件在安装包时不存在。
  • 许多文件在安装过程中被编译,例如.pyc文件(编译的 Python 库)、.elc文件(编译的 Emacs Lisp 库)等。

  • 错误“查找:参数列表太长” (2认同)

Sté*_*las 9

@Patrice 解决方案的更高效版本,使用支持进程替换的 shell(bash、AT&T kshzsh):

(
  export LC_ALL=C
  comm -23 <(find / -xdev -type f | sort) \
           <(sort -u /var/lib/dpkg/info/*.list)
)
Run Code Online (Sandbox Code Playgroud)

与 Patrice 的解决方案一样,它假设没有文件路径包含换行符。


ste*_*nct 7

由于您debian使用尚未提及的明显选择标记了您的问题,因此cruft-ng如果您不需要任何灵活性或cruft不想搜索整个系统/locatedb,则使用。