cp 默认保留文件的哪些元数据?

cp 默认保留文件的哪些元数据?

默认情况下,哪些文件元数据cp保留,哪些文件元数据不保留?例如,如果我是正确的,则修改时间,保留访问列表,并且我想了解其他元数据(例如其他时间戳,...)。

我正在查找 coreutils 手册,但找不到答案。

答案1

几个月前我做了一个测试cp当目标文件已经存在时的行为:

$ ls -li
total 12
913966 -rw-rw-r-- 1 vagrant vagrant 30 Dec 16 20:26 file1
913965 -rwxrw---- 2 pete    vagrant 39 Dec 16 20:35 file2
913965 -rwxrw---- 2 pete    vagrant 39 Dec 16 20:35 hardlinktofile2
$ cat file1
This is the contents of file1
$ cat file2
This is the original contents of file2
$ cp file1 file2
$ ls -li
total 12
913966 -rw-rw-r-- 1 vagrant vagrant 30 Dec 16 20:26 file1
913965 -rwxrw---- 2 pete    vagrant 30 Dec 16 20:37 file2
913965 -rwxrw---- 2 pete    vagrant 30 Dec 16 20:37 hardlinktofile2
$ cat file1
This is the contents of file1
$ cat file2
This is the contents of file1
$ 

如您所见,目标文件被就地覆盖并且全部它的权限、所有权、属性等都被保留——甚至是硬链接。源文件不会以任何方式影响这些。

mtime默认情况下保留它没有任何意义,而且事实并非如此。但您会注意到 newmtime不是file2取自file1— 它是取自当前系统时间。

您可以在目标文件不存在的情况下进行类似的测试,但此测试实际上更清楚地说明了这一点:仅实际情况内容当未指定选项时,将复制文件的内容。 文件所有权、权限、ACL、mtime 等。等人。不是根据源文件设置,而是以与新创建的文件相同的方式设置。 (因此,权限根据umaskmtime根据当前时间,所有权根据进程的 EUIDcp等)

有一个特定但常见的例外:

如果没有 [--preserve=] 选项,则权限现存的目标文件保持不变。每个新的文件是使用相应源文件的模式减去 set-user-ID、set-group-ID 和粘性位作为创建模式来创建的。 (操作系统然后应用 umask 或默认 ACL,可能会导致更严格的文件模式)。


根据info coreutils 'cp invocation'

`xattr'
      Preserve extended attributes if `cp' is built with xattr
      support, and xattrs are supported and enabled on your file
      system.  If SELinux context and/or ACLs are implemented using
      xattrs, they are preserved by this option as well.

这并不指定扩展属性以除此标志之外的任何其他方式保留。

相关内容