![Ubuntu 怎样才能更新正在运行的应用程序而不必关闭它们,而 Windows 却不能?](https://linux22.com/image/1096038/Ubuntu%20%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E6%9B%B4%E6%96%B0%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E8%80%8C%E4%B8%8D%E5%BF%85%E5%85%B3%E9%97%AD%E5%AE%83%E4%BB%AC%EF%BC%8C%E8%80%8C%20Windows%20%E5%8D%B4%E4%B8%8D%E8%83%BD%EF%BC%9F.png)
运行 Ubuntu 12.04 64 位。
我主要使用 来通过终端进行更新sudo apt-get update && sudo apt-get upgrade
。
我不明白这一点:让 Firefox 或任何其他此类集成应用程序积极运行,同时在终端中同时运行更新过程,以将 Firefox 更新为较新版本。我知道重新启动 Firefox 将导致 Firefox 以较新版本打开。
例如,在 MS Windows 7 中更新时,它会要求在更新之前关闭同一应用程序的活动实例(如果它处于活动状态)。
Ubuntu 如何在不干扰其活动实例的情况下将活动工作应用程序替换为较新的版本?
在这种情况下,更新过程的后端究竟发生了什么?
答案1
例如,在 MS Windows 7 中更新时,它会要求关闭同一应用程序的活动实例(如果处于活动状态)以进行更新。
Ubuntu 如何在不干扰活动实例的情况下将活动工作应用程序替换为较新版本。[注意到许多软件包]
我会尽量简单地解释这一点。大多数 Linux 文件系统与 Windows 的文件系统 (NTFS) 略有不同。从本质上讲,两者都包含指向磁盘上存储的实际数据的文件名 (条目) 的索引表。在 NTFS 中,这称为 MFT (主文件表) - 如果您运行chkdsk
.
然而,我提到的“细微的差别”是,Linux 的索引表由两个级别组成:索引和索引节点。inode 包含实际的文件元数据,包括其在磁盘上的物理位置;索引中的“文件名”只是指向 inode 的(硬)链接。
当您更新/升级正在运行的应用程序时,更新的文件将写入磁盘,指向新创建/更新的数据的 inode,并且文件名也会更新以链接到这些新的 inode。但对于任何已被正在运行的应用程序使用的文件(即存在文件句柄),它们的文件名将继续指向旧的 inode(其中包含旧数据),直到文件句柄被关闭。这通常发生在您退出应用程序时,或者对于某些系统文件,在您重新启动时。此时,旧数据实际上已从磁盘中删除。