![7zip 是否会提取到临时文件然后将临时文件重命名为实际目标?](https://linux22.com/image/1311440/7zip%20%E6%98%AF%E5%90%A6%E4%BC%9A%E6%8F%90%E5%8F%96%E5%88%B0%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6%E7%84%B6%E5%90%8E%E5%B0%86%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%BA%E5%AE%9E%E9%99%85%E7%9B%AE%E6%A0%87%EF%BC%9F.png)
我问这个问题是因为我希望能够解压一个档案,该档案可能还包含调用 7zip 来解压档案的程序。Linux/UNIX 允许在使用文件时删除或重命名文件,但不允许打开文件进行写入。
答案1
答案是肯定的,也是否定的。
使用 7zip 的提取命令不应该创建临时文件。但在 Windows 上使用 Windows 资源管理器拖放时确实会发生这种情况(取自文档http://www.7-zip.org/faq.html,ctl-f 搜索 temp)。
但你使用的是 Linux。
为了 100% 确保这种情况不会发生在 Linux 上,我创建并提取了一个大型档案,并通过 strace 运行该程序:
strace -a88 -- 7z e byob.7z 2>&1
我只看到当前工作目录中的现有文件在覆盖之前取消链接,并且唯一访问的文件是当前工作目录中的文件。
请自行测试以验证我没有遗漏任何东西。
我希望这对你有帮助。
答案2
您的问题是关于可执行文件(或脚本) ,调用创建新文件(在同一位置)file1
的机制。file1
据我了解,Unix 上的文件系统file1
在打开(用于执行)时需要进行破坏。发生这种情况的方式是,破坏会导致原始文件file1
被取消链接,但由于它是打开的,因此实际上并没有被删除。但是,它不再占用file1
该目录中的名称。新的文件file1
在单独的位置创建(使用正确的名称)。当旧文件file1
完成执行并退出时,它将被删除。不过,您应该保留新的file1
现有文件。
警告:这主要是基于我的部分知识的猜测。也许这里有更多文件系统概念的人会肯定或纠正它。同时,我建议您只将此答案视为理论答案,不要在没有进一步实验验证的情况下以此为基础解决问题。