在问题如何在不使用额外磁盘空间的情况下在 Linux 上就地压缩文件?,一个答案建议简单地使用
gzip -c file | dd of=file
Run Code Online (Sandbox Code Playgroud)
我尝试过(在 Debian Linux 上),它似乎确实有效。然而,我不太明白为什么。
dd在写入之前不截断其输出文件吗?这不会在 . 下“拉出地毯” gzip,从而带走 gzip 想要读取的数据吗?
或者是否涉及一些竞争条件,这意味着该命令通常会起作用,但有时可能会失败?或者它是否以某种方式取决于命令用于 I/O 的块大小?
我知道打开文件的进程可以继续读取它,即使另一个进程删除它(一旦进程关闭该文件将被丢弃)。如果文件在某个进程打开时被截断,是否有类似的机制?