Debian 系与 RPM 系常用软件包查询命令对照与用法详解
Linux 下排错、打包、部署时,最常见的问题之一就是「这个东西是哪个包装的?」「这个包装了什么文件?」「有没有安装?」「哪个仓库来的?」。
在 RPM 系(如 CentOS / RHEL / Fedora / openEuler)里,你用的是 rpm + dnf/yum;在 Debian/Ubuntu 里,用的是 dpkg + apt。
理解它们的对应关系,能大幅提升你在两大阵营之间「切换脑子」的效率。
下面以你提到的 rpm -ql net-tools 为切入点,系统对比一下两派常用命令与用法。
1. 已安装包:查询文件列表(rpm -ql / dpkg -L)
你现在用的例子:
bash
rpm -ql net-tools
功能:
列出已安装包
net-tools包含的所有文件路径。
在 Debian/Ubuntu 中,对应命令是:
bash
dpkg -L net-tools
rpm -ql→ 已安装包的文件列表dpkg -L→ 已安装包的文件列表
典型用途:
-
确定某命令来自哪个路径(如
/usr/sbin/ifconfig) -
看一个包往系统里「扔」了哪些文件(配置、库、文档等)
-
查看 man 文档、配置文件位置:
bashrpm -ql net-tools | grep man dpkg -L net-tools | grep man
2. 已安装包:查看包信息(dnf info / apt show)
你刚才用的:
bash
dnf info net-tools
在 CentOS/RHEL/Fedora/openEuler 等 RPM 系中,查看仓库中(已安装或可安装)包的信息,一般有两种:
bash
dnf info net-tools # 新系统
yum info net-tools # 旧系统
而在 Debian/Ubuntu 中,对应的是:
bash
apt show net-tools
# 或更底层一点:
apt-cache show net-tools
两边都会展示类似信息:
- 版本、架构
- 来源仓库 (
From repo/APT-Sources) - 大小、license
- 简要描述(Summary / Description)
如果只想看本机已安装版本 ,RPM 系还可以用 rpm:
bash
rpm -qi net-tools
Debian 系则是:
bash
dpkg -s net-tools
对比关系:
| 功能 | RPM 系 | Debian 系 |
|---|---|---|
| 查询仓库中的包信息 | dnf info name / yum info |
apt show name / apt-cache show |
| 查询已安装包信息 | rpm -qi name |
dpkg -s name |
3. 已安装包:列出全部已安装包(rpm -qa / dpkg -l)
RPM 系:
bash
rpm -qa # 列出所有已安装 RPM 包
rpm -qa | grep net # 过滤
Debian 系:
bash
dpkg -l # 列出所有已安装 DEB 包
dpkg -l | grep net
或者更好读一点的:
bash
apt list --installed
apt list --installed | grep net-tools
4. 文件 → 包:某个文件是哪个包装来的?(rpm -qf / dpkg -S)
这是排错时非常有用的命令。
RPM 系
bash
rpm -qf /usr/sbin/ifconfig
# 或
dnf provides /usr/sbin/ifconfig # 支持模式匹配,更智能
-qf:query file- 作用:查出这个文件属于哪个已安装包。
Debian 系
bash
dpkg -S /usr/sbin/ifconfig
更强一点(即使没安装,也能从仓库里查)的用法,是先安装 apt-file:
bash
sudo apt install apt-file
sudo apt-file update
apt-file search /usr/sbin/ifconfig
对比关系:
| 功能 | RPM 系 | Debian 系 |
|---|---|---|
| 已安装文件 → 包 | rpm -qf /path/to/file |
dpkg -S /path/to/file |
| 仓库中(没装也可)搜索 | dnf provides /path/to/file |
apt-file search /path/to/file |
5. 包名模糊查找(dnf search / apt search)
想找「名字里包含 net」的包:
-
RPM 系:
bashdnf search net-tools dnf search ifconfig -
Debian 系:
bashapt search net-tools apt search ifconfig
用途:
- 不记得全名,只知道一部分;
- 想看看相关工具还有什么可装。
6. 安装 / 卸载包(install / remove)
这部分两边用法非常像。
安装
-
RPM 系:
bashdnf install net-tools # 或旧系统: yum install net-tools -
Debian 系:
bashapt install net-tools
卸载
-
RPM 系:
bashdnf remove net-tools # 或 yum remove/erase -
Debian 系:
bashapt remove net-tools # 移除程序保留大部分配置 apt purge net-tools # 连配置文件一起清掉
7. 从本地包文件查询(rpm -qlp / dpkg -c 等)
有时候你手里有一个 .rpm 或 .deb 文件,想看看里面有什么,而不安装。
RPM 系(.rpm)
bash
rpm -qlp some-package.rpm # 列出将要安装的文件列表
rpm -qip some-package.rpm # 查看这个 rpm 包的信息
Debian 系(.deb)
bash
dpkg -c some-package.deb # 列出文件列表(注意是 -c,不是 -L)
dpkg -I some-package.deb # 查看包控制信息(类似 rpm -qip)
8. 仓库里有哪些版本 / 源信息
RPM 系
当前可用版本:
bash
dnf list net-tools
dnf list --showduplicates net-tools # 显示所有可用版本
Debian 系
bash
apt list net-tools
apt-cache policy net-tools # 显示各仓库版本和当前安装版本
9. 依赖关系查询(requires / depends)
RPM 系
bash
# 某包依赖了什么
rpm -qR net-tools
# 谁依赖这个包(反向依赖)
dnf repoquery --whatrequires net-tools # 需要 dnf-plugins-core,发行版略有不同
Debian 系
bash
# 某包依赖了什么
apt-cache depends net-tools
apt-cache rdepends net-tools # 反向依赖
10. 系统提纲式对照表
下面给一个「常用命令对照速查表」,你可以存一份。
| 场景 / 功能 | RPM 系(RHEL / CentOS / Fedora / openEuler 等) | Debian 系(Debian / Ubuntu 等) |
|---|---|---|
| 查询包是否已安装 | rpm -q pkg |
dpkg -s pkg / apt list --installed pkg |
| 列出已安装包文件 | rpm -ql pkg |
dpkg -L pkg |
| 查看已安装包信息 | rpm -qi pkg |
dpkg -s pkg |
| 查看仓库中包信息 | dnf info pkg / yum info pkg |
apt show pkg / apt-cache show pkg |
| 列出所有已安装包 | rpm -qa |
dpkg -l / apt list --installed |
| 文件属于哪个已安装包 | rpm -qf /path/to/file |
dpkg -S /path/to/file |
| 文件属于哪个包(含仓库,未安装也查) | dnf provides /path/to/file |
apt-file search /path/to/file |
| 模糊搜索包名 | dnf search keyword / yum search keyword |
apt search keyword |
| 安装包 | dnf install pkg / yum install pkg |
apt install pkg |
| 卸载包 | dnf remove pkg / yum remove pkg |
apt remove pkg / apt purge pkg |
| 列出仓库中的包(含状态) | dnf list [pkg] |
apt list [pkg] |
| 查看所有可用版本/来源 | dnf list --showduplicates pkg |
apt-cache policy pkg |
| 查依赖关系(这个包依赖什么) | rpm -qR pkg |
apt-cache depends pkg |
| 查反向依赖(谁依赖这个包) | dnf repoquery --whatrequires pkg(以及其它 repoquery 子命令) |
apt-cache rdepends pkg |
| 查看本地包文件信息 | rpm -qip file.rpm |
dpkg -I file.deb |
| 查看本地包文件包含的文件列表 | rpm -qlp file.rpm |
dpkg -c file.deb |
11. 回到你的例子:用 rpm -ql 反查命令位置
你刚才看到:
bash
rpm -ql net-tools | grep /sbin
/usr/sbin/arp
/usr/sbin/ether-wake
/usr/sbin/ifconfig
/usr/sbin/ipmaddr
/usr/sbin/iptunnel
/usr/sbin/mii-diag
/usr/sbin/mii-tool
/usr/sbin/nameif
/usr/sbin/plipconfig
/usr/sbin/route
/usr/sbin/slattach
在 Debian 系里,完全一样的思路:
bash
dpkg -L net-tools | grep /sbin
比如在 Ubuntu 下,你也会看到 /sbin/ifconfig、/bin/netstat 等老命令的位置。
一旦知道这些文件实际路径,就可以推断 PATH 是否包含、权限是否正确、命令是否被替换/冲突。
12. 小结:用好这几条,基本够你排包相关问题
在日常运维/开发排障中,高频实战组合大致是:
- RPM 系:
rpm -qa | grep xxxrpm -ql packagerpm -qf /path/to/filednf info/search/list/provides package-or-file
- Debian 系:
dpkg -l | grep xxxdpkg -L packagedpkg -S /path/to/fileapt show/search/list package- (如果装了
apt-file)apt-file search /path/to/file
如果你愿意,我可以再帮你写一篇更偏「教学」风格的版本,带上具体场景例子(比如:排查某个命令缺失、定位哪个包丢库、或者对比 net-tools 与 iproute2 等)。