装个 Nginx 提示 package not found、升级软件老失败、卸载后残留一堆文件——这些问题的根源都在软件包管理。Linux 安装软件不像 Windows 双击 exe,而是用包管理器从软件源拉取安装:Debian/Ubuntu 用 apt,CentOS 7 用 yum,CentOS 8+/Fedora 用 dnf。这篇文章把三大包管理器的常用操作和换源加速一次讲清。
一、三大包管理器对应关系
| 系统 | 包管理器 | 安装包格式 | 对应关系 |
|---|---|---|---|
| Debian / Ubuntu | apt | .deb | apt 是 dpkg 的前端 |
| CentOS 7 | yum | .rpm | yum 是 rpm 的前端 |
| CentOS 8+ / Rocky / Alma / Fedora | dnf | .rpm | dnf 是 yum 的升级版 |
命令基本一一对应,会一个就会其他两个:
apt install nginx # Debian 系
yum install nginx # CentOS 7
dnf install nginx # CentOS 8+
二、apt 常用操作(Debian/Ubuntu)
sudo apt update # 更新软件源索引(装新软件前先执行)
sudo apt upgrade # 升级所有已装软件
sudo apt install nginx # 安装软件
sudo apt install -y nginx # -y 自动确认,脚本里必加
sudo apt remove nginx # 卸载(保留配置文件)
sudo apt purge nginx # 彻底卸载(含配置文件)
sudo apt autoremove # 清理不再需要的依赖
sudo apt search nginx # 搜索软件
apt show nginx # 查看软件详情(版本、依赖)
apt list --installed # 列出所有已安装软件
注意:apt update 和 apt upgrade 是两回事,前者刷新索引、后者升级软件,装新包前必须先 update,否则可能提示找不到。
三、yum / dnf 常用操作(CentOS/Rocky/Fedora)
sudo yum install -y nginx # 安装(yum 默认无确认,-y 可省)
sudo yum remove nginx # 卸载
sudo yum update # 升级所有软件
sudo yum search nginx # 搜索
yum list installed # 列出已安装
yum info nginx # 查看详情
# dnf 用法与 yum 完全一致
sudo dnf install -y nginx
sudo dnf upgrade
CentOS 7 的 yum 源已停止维护(2024 年 EOL),生产环境建议迁移到 Rocky/AlmaLinux,或把 yum 源换成阿里云的 vault 源,否则 yum update 会失败。
四、更换软件源加速(国内服务器必备)
海外源在国内访问极慢,换成阿里云/清华源能快 10 倍以上。
Ubuntu 换源:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's|archive.ubuntu.com|mirrors.aliyun.com|g' /etc/apt/sources.list
# 新版 Ubuntu(22.04+)用 sed 替换软件源描述里的域名
sudo apt update
CentOS 7 换源(先备份):
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all && sudo yum makecache
五、安装本地包与依赖处理
下载了 .deb / .rpm 文件,用低级工具直接装:
# Debian/Ubuntu
sudo dpkg -i 软件包.deb # 有依赖缺失会报错
sudo apt install -f # 自动修复依赖(装完 dpkg 失败后执行)
# CentOS
sudo rpm -ivh 软件包.rpm # 安装
sudo rpm -Uvh 软件包.rpm # 升级
sudo yum localinstall 软件包.rpm # 自动解决依赖(推荐)
rpm/dpkg 装报依赖错误:先用包管理器补依赖(apt -f install / yum localinstall),不要强行 --nodeps,否则装上也跑不起来。
六、查看已安装软件
# Debian/Ubuntu
dpkg -l | grep nginx # 查找 nginx 是否已装
dpkg -l | wc -l # 统计软件总数
# CentOS
rpm -qa | grep nginx
rpm -q nginx # 只查单个
七、常见问题排查
Unable to locate package:源索引没更新,先sudo apt update;或软件源里没有该包,搜索确认包名(如nginxvsnginx-core);Failed to fetch ... 404:源失效,换国内镜像源(见第四节);The following packages have unmet dependencies:依赖冲突,sudo apt install -f修复,或sudo apt dist-upgrade升级后再装;dpkg: error ... is already installed:安装状态损坏,sudo dpkg --remove --force-remove-reinstreq 包名后重装;- 密钥错误
NO_PUBKEY:源缺少公钥,按提示sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 密钥ID添加; - 装完命令找不到:软件安装到了非 PATH 目录(如 /usr/local/bin),检查
which 命令,或重新登录加载 PATH。
总结:软件包管理记住三件事——Debian 系用 apt、CentOS 系用 yum/dnf,操作命令一一对应;装新软件先 update 再 install,脚本里加 -y;国内服务器第一时间换阿里云镜像源。会了这套,装软件、卸软件、排依赖基本不会再卡壳。


