如何获得计算机上不属于任何软件包的文件列表?


9

我正在考虑编写执行此操作的脚本:

  • 遍历/ usr / lib中的每个文件
  • dpkg -s在每个文件上进行搜索。
  • 报告不属于任何.deb软件包的“孤立”文件列表。

我的想法是,随着时间的流逝,我已经安装了许多make install软件,并且想从此后删除的手动安装的软件中获取剩余文件列表。


将来,请确保将在打包系统之外安装的所有内容都安装到/ usr / local或/ opt。然后,您将有清晰的分隔。
geirha

Answers:


8
find /usr/lib -type f -exec dpkg -S {} + 2>&1 >/dev/null | sed -r 's/^[^/]+//'

我现在警告您:它很慢。


3
它的速度更快:find /usr/lib -type f -exec dpkg -S {} + | grep 'no path found'
αғsнιη

1
那里没有分歧。2012年的Oli不如2015年的好。我已经对其进行了更新,因此它仅返回文件列表。
奥利(Oli)

3

您可以运行以下命令

join -t '' -v1 <(find /usr/lib | sort) \
               <(grep -h /usr/lib /var/lib/dpkg/info/*.list | sort -u)

比较其中的文件/usr/lib列表和至少存在于中的文件/var/lib/dpkg/info/<NAME>.list(由使用的文件)中的文件列表dpkg -S。该-v1选项将报告第一个列表中存在的文件,而不报告第二个列表中的文件。

在我的机器上,此差异列表给出了5000多个匹配,因此我怀疑这是否有帮助。


对我来说真的很有效。
user1202136 2014年

2
sudo aptitude install cruft
man cruft
sudo addgroup cruft
sudo chmod g+rwx /var/spool/cruft
sudo chown root:cruft /var/spool/cruft
sudo addgroup $USER cruft
cruft -r cruftreport
sudo chown root:root /var/spool/cruft
less cruftreport

1
我喜欢man cruft里面的东西,但是对碎屑的解释有点多,为什么您推荐它也会很不错!:P ;-)
Fabby 2015年

更确切地说,这将不起作用:(1)“ chown:'root:cruft'之后缺少操作数”。需要编写:“ sudo chown root:cruft / var / spool / cruft”代替(2)“ sudo addgroup $ USER cruft”将需要关闭/打开新的shell(重新登录)。(3)如果您想检查所有目录,则调用cruft将需要“ sudo cruft”。
muenalan
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.