Ubuntu 如何更新正在运行的应用程序而不必关闭它们而 Windows 则不能?

ate*_*enz 12 updates filesystem apt windows

运行 Ubuntu 12.04 64 位。

我主要通过终端使用sudo apt-get update && sudo apt-get upgrade.

我不明白这一点:让 Firefox 或任何其他此类集成应用程序积极运行,同时在终端中同时运行更新进程,这将 Firefox 更新到更新版本。我知道重新启动 Firefox 会导致 Firefox 以较新的版本打开。

例如,在 MS Windows 7 中更新时,它要求在更新前关闭同一应用程序的活动实例(如果它处于活动状态)。

Ubuntu 如何在不干扰其活动实例的情况下将活动的工作应用程序替换为更新的版本?

在这种情况下,更新过程的后端到底发生了什么?

ish*_*ish 21

对于 MS Windows 7 中的示例更新,它要求关闭同一应用程序的活动实例(如果活动)以进行更新。

Ubuntu 如何在不干扰其活动实例的情况下将活动的工作应用程序替换为更新版本。[注意到许多包]

我将尝试尽可能简单地解释这一点。大多数 Linux 文件系统与 Windows 的文件系统 (NTFS) 略有不同。本质上,两者都包含一个文件名(条目)索引表,指向存储在磁盘上的实际数据。在 NTFS 中,这称为 MFT(主文件表)——如果您运行chkdsk.

但是,我提到的“细微差别”是 Linux 的索引表(如果您愿意)由两个级别组成:索引和inodes。inode 包含实际的文件元数据,包括它在磁盘上的物理位置;索引中的“文件名”只是指向 inode 的(硬)链接。

当您更新/升级正在运行的应用程序时,更新后的文件将写入磁盘,inode 指向创建/更新的新数据,并且文件名也会更新以链接到这些新 inode。但是,对于任何已被正在运行的应用程序使用的文件(即存在文件句柄),它们的文件名将继续指向旧的 inode(包含旧数据),直到文件句柄关闭。这通常发生在您退出应用程序或某些系统文件时,当您重新启动时。此时,旧数据实际上已从磁盘中删除。