依赖坏掉是什么状态
Debian 系把安装拆成两步:先由 dpkg 解包并配置,再由 apt 处理依赖关系。一旦中途断电、磁盘写满或强杀进程,就会留下『已解包未配置』的半成品,此时新包装不上、旧包也卸不掉,apt 每次操作都提示 E: Unmet dependencies。apt --fix-broken install 的作用就是让 apt 重新计算一遍依赖图,把缺失或半配置的包补齐。
基本信息
| 适用平台 | Debian / Ubuntu / UOS 桌面版等 apt 系 |
|---|---|
| 核心命令 | apt --fix-broken install(等价写法 apt -f install) |
| 配套命令 | dpkg --configure -a、apt update |
| 适用症状 | Unmet dependencies、half-configured、装不上也删不掉 |
| 前提条件 | 先解决锁占用与磁盘空间,保证源可用 |
| 权限要求 | root 或 sudo |
典型使用场景
- 装机脚本中断后,apt 处于不可用状态需要先恢复
- 磁盘写满导致安装失败,清理空间后修复残留的半配置包
- 误删依赖包使关键服务无法启动,需要一次性补齐依赖
- 重装 UOS 桌面组件时依赖冲突,先修依赖再继续
- 升级前发现系统处于破损状态,先修复避免升级过程雪上加霜
修复流程
修复流程
sudo dpkg --configure -a # 先把已解包未配置的包配置完
sudo apt --fix-broken install # 再让 apt 补齐缺失依赖
sudo apt update && sudo apt -f install # 源可用性确认后再修一次更稳妥
sudo apt list --installed | wc -l # 修复后核对包数量,确认没有大批量被卸
sudo apt --fix-broken install -s # -s 只做模拟,先看清它将装什么卸什么前置排查(锁与空间)
前置排查(锁与空间)
ls -l /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock # 存在锁文件说明有进程在跑
ps aux | grep -E 'apt|dpkg' | grep -v grep # 确认没有残留进程;有则等它结束别硬杀
df -h /var /var/cache/apt # 空间不足是安装失败的常见根因
sudo apt clean # 清掉下载缓存腾出空间
sudo systemctl daemon-reexec # 服务因依赖破损起不来时,修完后重新接管报错与处置
| 提示 | 含义 | 处置 |
|---|---|---|
| E: Unmet dependencies | 有包的依赖没有满足 | 运行 apt --fix-broken install |
| Could not get lock | 有其他 apt/dpkg 进程在运行 | 等待其结束,不要直接删锁文件 |
| No space left on device | 磁盘或分区写满 | 清理缓存与日志后再修 |
| dpkg: error processing | 某个包配置脚本执行失败 | 看该包报错原因,必要时 dpkg --configure 单独处理 |
| Hash Sum mismatch | 源侧或缓存问题 | apt update 重试,仍失败则换源确认 |
修复前务必确认没有其他 apt/dpkg 进程在运行,并发执行会让 dpkg 状态库进一步错乱。
自动修复是按依赖关系计算的,可能顺带卸载一批包:先加 -s 模拟,看一眼将被移除的清单再决定是否执行。