我遇到的错误:
dev@Ubuntu20:~$ sudo apt-get install samba
E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1875 (unattended-upgr)
N: Be aware that removing the lock file is not a solution and may break your system.
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
出现上述错误的原因有很多,但在我的情况下,是由于系统开始了无人值守的升级。为了进一步检查和验证错误,我尝试检查了所有运行 apt 命令的进程。
dev@Ubuntu20:~$ ps aux | grep apt
root 1785 0.0 0.0 2616 600 ? Ss 23:00 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily install
root 1791 0.0 0.0 2616 1616 ? S 23:00 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held install
dev 5086 0.0 0.0 12112 724 pts/0 S+ 23:46 0:00 grep --color=auto apt
从上面的输出中可以看出,计划中的无人值守升级已经开始运行。您还可以使用下图所示的命令检查文件下的配置设置,以验证这一点:
dev@Ubuntu20:~$ cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
从上面的输出中可以看到,无人值守升级和更新软件包列表都被设置为1,这意味着它会在你启动系统后从后台检查可用的更新,然后自动开始更新系统软件包。如果这时关机,会提示:
如果你的情况确实如此,那么要解决这个问题,你可以根据自己的条件和要求,采用以下任何一种解决方案。
Solution 1: Wait for Upgrade to Finish
第一种方案:等待更新结束
第一种解决方案是什么都不做,耐心等待无人值守升级完成。根据你的系统配置和网络带宽,完成升级不需要太多时间。这个办法对我很有效。大约几分钟后,当我使用相同的命令再次检查进程时,发现无人值守升级已不再运行。
然后再执行APT命令,问题就不出现了
Solution 2: Kill the Process
第二种方案:杀掉此进程
我不建议在紧急情况下使用的另一种解决方案是使用命令强制杀死无人值守升级,其中 PID 是无人值守升级进程的进程 ID。例如,我当前的环境,命令如下所示:
dev@Ubuntu20:~$ kill -9 1785
Solution 3: Delete Lock File
第三种方案:删掉锁文件。
此解决方案基本上适用于运行 apt 命令后关闭终端的情况。在这种情况下,你可能没有运行任何 apt 进程,但仍然无法运行命令。这只是因为创建了一个锁定文件,在前一个打开的进程结束之前,该文件会阻止任何新的 apt 进程启动。因此,要解决这个问题,你需要使用以下命令识别所有创建的锁定文件,然后手动删除所有这些文件。
$ sudo lsof /var/lib/dpkg/lock
$ sudo lsof /var/lib/apt/lists/lock
$ sudo lsof /var/cache/apt/archives/lock
如果发现有进程正在运行,可以使用 kill -9
$ sudo rm /var/lib/apt/lists/lock
$ sudo rm /var/cache/apt/archives/lock
$ sudo rm /var/lib/dpkg/lock
现在,你需要使用 sudo dpkg --configure -a 命令重新配置 dpkg,如下所示。
$ sudo dpkg --configure -a
Solution 4: Permanently Remove Unattended Upgrade
解决方案 4:永久删除无人值守升级
如果你正在寻找永久性的解决方案,那么你能做的就是使用 sudo apt remove unattended-upgrades 命令从系统中移除 unattended-upgrades,如下所示。
$ sudo apt remove unattended-upgrades
然后运行 sudo apt update && sudo apt upgrade 命令,更新系统的最新更改。
$ sudo apt update && sudo apt upgrade
参考:
1,APT error
Solved "Could not get lock /var/lib/dpkg/lock-frontend (unattended-upgr)" | CyberITHub