dpkg -l 查看软件的状态
前言
今天使用dpkg -l | grep openjdk
查看安装的openjdk版本时,发现有3个版本,但是执行java --version
提示没有安装,使用apt autoremove
也无法卸载,如下图所示:
查了下资料才知道,dpkg -l
得到的结果并不是所有已安装的,也包括已卸载的,目前查到的这三个就是我以前安装了又卸载了的,最前面的rc
表示已经卸载(r:removed)但是配置文件(c:config)还在。
要想清理这三个安装包的配置文件,需要使用dpkg --purge
命令,如下图所示:
sudo dpkg --purge openjdk-17-jre-headless openjdk-21-jre-headless openjdk-8-jre-headless
清理完成后,可以看到查不到关于openjdk的相关安装内容了。
Dpkg 的常见状态
状态码 | 说明 |
---|---|
ii | 已安装且正常 |
rc | 已卸载但配置文件残留 |
un | 从未安装过 |
hi | 设置为保留(hold)状态(不升级),且已安装 |
pn | 被设置为 purge,但当前没安装 |
ri | 设置为 remove,但包仍在系统中 |
fu | 配置失败,可能需要修复 |
可以看到这些状态都时2位,其实这个状态是分为首位和末位的,常用值分别如下:
首位 | 用户期望状态(Desired action)
字符 | 含义 |
---|---|
u | Unknown(未知) |
i | Install(安装) |
r | Remove(卸载,但保留配置文件) |
p | Purge(彻底删除,包括配置文件) |
h | Hold(保持,不升级) |
次位 | 当前状态(Package status)
字符 | 含义 |
---|---|
n | Not-installed(未安装) |
i | Installed(已安装) |
c | Config-files(仅有配置文件) |
u | Unpacked(已解包但未配置) |
f | Failed-config(配置失败) |
h | Half-installed(半安装) |
查看所有不正常的安装
dpkg -l | grep -E '^.[^i]'
可以看到所有不正常的安装软件如下: