要查Linux服务器下当前存在的包,核心思路就一句话:用发行版自带的包管理器查询命令,不同系统命令不同,rpm系用yum/dnf/rpm,Debian系用apt/dpkg。这是每个运维人员都必须掌握的基本功,但很多人只会用一个yum list,遇到其他发行版就卡壳,这篇文章把主流Linux系统的查包方法全部拆开讲清楚,包括如何过滤、如何统计数量、如何区分手动安装与依赖安装,帮你彻底搞定这个问题。
怎么查Linux服务器下当前存在的包:先分清你的发行版
行业共识认为,Linux服务器查包的第一步不是敲命令,而是确认你用的是哪套包管理体系,摸错门路,命令再对也是白搭。
目前服务器市场主流就两大派系:
- RPM系:CentOS、RHEL、Rocky Linux、Alibaba Cloud Linux、openEuler等,包后缀是.rpm,用yum或dnf管理
- Debian系:Ubuntu Server、Debian、Deepin等,包后缀是.deb,用apt或dpkg管理
还有少数特殊场景,比如源码编译安装的软件、容器镜像里的精简系统,这些另说。
判断方法极其简单,执行下面任意一条命令即可:
cat /etc/os-release
rpm --version # 能输出版本号就是RPM系
dpkg --version # 能输出版本号就是Debian系
搞清楚了系统类型,接下来就看具体命令,需要说明的是,查询包列表是只读操作,不会影响系统,放心大胆执行。
Linux服务器查看已安装包的命令有哪些:RPM系全解
如果你用的是CentOS 7、Rocky Linux 8/9、RHEL这类系统,查询已安装包的方法比较丰富,下面从最常用到最进阶的顺序列出。
yum list installed:最直观的查包方式
CentOS 7和早期版本中,yum list installed是最常用的命令,它会把所有通过yum安装的包列出来,每一行包含包名、版本号、仓库来源。
yum list installed
如果想分页查看,加个管道:
yum list installed | less
如果只想看某个软件包是否安装,用grep过滤:
yum list installed | grep nginx
注意这里的grep会匹配包名中包含nginx的所有包,比如nginx-mod-stream、nginx-filesystem等,要精确匹配,用正则:
yum list installed | grep -w nginx
rpm -qa:更底层的查询命令
rpm是RPM包管理的底层工具,rpm -qa列出所有已安装包,不带版本信息以外的冗余内容,输出格式是“包名-版本号-发行版本.架构”。
rpm -qa
这个命令的优点是速度极快,在包数量多的服务器上也几乎瞬间完成,配合grep使用是运维日常高频操作:
rpm -qa | grep -i mysql
加上-i参数忽略大小写,方便查MySQL、mysql、MYSQL这类名称不固定的软件包。
dnf list installed:新一代系统的默认工具
RHEL 8、Rocky Linux 8以上、CentOS Stream等系统,yum已被dnf取代(实际yum命令软链接到dnf),dnf命令设计更友好,和其他子命令风格统一。
dnf list installed
dnf的查询结果包含三列:包名、版本、安装来源,如果你看到@System字样,说明这个包是通过依赖自动安装的,不是手动安装的。
完整命令对比,方便你选择:
| 命令 | 适用场景 | 速度 | |
|---|---|---|---|
| yum list installed | 包名+版本+仓库来源 | 日常查看,信息完整 | 中等 |
| rpm -qa | 包名-版本-架构 | 快速过滤、脚本处理 | 极快 |
| dnf list installed | 包名+版本+来源 | 新版系统日常查看 | 中等 |
查包必看:Debian系系统的查看安装包方法
Ubuntu Server、Debian系列的查包命令和RPM系完全不同,很多从CentOS转过来的运维最容易在这里栽跟头。
dpkg -l:Debian系的核心查询命令
dpkg是Debian系底层的包管理工具,作用相当于rpm。dpkg -l列出所有包的详细状态信息,输出格式为四列:状态标记、包名、版本号、简介。
dpkg -l
状态标记通常是ii,第一个i表示期望状态是已安装,第二个i表示实际状态已安装,如果看到rc,说明包已删除但配置文件残留。
过滤nginx相关包:
dpkg -l | grep nginx
apt list –installed:更接近现代风格的查法
在Ubuntu 16.04+、Debian 9+系统中,apt命令封装了dpkg,体验更好:
apt list --installed
输出格式为“包名/仓库名 版本 架构”,信息干净利落,同样支持grep过滤:
apt list --installed | grep redis
另外还有一个宽泛一点的命令:
apt --installed list
两者效果等同,写法不同而已。
按条件精确过滤已安装包
有时某个服务的包特别多,比如OpenStack、Kubernetes相关组件,全部列出来太长了,可以按关键字精确搜索:
dpkg -l | grep -E "^(ii)\s+nginx"
这个命令只列出完整的、状态为ii的nginx包,也可以用apt的search参数结合dpkg查询:
apt list --installed "nginx"
通配符帮你在不额外安装工具的情况下模糊匹配包名。
实战技巧:如何区分手动安装的包和依赖自动安装的包
服务器跑久了,包越积越多,但哪些是当时手动装的,哪些是被依赖拉进来的,很多人分不清,这块内容对于排查问题和精简系统特别有用。
RPM系查询手动安装的包
RHEL系系统中,yum会记录每个包的安装事务,执行:
yum history list
这个命令列出所有安装事务,包括时间、操作类型、涉及的包数量,标记为“Install”且是你自己执行的事务,对应的就是手动安装的包。
查看具体某次事务安装了什么:
yum history info <事务ID>
想直接列出所有手动安装的包,用yumdb查询(CentOS 7及以上):
yumdb search command_line ""
输出会带上安装该包时执行的完整命令。command_line为空,说明是通过依赖自动安装的。
Debian系查询手动安装的包
apt记录了包的自动安装标记(auto/manual),apt-mark命令可以查询所有手动安装的包:
apt-mark showmanual
输出的包列表就是手动明确安装的,依赖包不会出现在这个列表里。
对应地,查看所有自动安装的依赖包:
apt-mark showauto
配合grep可以快速验证某个包是不是手动装的:
apt-mark showmanual | grep python3
这个功能在清理无用依赖时很有价值,此时可以安全地用apt autoremove清除不再需要的依赖包。
统计包数量与核对依赖信息
查包不仅是看列表,服务器上到底装了多少个包、某个依赖是否被其他包引用,这些运维场景同样属于“查包”范畴。
统计当前已安装包的总数
RPM系:
rpm -qa | wc -l
Debian系:
dpkg -l | grep -c ^ii
或者用apt的方式:
apt list --installed 2>/dev/null | grep -c "^"
统计结果只是参考值。“包数量多并不意味着系统臃肿”,因为不少基础依赖是必需的,比如glibc、openssl-libs这类底层库,删了系统就崩了。
查询某个文件属于哪个包
服务器上发现有个奇怪的二进制文件,想查它属于哪个包,这是另一个高频场景。
RPM系用:
rpm -qf /usr/bin/nginx
Debian系用:
dpkg -S /usr/bin/nginx
这两条命令返回完整的包名和版本号,帮助你判断该包是否可以安全升级或删除。
查询某个包依赖了哪些其他包
排查“为什么这个软件跑不起来”时,需要查依赖关系:
rpm -qR nginx
Debian系对应:
apt depends nginx
反过来查“有哪些包依赖这个包”:
rpm -q --whatrequires libssl.so.10
Debian系用:
apt rdepends libssl1.1
依赖查询在升级核心库之前务必执行一遍,否则可能拉垮一堆服务。
排查服务器问题时怎么用好查包命令
查包不是孤立操作,实际运维中它服务于排障、审计、安全加固等具体场景。
服务启动失败,怀疑包被误删
systemctl status nginx # 查看服务状态,提示找不到可执行文件
rpm -q nginx # 查询包是否还在
rpm -V nginx # 校验包文件完整性
rpm -V返回的输出项如果有SM5DLUGT等标记,说明对应文件被修改过,配合rpm -qf定位文件归属,可以快速判断是包缺失还是文件损坏。
安全审计时排查漏洞相关包
CVE漏洞通告出来后,需要确认服务器上是否存在受影响版本的包。
rpm -qa | grep openssl
dpkg -l | grep openssl
结合版本号比对,判断是否在受影响的版本区间内,这个流程在所有安全应急响应中都会用到。
新接手的服务器,快速摸清环境
不清楚陌生服务器上装了什么东西,先看几个关键维度:
rpm -qa | grep -E "nginx|httpd|mysql|php|java" # 看常见Web服务
yum grouplist installed # 看安装的软件组(RPM系)
dpkg -l | grep -E "nginx|apache|mysql|php" # Debian系Web服务检查
再看系统架构和内核信息,结合包列表,大概就能判断这台服务器是干什么用的,以及有哪些潜在风险点。
常见问题:关于查Linux服务器已安装包的几个疑问
查不了包列表,提示“command not found”,是什么原因?
大多数情况下是因为yum、apt等命令未加入PATH路径,比如精简安装的系统,可能不带包管理工具,排查步骤:先确认系统类型(cat /etc/os-release),再查看包管理器是否安装(ls /usr/bin/yum或ls /usr/bin/apt),如果确实没有,RPM系可以从安装光盘挂载rpm包手动安装,Debian系用dpkg从本地deb文件安装,容器场景中,部分极简镜像(如Alpine)用的是apk命令,不是yum也不是apt。
如何查询某软件包在仓库里的最新版本和当前已安装版本?
RPM系用两条命令:
yum info nginx # 查看仓库最新版本
yum list installed nginx # 查看本地已安装版本
Debian系用:
apt show nginx # 查看仓库信息
dpkg -l nginx # 查看本地已安装信息
对比输出中的Version字段,就能判断是否需要升级。
只想列出一类软件包,有没有比grep更高效的方式?
对于RPM系,使用yum的search参数:
yum list installed | grep -E "^nginx|^php"
Debian系中,用apt的通配符更直接:
apt list --installed "php"
这两种方式都不过滤仓库信息,输出更聚焦,grep依然是所有发行版通用的最保险手段,适合习惯统一化操作的人。
查Linux服务器下当前存在的包,核心就是先认系统,再选命令,RPM系用yum/dnf/rpm,Debian系用apt/dpkg,再配合grep过滤、管道统计、apt-mark区分手动安装,你就能对服务器上的软件包了如指掌,不管日常维护还是排查问题,这套方法都够用了,把这些命令记牢,遇到任何Linux发行版都能顺手查清楚。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/790164.html


