列出不是来自包的文件

n61*_*007 7 upgrade package-management versions files

许多文件是由我的文件系统上的包安装的。

  • 我怎么能列出不是的文件?即,用户创建,如手动编译软件,编写文档。
  • 有没有办法列出来自包但已更改的文件?检查我修改了什么。

这对我在更新内部使用的定制图像的项目中很有用。另外,在家里重新安装时,我忘记了我做了什么。当然,最有趣的是在 home 目录之外,但是例如 home 中的点配置文件的更改也很有趣。

Gil*_*il' 9

要从字面上回答您的问题,您可以通过这种方式列出不是来自包的文件:

find / -xdev -type f | sort >/tmp/root.files
sort /var/lib/dpkg/info/*.list >/tmp/installed.files
comm -23 /tmp/root.files /tmp/installed.files
Run Code Online (Sandbox Code Playgroud)

这当然会包括主目录中的每个文件。您可以find通过添加-prune指令来跳过命令中的某些目录(您还需要添加-print以打印其余部分,因为-print只有在没有操作时才隐含该操作)。

find / -xdev -type f -path /home -prune -o -path /var -prune -o -print | sort >/tmp/root.files
Run Code Online (Sandbox Code Playgroud)

要检查文件是否已更改,您可以将其校验和与/var/lib/dpkg/info/$PACKAGE.md5sum. 如果要比较每个文件(这将花费很长时间):

for p in /var/lib/dpkg/info/*.list; do
  diff <(md5sum $(cat $p) | sort) <(sort ${p#.list}.md5sums);
done
Run Code Online (Sandbox Code Playgroud)

你不应该需要这个,因为你不应该修改来自包的文件。您也不应该在系统目录中添加自己的文件。

如果你修改了一个配置文件,它就在/etc; 这是您应该修改系统文件的唯一地方。安装etckeeper包以跟踪您在/etc. 运行sudo etckeeper init,并将/etc受版本控制(默认为Bazaar)。

如果您在系统范围内安装软件,请将其安装在/usr/local. 不要接触/bin, /sbin, 中的任何内容/lib(除非您需要手动安装的内核模块,因为您有不寻常的硬件),或/usr(除非/usr/local您自己使用)。

您的主目录中的所有文件都是您创建的(除了少数/etc/skel在您创建帐户时复制的文件)。没有通用的方法来跟踪哪些是应用程序默认值,哪些是您选择配置选项的结果,哪些是记录当前状态(打开文件、命令历史记录等)。


Chr*_*vid 6

对于第二点,您可以使用debsums -ac(来自同名包)列出所有已修改的包文件(包括配置文件)。