默认情况下,哪些文件元数据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 等。等人。不是根据源文件设置,而是以与新创建的文件相同的方式设置。 (因此,权限根据umask
,mtime
根据当前时间,所有权根据进程的 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.
这并不指定扩展属性以除此标志之外的任何其他方式保留。