夜雨聆风学习资料网

ARTICLE · 1225984

麒麟软件卸不掉、apt 老报错?大概率是锁没放

麒麟软件卸不掉、apt 老报错?大概率是锁没放

在银河麒麟桌面版上卸软件,十个人有八个撞过这样的墙:

sudo apt remove xxx 敲下去,终端刷一堆红字,要么卡住不动,要么报"无法获得锁",折腾几轮之后,软件没卸掉,连带整个 apt 都不能用了。

这篇按现象 → 根源 → 五步救援的顺序讲一遍,最后补几个新手最容易踩的坑。命令都能直接复制。

一、先分清:你的麒麟到底用 apt 还是 yum

这是新手第一坑,比 apt 报错本身还坑。

银河麒麟其实是一大家子,底层分两系:

版本
包管理
卸载命令
桌面版
(V10 桌面,含 ARM64 / x86_64)
Debian 系,apt / dpkg
sudo apt remove xxx
服务器版
(V10 服务器)
RPM 系,yum / dnf
sudo yum remove xxx

判断方法就一条命令:

cat /etc/os-release

看输出里有没有 ID=kylin 旁边的 ID_LIKE:

  • 写着 debian → 用 apt,看这篇
  • 写着 rhel / fedora / centos → 用 yum,看我第 22 篇

用错了体系,命令再对也是白忙。 先确认这一步,能少走一半弯路。

二、卡死长什么样

卸载时出现下面任意一种,就是这篇文章要治的病:

  • 锁报错:E: Could not get lock /var/lib/dpkg/lock-frontend,命令直接退出
  • 脚本失败:子进程 已安装 post-installation 脚本 返回错误状态 1
  • 状态异常:提示软件包处于"极其糟糕的不一致状态",或卡在 half-installed / half-configured
  • 依赖阻断:有未能满足的依赖关系,卸载被依赖检查拦下
  • 最糟的情况:卸载卡死,软件残留,之后所有 apt 操作全部失效

三、为什么会卡:三个根源

把报错翻到底,本质就三件事:

  1. 锁没释放。上一次 apt/dpkg 被中断(断电、强按 Ctrl+C、后台自动更新抢了先),锁文件留着,新进程拿不到锁,直接罢工
  2. 维护脚本失败。dpkg 卸载前后要跑脚本,脚本引用的文件没了、或者自己有 bug 返回非 0,dpkg 就判定"卸载失败"
  3. 状态库紊乱。包卡在"装了一半""配置了一半"的状态,或者 /var/lib/dpkg/status 这个总账本里某段记录坏了

记住排障总原则:先解锁、修依赖、补配置,实在不行才上 --force-* 强制命令。强制命令会绕过安全检查,用之前务必备份。

四、五步救援(从轻到重,多数在第 1、2 步就好)

第 1 步:锁被占(最常见,先做这个)

先确认没有 apt 进程还在跑——别跳过这步,原因见后面坑 4:

ps aux | grep -i apt
sudo lsof /var/lib/dpkg/lock* 2>/dev/null

确认没进程占着,再删残留锁:

sudo rm -f /var/lib/dpkg/lock
sudo rm -f /var/lib/dpkg/lock-frontend
sudo rm -f /var/cache/apt/archives/lock

然后补完上次没做完的事:

sudo dpkg --configure -a

这条命令的意思是"把所有装了一半的包配置完"。新手记住它,它能救 80% 的 apt 卡死。

第 2 步:修依赖

sudo apt-get install -f
sudo dpkg --configure -a
sudo apt remove 软件包名

第 3 步:维护脚本修不动,强制移除

脚本坏了自己修不动时(脚本一般在 /var/lib/dpkg/info/软件包名.postrm):

sudo dpkg --remove --force-remove-reinstreq 软件包名

要连配置文件一起清干净:

sudo dpkg --purge --force-all 软件包名

提醒:--force-all 绕过几乎所有检查,是最后手段。用之前先确认这个包真的不需要了。

第 4 步:总账本坏了,手工修 status

先备份(这步不能省):

sudo cp /var/lib/dpkg/status /var/lib/dpkg/status.bak

然后用编辑器打开 /var/lib/dpkg/status,找到坏掉的软件包段落——从 Package: 软件包名 那行起,到下一个空行为止——整段删掉,保存后再跑:

sudo dpkg --remove --force-remove-reinstreq 软件包名

第 5 步:磁盘满了 / 根分区只读

df -h
mount | grep " / "
sudo mount -o remount,rw /

空间不够就先清 /var/cache/apt/archives/ 里的安装包缓存。

通用顺序记这一条:确认无进程 → 删锁 → dpkg --configure -a → apt-get install -f → 强制移除 → 实在不行才动 status。全程备份。

五、新手最容易踩的 4 个坑(重点看这段)

前面是通用流程,下面这几个坑是我和身边同事真实踩过的,教程里一般不写。

坑 1:图形商店卸载失败,其实和终端是同一个锁

很多人在"软件商店"里点卸载,转半天圈失败,就以为系统坏了。

其实商店后台调的就是同一套 apt/dpkg,商店卡住 = 锁被占。这时候别反复点商店,开个终端跑第 1 步,把锁清了、dpkg --configure -a 一跑,商店那边往往立刻就通了。

坑 2:remove 卸不干净,重装还是老毛病

apt remove 只删程序,配置文件全留着。

于是出现怪事:软件卸了重装,老配置、老报错原样回来,怀疑自己没卸干净,其实是配置阴魂不散。

想真卸干净用 purge:

sudo apt purge 软件包名

一句话记住:remove 是搬家,purge 是连房本一起注销。

坑 3:卸载完不跑 autoremove,孤儿包越积越多

卸掉一个软件,它专属的依赖包就成了"孤儿",还赖在系统里占地方。定期跑一句:

sudo apt autoremove

它会把没人用的依赖包清掉。注意看清它列的清单再按 y——如果你手动装过某个库自用,先记下名字,别让它顺手带走了。

坑 4:锁文件不能无脑删

网上教程都说"删锁就行",但删锁前必须确认没有 apt 进程在跑。

真实场景:后台正在自动更新安全补丁,你不知道,直接 rm 掉锁文件,然后又同时开了一个 apt 操作——两个进程同时写状态库,包管理直接乱套,比原来难修十倍。

所以顺序必须是:先 ps aux | grep -i apt,确认干净,再删锁。

坑 5:断电是 apt 卡死的第一大来源

运维机房里 apt 卡死,一问时间线,十个里六个之前断过电或强按过电源。

装到一半断电,dpkg 状态库里留下"半成品"记录,下次任何 apt 操作都先卡在这。所以:

  • 关机用 shutdown,别直接按电源
  • 断电恢复后第一件事跑一句 sudo dpkg --configure -a,把半成品补完,别等它发作

最后

apt 卡死不可怕,可怕的是不知道它为什么卡,盲目 --force-all 一顿乱锤,把状态库锤坏。

记住救援五步的顺序,从轻到重,多数在第 1、2 步就结束了。

你在麒麟上卸载软件还遇到过什么报错?评论区贴出来,我挑典型的写成续篇。


 下一篇讲《这些 apt 报错,一眼就能看出问题在哪》,关注「一只羊洋」,别错过。

相关学习资料