是否可以从死机系统中获取已安装的软件包列表?

是否可以从死机系统中获取已安装的软件包列表?

我需要从损坏的系统磁盘映像重新创建系统。

系统启动后我无法使用。备份算法只留下了类似的损坏图像。用户数据看起来是安全的,但我无法在启动时登录系统。它不接受键盘或鼠标输入,也不连接到网络。

由于我所能想到的只是尝试查看保存包信息的数据文件,那么它们在哪里呢?

一旦我有了这些包,如果数据仍然存在,我就可以从损坏的图像中调整每个包的配置。

答案1

从技术上讲,是的。所有已安装的软件包都有一个*.list与之关联的文件;这些文件是安装软件包时创建的所有文件的列表(但这不是重点,我们只需要知道软件包本身的名称就可以知道安装了什么)。

因此,您可以做的是连接驱动器(可以是 SATA 到 USB 连接器或实时 CD/USB),安装损坏驱动器的分区(使用udisksctl mount -b /dev/sdb1,注意用sdb1实际磁盘替换),导航到安装分区的安装点,然后运行

 find ./var/lib/dpkg/info/ -name "*.list"  -type f -printf "%P\n" |  awk -F'.' '{print $1}'  

例如,我的驱动器上还有另一个分区,其中有 15.10 Ubuntu。以下是我要做的事情:

DIR:/xieerqi
skolodya@ubuntu:$ udisksctl mount -b /dev/sdb5                                                                                
Mounted /dev/sdb5 at /media/xieerqi/0ca7543a-5463-4a07-8bbe-233a7b0bd6251.

DIR:/xieerqi
skolodya@ubuntu:$ cd /media/xieerqi/0ca7543a-5463-4a07-8bbe-233a7b0bd6251   

DIR:/0ca7543a-5463-4a07-8bbe-233a7b0bd6251
skolodya@ubuntu:$ find /var/lib/dpkg/info/ -name "*.list"  -type f -printf "%P\n" |  awk -F'.' '{print $1}' | head
libbuzztard0
linux-headers-3
indicator-bluetooth
python-twisted-mail
netpbm
mtp-tools
javahelp2
firefox-locale-zh-hant
gir1
libqapt2

边注

此方法会生成一个列表,显示自上次启动系统以来所有已安装的软件包。示例来自我的正在运行的系统

DIR:/xieerqi
skolodya@ubuntu:$ find  /var/lib/dpkg/info/ -name "*.list"  -type f -printf "%P\n" |  awk 'END{print NR}'                     
2837

DIR:/xieerqi
skolodya@ubuntu:$ dpkg --get-selections | awk 'END{print NR}'
2837

答案2

启动到实时环境并执行以下操作:

sudo mount /dev/sdaXY /mnt

根据您的要求更改 XY

sudo find /mnt/var/log/ -type f -iname dpkg.log*

在这里,您将获得一个文件列表,例如:

dpkg.log
dpkg.log.1
dpkg.log.2.gz

等等...

将它们复制到您有权访问的另一个文件夹/驱动器(此外,如果有任何档案dpkg.log.2.gz,请提取它们)。

现在获取系统中安装的所有软件包的列表:

grep " install " /path/to/dpkg.log | awk -F' ' '{print $4}'
grep " install " /path/to/dpkg.log.1 | awk -F' ' '{print $4}'
grep " install " /path/to/dpkg.log.2 | awk -F' ' '{print $4}'

等等...

注意::- 这样做的缺点是它会列出您以前安装的所有软件包(甚至是安装后删除的软件包)。

相关内容