【 概 述 】银河麒麟桌面系统的包管工具dpkg在实际的生产、办公或是排障中有很大用处,下面笔者将结合案例展现dpkg命令的一些常见用法,文末拓展了一个实用的包提取工具
【 常见用法 】
1、# dpkg -l | grep 包名 查看是否安装了某个软件包,grep适用于我们记不清软件包的准确名称的情况## 比如说我们的系统没有正常进入图形界面,可以通过该命令查看相关软件包的状态,是否被删除,或者直接没有找到这个软件;又比如我们想查看系统是是否装有wps软件,可以使用该命令确定,如上图返回五列,分别表示:软件包状态,ii为已安装;软件包名;软件包版本;架构;软件包描述
常见状态符号及含义如下:
ii
表示软件包已安装且配置完成(i=installed)。这是正常安装后的标准状态。
rc
表示软件包已被删除(r=removed),但配置文件仍保留在系统中(c=config-files)。可通过apt purge彻底清除。
un
表示软件包未被安装(u=unknown),且系统未保留其配置文件(n=not-installed)。
hi
表示软件包被手动标记为保留(h=hold),阻止自动升级或删除。可通过apt-mark hold设置。
pn
表示软件包被彻底清除(p=purged),包括所有配置文件(n=not-installed)。
ud
表示软件包因依赖问题未完成安装或配置(u=unpacked, d=half-configured)。
2、# dpkg -l | grep "^rc" 查看被卸载但仍保留有配置文件的软件包 # dpkg -l | grep -v "ii" 查看状态除正常已安装之外的所有其他状态的软件包## 这两个命令常用于查看系统中被误删除的软件
3、# dpkg -L 软件包名 查看某个已安装软件包的所有文件和目录路径,适用于已安装的包 # dpkg -c 软件包全名 显示 .deb 包中所有文件的列表,包括路径和权限信息,适用于尚未安装的包文件## 如图,我们可以看到ukui-greeter软件包安装的文件,这里我截取了部分,如配置文件ukui-greeter.conf和可执行文件也就是命令ukui-greeter,在排障中,也可以通过执行该命令初步确定软件包是否被删除
## 可以看到dpkg -L和dpkg -c的区别,前者指定包名即可,后者指定的是当前目录下存在的软件包全名
4、# dpkg -s 软件包名 查看软件包的详细信息## 如图,可以看到软件的状态、版本、依赖和描述等
5、# dpkg -S 文件 查询某个文件所属软件包## https://blog.csdn.net/H15578730450/article/details/155780845?spm=1001.2014.3001.5502
在上一篇库文件损坏的博客中,我们采用的是拷贝同系统的libmount.so.1.1.0库,将损坏的库替换,再重建软链接和更新库缓存。当然也可以通过查看该文件所属的软件包为libmount1,然后重装该包修复
6、# dpkg -i 软件包全名 安装指定软件包 # dpkg -i *.deb 安装当前目录下所有的软件包## 上图为安装libmount1软件包示例
7、# dpkg -x 软件包全名 /target/directory 提取.deb包的内容到指定目录下(不安装)## 这里我创建了一个空目录libmount1,并将当前目录下的libmount1软件包中的内容提取到了该目录下,可以看到这个包中的内容包含了libmount.so的库文件,我们也可以通过这种方法提取库文件替换损坏了的libmount.so.1.1.0
8、# dpkg -r 软件包名 卸载软件包但保留其配置文件 # dpkg -P 软件包名 彻底卸载软件包及其所有配置文件## 以上为卸载软件的命令
9、# dpkg --add-architecture 体系架构 用于在当前架构中添加其他的体系架构 # dpkg --remove-architecture 体系架构 用于在架构列表中移除某架构 # dpkg --print-architecture 显示dpkg体系架构 # dpkg --print-foreign-architectures 显示已启用的异质体系结构## 以上命令适用于能连外网源的情况,如图,我的系统架构是arm64,当我想通过这个系统下载amd64架构的软件包时,可以通过--add-architecture选项添加amd64的架构,然后通过apt download 软件包名:amd64指定下载这一架构的软件包
【 扩 展 】
# dpkg-repack 软件包名 提取系统中的某个软件包到当前目录下## dpkg-repack常用于内网环境下,提取系统中的某个软件包。如上图,从同样系统的机器中提取libmount1软件包,放到libmount.so.1.1.0库损坏的机器上安装,同样可以解决库文件损坏的问题。dpkg-repack这个软件包有需要的私信