我想获取我的Gentoo Linux系统中所有未由软件包管理器(Portage)安装的文件的列表。这是因为我想保持系统尽可能干净,删除所有无用的文件。
让我告诉你到目前为止我一直在尝试什么。首先,我生成属于Portage跟踪的某些程序包的所有文件的列表:
equery files "*" | sort | uniq > portage.txt
然后,我生成系统上所有文件的列表,除了那些我不在乎的文件:
find / \( -path /dev -o -path /proc -o -path /sys -o -path /media \
-o -path /mnt -o -path /usr/portage -o -path /var/db/pkg \
-o -path /var/www/localhost/htdocs -o -path /lib64/modules \
-o -path /usr/src -o -path /var/cache -o -path /home \
-o -path /root -o -path /run -o -path /var/run -o -path /var/tmp \
-o -path /var/log -o -path /tmp -o -path /etc/config-archive \
-o -path /usr/local/portage -o -path /boot \) -prune \
-o -type f | sort | uniq > all.txt
最后,我得到了Portage未跟踪的所有文件的列表:
comm -13 portage.txt all.txt > extra.txt
一些统计:
wc -l portage.txt all.txt extra.txt
127724 portage.txt
78371 all.txt
8438 extra.txt
如您所见,我仍然获得了超过八千个额外的文件。我想减少该数量,以便将更多的注意力集中在确实需要删除的文件上。
我注意到,在extra.txt
有成千上万的文件,在一个小数量的目录,如/usr/lib64/gcc
,/usr/lib64/python2.7
和/usr/lib64/python3.2
。/usr/lib64/gcc/x86_64-pc-linux-gnu/4.6.3/crtbegin.o
例如,该文件不在其中,portage.txt
因为该文件存在/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/crtbegin.o
。在我的系统上/usr/lib
是的符号链接/usr/lib64
。因此,似乎需要正确处理符号链接才能获得更好的结果。也许通过添加portage.txt
他们指向的所有文件。我真的不知道该怎么做。
另外,为什么portage.txt
大于all.txt
?既然Portage跟踪的文件是系统中所有文件的子集,这不是相反吗?
最后,我是否忘记了find
命令中的任何其他位置也应排除在外?