gzip 是原子的吗?

Cur*_*ind 13 command-line gzip

gzip原子的吗?

如果我gzip在 gzip 文件中间停止该过程会发生什么?

如果它不是原子的,并且我已经在一个gzip *.txt进程上按下了 Ctrl+C ,我该如何安全地恢复?

(我不仅好奇如何恢复,还好奇gzip具体是否是原子的。)

roa*_*ima 30

gzip 是原子的吗?

不会。它会创建一个压缩文件,然后删除未压缩的原始文件。

具体来说,它不会原位压缩文件并且压缩文件有一段时间,

  • 压缩的目标不完整
  • 部分压缩的文件及其源都存在于文件系统中。

如果我在 gzip 文件的中间停止 gzip 进程会发生什么?

如果您gzip使用可捕获信号(例如SIGINTfrom Ctrl C)停止进程,它将清理部分创建的文件。否则,根据它停止的时间点,您最终可能会在未修改的原始文件旁边得到一个部分压缩的文件。

如果它不是原子的,如果我已经在 gzip *.txt 进程上按下了 Ctrl+C,我该如何安全地恢复?

您删除部分压缩版本(如果它仍然存在)并重新启动gzip.

  • 第二个发生在进程被终止时,而不是在它被 _stopped_ 时发生,并且只发生在未处理的信号上(不适用于 ^C -> `SIGINT` 或 `SIGTERM`,其中 `gzip` 安装了删除输出文件的信号处理程序) . (5认同)

Bar*_*mar 15

它不是原子的(Unix 文件系统 API 并没有真正提供任何方法来执行影响多个文件的原子操作),但它故障安全的。压缩文件是一个新文件,它不会覆盖原始文件,并且在完成创建压缩文件之前不会删除原始文件(如果您没有足够的磁盘空间,这实际上可能会导致问题)两个文件)。

如果出现错误或您中断压缩,原始文件将保持不变。通常会删除部分压缩文件。

没有办法在中间恢复它,你只能从头开始。


dr_*_*dr_ 4

您无需担心这一点,因为gzip会创建一个新.gz文件,用压缩内容填充它,然后删除原始文件。因此,如果您中途停止该过程,也不会影响您的原始文件。