Linux 软件包管理从入门到实战:不再迷路于 yum、apt、rpm 之间
包管理器就是 Linux 的“应用商店”,读完这篇你也能闭眼装软件
一、为什么 Linux 装软件不像 Windows 那样“双击 exe”?
很多刚接触 Linux 的小伙伴都会有一个灵魂拷问:“我从官网下载了一个 .exe,怎么在 Linux 上打不开?”
答案是:Linux 有自己的一套软件安装逻辑——包管理器(Package Manager)。
简单来理解:
- Windows:你去官网找安装包 → 下载
.exe→ 双击 → 一路“下一步”。 - Linux(RedHat 系):
dnf install nginx→ 系统自动从官方仓库下载并安装。 - Linux(Debian 系):
apt install nginx→ 同理。
包管理器帮你做了三件“脏活累活”:
- 自动解决依赖——比如你要装 A,A 依赖 B 和 C,包管理器会自动把 B、C 一起装好。
- 从可信仓库下载——不用满网找安装包,避免下到带后门的版本。
- 统一卸载和更新——一条命令全部搞定,不留垃圾。
二、两大门派:RPM 系 vs DEB 系
Linux 世界分两大阵营,包格式和包管理器都不同,选系统时就决定了你用哪一套:
| 特性 | RedHat 系 | Debian 系 |
|---|---|---|
| 代表发行版 | RHEL、CentOS、Rocky、Fedora | Debian、Ubuntu、Deepin |
| 包格式 | .rpm | .deb |
| 上层包管理器 | dnf(旧版 yum) | apt |
| 底层工具 | rpm | dpkg |
| 仓库配置文件 | /etc/yum.repos.d/*.repo | /etc/apt/sources.list 或 /etc/apt/sources.list.d/*.sources |
⚠️ 新手避坑:
.rpm包不能装在 Ubuntu 上,.deb包也不能装在 Rocky 上。格式不通用,强行安装会报依赖地狱。
三、底层工具:RPM 和 DPKG——最基础的“搬运工”
在 dnf 和 apt 这些“智能管家”出现之前,rpm 和 dpkg 是最底层的打包工具。它们负责把软件包解压并复制到系统对应目录,但不会自动解决依赖。
3.1 RPM 命令实战(Rocky/CentOS 系列)
安装本地 .rpm 包:
# -i 安装,-v 显示详情,-h 显示进度条
sudo rpm -ivh nginx-1.20.1-28.el9.x86_64.rpm
但现实中你很可能遇到这个场景(新手翻车现场):
[root@magedu ~]# rpm -ivh nginx-1.20.1-28.el9.x86_64.rpm
error: Failed dependencies:
nginx-core = 2:1.20.1 is needed by nginx-2:1.20.1
nginx-filesystem = 2:1.20.1 is needed by nginx
rocky-logos-httpd is needed by nginx
这就是典型的“依赖缺失”——nginx 这个包需要其他几个包才能正常工作,而 rpm 不会帮你去下载它们,只会直接报错退出。
正确的做法:把缺失的依赖包一起下载到同一目录,一次性全部安装:
# 假设把所有依赖 rpm 放在同一目录下
sudo rpm -ivh *.rpm
常用 RPM 查询操作(非常实用):
| 操作 | 命令 | 用途 |
|---|---|---|
| 查看某个包安装了哪些文件 | rpm -ql nginx | 排查配置文件路径 |
| 某个文件属于哪个包 | rpm -qf /etc/nginx/nginx.conf | 误删文件时找来源 |
| 查看包详细信息 | rpm -qi nginx | 查看版本、简介、官网 |
| 列出所有已安装包 | rpm -qa | 配合 grep 过滤用 |
3.2 DPKG 命令实战(Ubuntu/Debian 系列)
Ubuntu 的底层工具是 dpkg,用法和 rpm 非常相似:
# 安装本地 .deb 包
sudo dpkg -i wget_1.21.4-1ubuntu4.3_amd64.deb
# 如果报依赖缺失,需要手动修复(apt 会帮你补装)
sudo apt install -f # 修复依赖,这条命令非常救命!
# 查询已安装包
dpkg -l | grep nginx
# 查看包安装了哪些文件
dpkg -L nginx
# 查看文件属于哪个包
dpkg -S /etc/nginx/nginx.conf
经典踩坑:你手动下载了一个 .deb 包,用 dpkg -i 装完后提示依赖缺失,一脸懵。记住万能解救命令:sudo apt install -f,它会自动把缺的依赖补上,不用重装整个系统。
四、智能管家:DNF 和 APT——自动搞定一切
rpm 和 dpkg 是“手自一体”的手动挡,而 dnf 和 apt 是自动挡——它们会连接远程仓库,自动解决依赖,一条命令装好所有东西。
4.1 Rocky Linux 的 DNF
Rocky 9/10 里虽然还能敲 yum,但它实际已经指向了 dnf。所以直接养成习惯用 dnf。
日常最常用的命令:
# 安装软件(-y 表示自动确认)
sudo dnf -y install nginx vim
# 删除软件
sudo dnf remove nginx
# 更新某个软件到最新版
sudo dnf update nginx
# 搜索软件包(不知道全名时用)
sudo dnf search nginx
# 查看软件包详情(版本、介绍、大小、依赖)
sudo dnf info nginx
# 查看某个命令属于哪个包(极其实用!)
sudo dnf provides /usr/bin/nginx
sudo dnf provides */netstat
# 列出已安装的所有包
sudo dnf list installed
# 查看操作历史,可以回滚
sudo dnf history
sudo dnf history undo 5 # 撤销第5次操作
包组安装(适合装开发环境):
# 查看所有包组
sudo dnf group list
# 安装全套开发工具(gcc、g++、make、cmake 等)
sudo dnf groupinstall -y "Development Tools"
清理缓存(磁盘空间告急时常用):
sudo dnf clean all
4.2 Ubuntu 的 APT
Ubuntu 的 apt 是 apt-get 的升级版,命令更简洁直观:
# 更新软件源列表(换源后必须执行)
sudo apt update
# 升级所有可升级的包(生产环境慎用!)
sudo apt upgrade -y
# 安装软件
sudo apt -y install nginx
# 删除软件(保留配置文件)
sudo apt remove nginx
# 彻底删除(连配置文件一起删)
sudo apt purge nginx
# 搜索
sudo apt search nginx
# 查看详情
sudo apt show nginx
# 查看该包依赖了谁(我依赖谁)
sudo apt depends nginx
# 查看谁依赖了这个包(谁依赖我)
sudo apt rdepends nginx
# 自动清理无用的依赖包
sudo apt autoremove
# 清理下载的缓存 .deb 文件
sudo apt autoclean
新手最容易搞混的两对命令:
| 对比 | 命令 | 效果 |
|---|---|---|
remove vs purge | apt remove nginx | 删软件,但保留 /etc/nginx 配置 |
apt purge nginx | 删软件,配置文件也一起干掉 | |
autoremove vs autoclean | apt autoremove | 删除不再被任何包依赖的“孤儿”包 |
apt autoclean | 只删缓存里过时的旧版本 .deb 文件 |
💡 工作场景:如果你只是想重装软件,用
remove即可保留原有配置;如果是彻底清理环境,用purge。
五、本地包安装——离线环境怎么办?
很多企业的生产服务器是不能联网的,这时候需要提前把包和所有依赖下载好,拷到服务器上离线安装。
Rocky 系离线安装
# 只下载不安装(存到默认缓存 /var/cache/dnf/)
sudo dnf install --downloadonly nginx
# 下载到指定目录
sudo dnf install --downloadonly --downloaddir=/tmp/rpms nginx
# 查看下载好的 rpm 包
ls -lh /tmp/rpms/
# 输出类似:
# nginx-1.20.1-28.el9.x86_64.rpm
# nginx-core-1.20.1-28.el9.x86_64.rpm
# nginx-filesystem-1.20.1-28.el9.noarch.rpm
# rocky-logos-httpd-90.17-1.el9.noarch.rpm
拿到这些 .rpm 文件后,拷到离线服务器上,用 rpm -ivh *.rpm 全部装完。
Ubuntu 系离线安装
# 只下载不安装
sudo apt install --download-only nginx
# 所有 .deb 包会存到 /var/cache/apt/archives/
ls -lh /var/cache/apt/archives/*.deb
# 如果想把依赖也一起下载完整,可以用 apt-get 的 -d 参数
sudo apt-get -d install nginx
把 /var/cache/apt/archives/ 下的 .deb 文件拷到离线机器,用 dpkg -i *.deb 安装,如果报依赖缺失,再执行 sudo apt install -f(前提是离线机器挂了本地镜像源)。
六、更换镜像源——让下载速度起飞
官方源在国外,国内访问龟速。换国内镜像源是入门第一课,也是你入职后第一个可能接触的运维操作。
6.1 Rocky Linux 换源
第一步:备份原配置(好习惯,防止改崩了回不去)
sudo mkdir -p /etc/yum.repos.d/backup
sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
第二步:配置阿里云源(国内最稳定)
sudo cat > /etc/yum.repos.d/rocky.repo << 'EOF'
[baseos]
name=Rocky Linux $releasever - BaseOS
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-$releasever
[appstream]
name=Rocky Linux $releasever - AppStream
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-$releasever
[extras]
name=Rocky Linux $releasever - Extras
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/extras/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-$releasever
EOF
第三步:刷新缓存
sudo dnf makecache
6.2 Ubuntu 换源(26.04 代号 resolute,24.04 代号 noble)
Ubuntu 新版把源配置移到了 /etc/apt/sources.list.d/ubuntu.sources,格式也变了:
# 备份原文件
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
# 替换为阿里云源
sudo cat > /etc/apt/sources.list.d/ubuntu.sources << 'EOF'
Types: deb
URIs: https://mirrors.aliyun.com/ubuntu/
Suites: resolute resolute-updates resolute-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: https://mirrors.aliyun.com/ubuntu/
Suites: resolute-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
EOF
# 刷新源列表
sudo apt update
⚠️ 超重要提醒:
resolute是 Ubuntu 26.04 的代号,如果你用的是 24.04,要把resolute全部改成noble。不同大版本的源不通用! 26.04 的包强装在 24.04 上会导致 glibc 等核心库版本冲突。
6.3 扩展知识:EPEL 仓库(Rocky/CentOS 专属宝箱)
EPEL(Extra Packages for Enterprise Linux)是 Fedora 社区维护的“附加软件包仓库”,里面有很多官方源没有的软件,比如 certbot、htop、ansible 等。
启用 EPEL 源:
sudo dnf -y install epel-release
替换为阿里云 EPEL 镜像(提升下载速度):
sudo cat > /etc/yum.repos.d/epel.repo << 'EOF'
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-$releasever
EOF
sudo dnf makecache
6.4 进阶操作:添加 Nginx 官方源
如果你想安装最新版 Nginx(而不是 Rocky/Ubuntu 自带的老版本),可以添加 Nginx 官方源:
sudo cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
# 安装最新版 Nginx
sudo dnf -y install nginx
七、两大包管理器命令速查对比表
| 操作 | Rocky(DNF) | Ubuntu(APT) |
|---|---|---|
| 安装 | dnf install nginx | apt install nginx |
| 删除(保留配置) | dnf remove nginx | apt remove nginx |
| 彻底删除 | dnf remove nginx(配置需手动删) | apt purge nginx |
| 更新单个包 | dnf update nginx | apt install nginx --only-upgrade |
| 更新所有 | dnf update | apt upgrade |
| 搜索 | dnf search nginx | apt search nginx |
| 查看详情 | dnf info nginx | apt show nginx |
| 查看命令属于哪个包 | dnf provides */nginx | apt-file search /usr/sbin/nginx(需安装 apt-file) |
| 清理缓存 | dnf clean all | apt autoclean |
| 仅下载不安装 | dnf install --downloadonly | apt install --download-only |
八、课后思考题(帮助巩固)
-
dnf install和rpm -ivh的核心区别是什么?
(提示:依赖解决、网络下载、自动化程度) -
为什么要更换镜像源?
(提示:速度、可用性、网络环境) -
apt remove和apt purge有什么区别?分别什么场景用? -
离线服务器(没有外网)如何安装 nginx 及其依赖?
(提示:--downloadonly+ 拷包 +rpm -ivh或dpkg -i) -
Rocky 9 和 Rocky 10 的软件源通用吗?为什么?
-
Ubuntu 24.04(noble)和 26.04(resolute)的软件源能混用吗?为什么?
九、总结
- Linux 装软件靠包管理器,分
rpm/dpkg(底层)和dnf/apt(上层智能管家)。 - 日常操作无脑用
dnf或apt,依赖自动解决,省心省力。 - 只有离线或特殊场景才用
rpm -ivh或dpkg -i,此时需要自己处理依赖。 - 换镜像源是必学技能,国内用户优先选阿里云、清华或中科大。
- Rocky 用 DNF,Ubuntu 用 APT,命令不同但逻辑相通,学一个另一个触类旁通。

355

被折叠的 条评论
为什么被折叠?



