如何在挂载的Arch Linux磁盘中列出pacman及AUR安装的软件包
如何在挂载的Arch Linux磁盘中列出pacman及AUR安装的软件包
兄弟,我太懂你换机器时的这种窘境了——旧SSD没法直接登录系统,还得把之前折腾半天装的软件包都导到新机器上对吧?别慌,下面给你说两种靠谱的方法,还有AUR包的处理技巧:
一、轻量方法:直接读取旧系统的pacman数据库(不用chroot)
这是我最推荐的方式,省得折腾chroot的各种挂载步骤,直接读磁盘上的pacman数据库就行:
- 先把旧系统的根分区挂载到一个临时目录,比如
/mnt/oldarch(你可以自己改挂载点,只要路径对就行),不需要单独挂载/boot、/home这些,因为pacman的数据库存在/var/lib/pacman/local/里,只要根分区挂好就够了。 - 用pacman的
--dbpath参数指定旧数据库路径,就能列出包了:- 导出所有你手动显式安装的包(包括官方源里的,不包含自动安装的依赖):
pacman -Qe --dbpath /mnt/oldarch/var/lib/pacman/ > pacman_explicit_pkgs.txt - 要是想导出所有已安装的包(含依赖),就用:
pacman -Q --dbpath /mnt/oldarch/var/lib/pacman/ > pacman_all_pkgs.txt
- 导出所有你手动显式安装的包(包括官方源里的,不包含自动安装的依赖):
二、你提到的chroot方法(适合需要旧系统环境的情况)
如果你还想在旧系统的环境里做些其他操作,chroot也是可行的,步骤如下:
- 先挂载旧根分区到
/mnt/oldarch - 挂载必要的虚拟文件系统,不然chroot进去会出问题:
mount --bind /dev /mnt/oldarch/dev mount --bind /proc /mnt/oldarch/proc mount --bind /sys /mnt/oldarch/sys - 进入chroot环境:
arch-chroot /mnt/oldarch - 现在就和正常登录旧系统一样了,导出包列表:
pacman -Qe > package_list.txt - 退出chroot:
exit,然后去/mnt/oldarch/下把生成的文件复制到新系统里就行。
三、AUR包的处理技巧
要注意,pacman的数据库里不会记录AUR包,所以得从旧系统的残留文件里找:
- 如果你之前用了yay、paru这类AUR助手,且旧系统的/home分区还在挂载的磁盘里,可以去看助手的缓存目录,比如yay的缓存在
/mnt/oldarch/home/你的用户名/.cache/yay/,里面的文件夹名就是你装过的AUR包(不过要是你之前清理过缓存,这个方法就失效了)。 - 另一种方法是翻pacman的日志,AUR包安装时会在日志里标记“本地包”,用这个命令过滤:
这个能把大部分AUR包列出来,不过如果日志被轮转清理过,可能会有遗漏。grep -i "installed.*local" /mnt/oldarch/var/log/pacman.log | awk '{print $4}' > aur_pkgs.txt
最后给你个小提醒:导出的pacman包列表,在新系统里可以用pacman -S --needed - < pacman_explicit_pkgs.txt来批量安装,它会自动跳过已经装了的包,省不少事!
备注:内容来源于stack exchange,提问作者Miguel Carvalho




