# 管理软件包：先识别系统，再使用 APT 或 DNF

找不到 apt，通常应先确认发行版，而不是直接下载安装脚本。软件包锁也往往意味着另一个更新任务仍在工作。

更新日期：2026-09-16

规范地址：https://stock.iftalking.com/guides/packages/

## 1. 先确认发行版，再选包管理器

Ubuntu、Debian 使用 APT；Rocky、AlmaLinux 等 RHEL 系通常使用 DNF。`apt: command not found` 不一定是系统损坏，可能只是你在另一类发行版上运行了错误命令。

```bash
cat /etc/os-release
command -v apt
command -v dnf
```

同一台机器不要混装不同发行版的软件源。教程中的包名也可能随版本不同而变化，先用搜索和包信息确认，再安装。

## 2. APT 的常用操作与含义

```bash
sudo apt update
apt search nginx
apt show nginx
sudo apt install nginx
apt list --upgradable
```

`update` 更新软件索引，不会把所有软件升级；`install` 安装指定包及其依赖。系统更新前运行 `apt list --upgradable` 查看范围，再执行 `sudo apt upgrade`，阅读可能重启服务的提示。

删除软件时，`remove` 通常保留部分配置，`purge` 会进一步删除包管理器管理的配置。两者都不等于完整业务备份或彻底清除所有应用数据，操作前先确认网站、数据库和自建目录。

## 3. DNF 的对应操作

```bash
sudo dnf check-update
dnf search nginx
dnf info nginx
sudo dnf install nginx
sudo dnf upgrade
```

`dnf check-update` 发现可更新包时可能返回专用状态码，不能只凭非零退出码判断故障。安装前核对官方软件源和应用要求，不要为了找到某个包随意添加未知仓库。

第三方仓库需要按发布者官方文档添加签名密钥和源配置。不要使用跳过签名验证作为常规安装方式；旧教程里的 `apt-key`、已停用镜像地址也应替换为当前支持的方法。

## 4. 遇到 APT 锁，先找正在运行的任务

系统自动更新与手动安装可能同时抢锁。看到 `/var/lib/dpkg/lock` 或 lock-frontend 被占用时，先查看提示中的进程和后台更新状态。

```bash
ps -ef | grep -E 'apt|dpkg|unattended'
systemctl status apt-daily.service apt-daily-upgrade.service
```

如果正在正常安装，等待其完成。不要直接删除锁文件或杀死 dpkg；锁文件存在本身不等于锁被占用，强行并发操作会破坏软件包状态。

## 5. 中断安装后的恢复顺序

确认没有其他包管理进程运行后，检查未完成配置，并按提示修复依赖。

```bash
sudo dpkg --audit
sudo dpkg --configure -a
sudo apt --fix-broken install
```

执行前阅读拟安装、升级或删除的包列表；若提示要移除数据库或关键服务，先停止并调查原因。磁盘满了要先释放安全空间，不能靠反复运行修复命令解决。

维护结束检查相关服务是否正常，必要时做计划重启。继续阅读[系统升级](https://stock.iftalking.com/guides/os-upgrade/)、[磁盘空间检查](https://stock.iftalking.com/guides/disk-cleanup/)和[进程监控](https://stock.iftalking.com/guides/process-monitoring/)。


## 完成后检查

保留软件源和安装记录。有依赖冲突时，先解释来源冲突再继续，避免盲目强制安装。

## 参考资料

- [Ubuntu Server 文档](https://documentation.ubuntu.com/server/)
