从 dpkg.status.0 获取 dpkg --get-selections 等效列表

从 dpkg.status.0 获取 dpkg --get-selections 等效列表

我的 SSD 崩溃了,我找不到dpkg --get-selections我最近创建的输出。但是,我可以从损坏的 SSD 中复制文件/var/backups/dpkg.status.0。我觉得我得到的所有信息dpkg --get-selections都在那里,但格式不对。我觉得一定有一个命令可以转换它(而不是自己写一个脚本)。问题:那个命令是什么?

答案1

基本上,我的想法是,所有应用程序都有/var/backups/dpkg.status.0install ok installed,因此您只需使用此命令即可获得相同的输出dpkg --get-selectionsgrep "Package" < /var/backups/dpkg.status.0 | awk '{print $2"\t\tinstall"}'。检查一下。

答案2

首先,检查dpkg --get-selections原始数据从哪里获取。如果您怀疑数据来自 /var,那么您可以使用 grep 进一步缩小结果范围。如下所示:

strace dpkg --get-selections 2>&1 | grep /var

这将产生以下结果:

open("/var/lib/dpkg/updates/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
open("/var/lib/dpkg/available", O_RDONLY) = 3
open("/var/lib/dpkg/triggers//File", O_RDONLY) = 3
stat("/var/lib/dpkg/triggers/Unincorp", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0

然后,如果您想知道该dpkg备份文件来自哪里,您可以搜索您的 cron 文件以查找以下内容dpkg

 grep -R dpkg /etc/cron*

由此,您可以发现,这/var/backup/dpkg.status.0是基于首先备份然后旋转的/var/lib/dpkg/status

综合以上内容,你可以通过临时恢复“dpkg status”文件然后运行dpkg --get-selections来生成所需的报告。它现在将引用你的备份数据。/var/lib/dpkg/statusdpkg --get-selections

相关内容