![是否可以从死机系统中获取已安装的软件包列表?](https://linux22.com/image/987457/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%BB%8E%E6%AD%BB%E6%9C%BA%E7%B3%BB%E7%BB%9F%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%B7%B2%E5%AE%89%E8%A3%85%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%8C%85%E5%88%97%E8%A1%A8%EF%BC%9F.png)
我需要从损坏的系统磁盘映像重新创建系统。
系统启动后我无法使用。备份算法只留下了类似的损坏图像。用户数据看起来是安全的,但我无法在启动时登录系统。它不接受键盘或鼠标输入,也不连接到网络。
由于我所能想到的只是尝试查看保存包信息的数据文件,那么它们在哪里呢?
一旦我有了这些包,如果数据仍然存在,我就可以从损坏的图像中调整每个包的配置。
答案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}'
等等...
注意::- 这样做的缺点是它会列出您以前安装的所有软件包(甚至是安装后删除的软件包)。