Cp

cp 預設保留文件的哪些元數據?

  • March 14, 2018

預設情況下,哪些文件元數據會cp保留,哪些文件元數據不會?例如,如果我是正確的,則更改 mtime,保留訪問列表,並且我想知道其他元數據(例如其他時間戳,…)。

我正在查找 coreutils 的手冊,但在那裡找不到答案。

幾個月前,我對目標文件已經存在時的行為進行了測試: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根據目前時間的權限,根據cp程序的 EUID 的所有權等)

有一個特定但常見的例外

在缺少…之下

$$ the –preserve= $$選項,現有目標文件的權限不變。每個文件都是以相應源文件的模式減去 set-user-ID、set-group-ID 和sticky 位作為創建模式創建的。(作業系統然後應用 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.

除了使用此標誌外,這並未指定以任何其他方式保留擴展屬性。

引用自:https://unix.stackexchange.com/questions/275770