在我的Debian系统中,我有不属于任何存储库的文件,它们是我的或者是使用'make install'安装的编译程序。如何查找不属于任何存储库的所有文件?
答案 0 :(得分:0)
我假设文件不属于任何存储库,你的意思是
不属于系统上安装的软件包的文件
以下脚本将检查给定文件(完整路径)是否属于某个包,如果不是,则打印其名称(如果该文件属于pkg 或不存在,则它将保留无声)。
#!/bin/sh
if [ -e "$1" ]; then
dpkg -S "$1" >/dev/null 2>&1 || echo "$1"
fi
如果您将上述内容保存为(例如)/tmp/checkindeb
并使其可执行,那么您可以运行
$ find / -type f -exec /tmp/checkindeb \{\} \;
它将打印系统中未由软件包安装的所有文件。
注意:上述测试非常慢。
您可以通过以下方式加快流程:
排除/dev/
,/sys
和/proc
以及其他不包含任何真实(和/或永久)文件的伪文件系统中的所有文件。
排除/usr/local
,/home
,/tmp
以及其他众所周知的目录中的所有文件,包永远不会将文件安装到其中(特别是' / home`是臭名昭着的,因为它通常包含大量文件,并且所有文件都由用户拥有)
排除网络共享上的所有文件(NFS,CIFS,...)
生成所有软件包安装的所有文件的列表,并将其与计算机上安装的所有文件的列表进行比较。
类似以下内容:
#!/bin/sh
DEBFILES=$(mktemp)
ALLFILES=$(mktemp)
dpkg -L $(dpkg --get-selections | cut -f1) | while read f; do
test -f "${f}" && echo "${f}"
done | sort -u > "${DEBFILES}"
find / \( \
-wholename /home -o -wholename /tmp -o -wholename /usr/local \
-o -wholename /sys -o -wholename /proc -o -wholename /dev \
\) -prune \
-o -type f -print \
| sort -u "${ALLFILES}"
diff "${DEBFILES}" "${ALLFILES}"
您可能必须以root身份运行该命令才能拥有列出所有文件的适当权限。