示例:FlightGear (2GB) 正在安装,我只需要快速安装 udftools,我希望不要为此破坏巨大的 FlightGear 安装。
Windows 还支持同时安装两个程序,但是如果我在 Linux 上尝试,即使在不同的用户和 tty 上,它也会失败。
如何同时安装两个应用程序?
答案1
你不能; APT 与大多数其他包管理器一样,使用锁来确保单个包管理操作在任何给定时间都在进行。这样做是为了强制一致性:保持包数据库的状态和包的状态一致非常重要,最简单的方法是保证它们永远不会经历多个并发修改。
锁始终位于固定位置(否则它们不会那么有用),因此您可以自己使用它们来对工作进行排队,使用类似lockf
:
lockf /var/lib/dpkg/lock apt-get update
将在运行之前等待锁被释放(如果需要)apt-get update
。
答案2
就像 Stephen Kitt 所说,当包管理器已经忙于安装其他包时,您不能要求包管理器安装它,因为这会引起系统一致性的问题。然而,就像 psusi 在评论中所说,如果你的包管理器仍然处于下载包的步骤,那是完全可以中断的。您可以按 Ctrl+C,安装 udftools,然后重新调用 apt 继续安装大软件包。它应该保留部分下载的包并从停止的地方继续下载。
当包管理器已经在另一个进程中修改系统时,您无法调用包管理器来安装或删除内容,因为这会增加太多的复杂性,而让进程相互通信并协调它们的操作以确保系统一致性。例如,如果您要求它安装的软件包与另一个进程正在安装的某个软件包发生冲突,该怎么办?如果您要求它删除另一个进程已经检查过的安装包,因为它将安装的包依赖于它,该怎么办?如果您要求它安装一个依赖于另一个安装过程中的包的包,但是依赖包最终首先被安装,因为它赢得了竞争条件并运行了一个依赖于尚未安装的包的安装脚本,该怎么办?安装完成了吗?
使用锁一次限制一个进程更简单、更安全。
答案3
根据您的示例,可以合理地假设一些普通或花园飞行模拟器,即使是一个巨大的飞行模拟器,也不会更改文件系统的相同部分udftools
。
我知道如果yum
正忙于一些较大的交易,那么rpm
仍可用于安装、升级或删除软件包,因为创建了其他进程必须遵守但不需要遵守的yum
锁。yum
rpm
同样,dpkg
可以用于安装.deb
软件包而无需与 协商apt
,尽管它们可能会更紧密地集成,在这种情况下,如果您准备承担风险,请继续删除/var/lib/dpkg/lock
。我的意思是,到底是什么?这只是整个操作系统包数据库的完整性!