如何在未由dpkg安装或创建的Debian系统中查找文件?


20

过去,我已经手动安装了一些东西,并希望清除所有相关文件。因此,我需要一种方法来自动查找Debian系统上当前安装的任何软件包中未包含的所有文件(例如,在/ usr中)。但是,我还需要过滤出在软件包安装过程中创建的文件(通过dpkg安装后脚本和类似内容)。


Answers:


25

使用cruft包装:

cruft是一个程序,可以检查系统是否存在不应该存在的所有内容;或任何应该存在的东西,但不是。


4

您可以尝试这样的事情:

dpkg -L --list-all-package-files | grep "^/usr" > dpkg-files.dat   **(don't know the dpkg option "--list-all-package-files", read mand dpkg)**
find /usr -type f -o -type l > all-usr-files.dat
sort dpkg-files.dat all-usr-files.dat | uniq -c | grep " 1 "

这样,您将获得/ usr中的所有文件,但不会获取任何软件包文件。首先,这可以为您提供帮助。


我找不到任何方法可以使-L一次列出一个以上的软件包,但是您可以从grep -h "^/usr" /var/lib/dpkg/info/*.list > dpkg-files.dat
DerfK '02

没有--list-all-package-files选择。
卡罗尔

@DerfK:您可以使用-l列出多个软件包,例如:dpkg -L `aptitude search ~i -F "%p"`
Karol

这种方法的问题是/ usr中的文件或链接比dpkg实际列出的更多。例如,存在/ usr / bin / aptitude,可能是由某些安装后脚本创建的,但dpkg并未列出。所以,我想我想要的是通过安装任何软件包而安装创建的文件的列表(将会更改问题)。
卡罗尔

@Karol:其他文件来源可能是转移和替代。输出为句子形式,但您可以看到以dpkg-divert --listroot身份进行的转移(通常给这些转移加上后缀)。替代方案要难一些,/ var / lib / dpkg / alternatives /中的文件格式很尴尬,它update-alternatives告诉我有关链接名称的所有信息。find /usr -lname '/etc/alternatives/*'这可能是最简单的方法。
DerfK'2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.