![GNU tar 手册页对 METHOD='replace' 和 METHOD='system' 的神秘引用](https://linux22.com/image/156255/GNU%20tar%20%E6%89%8B%E5%86%8C%E9%A1%B5%E5%AF%B9%20METHOD%3D'replace'%20%E5%92%8C%20METHOD%3D'system'%20%E7%9A%84%E7%A5%9E%E7%A7%98%E5%BC%95%E7%94%A8.png)
我的 tar (GNU tar 1.28) 手册页列出了 --atime-preserve 选项,该选项适用于将文件添加到 tarball 的时间。完整的解释如下:
--atime-preserve
preserve access times on dumped files, either by restoring the times after reading (METHOD='replace'; default) or by not setting
the times in the first place (METHOD='system')
然而,METHOD='replace' 和 METHOD='system' 的确切含义仍然没有解释。任何人都可以阐明这一点吗?
答案1
它们只是该选项的值。在线手册(以及info
文档 - 检查info tar 'Option Summary'
)使其更清晰:
--atime-preserve
--atime-preserve=replace
--atime-preserve=system
读取文件时尝试保留文件的访问时间。目前,此选项仅对您拥有的文件有效,除非您具有超级用户权限。
--atime-preserve=replace
在读取文件之前记住文件的访问时间,然后在读取文件后恢复访问时间。如果其他程序同时读取该文件,这可能会导致问题,因为它们的访问时间将会丢失。在大多数平台上,恢复访问时间还需要 tar 来恢复数据修改时间,因此如果其他程序同时写入文件,此选项也可能会导致问题(tar 尝试检测这种情况,但由于无法可靠地执行此操作)比赛条件)。更糟糕的是,在大多数平台上,恢复访问时间也会更新状态更改时间,这意味着此选项与增量备份不兼容。
--atime-preserve=system
避免更改文件上的时间戳,不会干扰其他程序引起的时间戳更新,因此它更适合增量备份。但是,它需要底层操作和文件系统实现的特殊O_NOATIME
选项,并且还要求搜索目录不会更新其访问时间。截至撰写本文时(2005 年 11 月),此功能仅适用于 Linux,并且仅适用于 Linux 内核 2.6.8 及更高版本。更糟糕的是,目前没有可靠的方法来知道这个功能是否真的有效。有时 tar 知道它不起作用,如果你使用--atime-preserve=system
tar 就会抱怨并立即退出。但有时 tar 可能会认为该选项有效,但实际上却不起作用。