มันไม่ได้เก็บไว้ในไฟล์นั้น มันถูกเก็บไว้ในระบบไฟล์และพารามิเตอร์ทั้งหมดจะถูกคัดลอกด้วยตนเองแบบหนึ่งต่อหนึ่ง (แม้ว่าบางอันจะไม่สามารถคัดลอกได้เลย)
นั่นคือระบบปฏิบัติการส่วนใหญ่ไม่มีการเรียก "คัดลอกไฟล์พร้อมเมทาดาทา" จริงๆ โปรแกรมคัดลอกไฟล์เพิ่งสร้างไฟล์ใหม่ชื่อfoobar.py
คัดลอกทั้ง 0 ไบต์ของข้อมูลจากนั้นใช้utime ()หรือSetFileTime ()เพื่อทำให้เวลาในการแก้ไขดูเหมือนกับของเดิม ในทำนองเดียวกันการอนุญาตไฟล์จะถูก "คัดลอก" โดยการตั้งค่าใหม่โดยใช้ chmod () หรือโดยการคัดลอกแอตทริบิวต์ POSIX ACL
ข้อมูลเมตาบางส่วนไม่ถูกคัดลอก การตั้งค่าความเป็นเจ้าของต้องใช้สิทธิ์ root ดังนั้นสำเนาของคนอื่นเป็นไฟล์ที่เป็นของคุณและครอบครองของคุณโควต้าดิสก์ ctime (เวลาเปลี่ยนคุณลักษณะ) ไม่สามารถตั้งค่าด้วยตนเองบน Unixes โดยทั่วไปจะไม่คัดลอก btime (เวลาเกิด / เวลาสร้าง)
เปรียบเทียบcp -a foo bar
(ซึ่งคัดลอกข้อมูลเมตา) และcp foo bar
(ซึ่งไม่ได้):
$ strace -v cp foo bar
...
open ("foo", O_RDONLY) = 3
open ("bar", O_WRONLY | O_TRUNC) = 4
read (3, "test \ n", 131072) = 5
เขียน (4, "test \ n", 5) = 5
read (3, "", 131072) = 0
ปิด (4) = 0
ปิด (3) = 0
...
$ strace -v cp -a foo bar
...
- มีการดึงข้อมูลเมตาดั้งเดิม
lstat ("foo", {st_dev = makedev (254, 0), st_ino = 60569468, st_mode = S_IFREG | 0644,
st_nlink = 1, st_uid = 1000, st_gid = 1,000, st_blksize = 4096, st_blocks = 8,
st_size = 5, st_atime = 2016-12-28T09: 16: 59 + 0200.879714332,
st_mtime = 2016-12-28T09: 16: 55 + 0,200.816363098,
st_ctime = 2016-12-28T09: 16: 55 + 0200.816363098}) = 0
- คัดลอกข้อมูล
เปิด ("foo", O_RDONLY | O_NOFOLLOW) = 3
open ("bar", O_WRONLY | O_TRUNC) = 4
read (3, "test \ n", 131072) = 5
เขียน (4, "test \ n", 5) = 5
read (3, "", 131072) = 0
- เวลาดัดแปลงจะถูกคัดลอก
utimensat (4, NULL, [{tv_sec = 1482909419, tv_nsec = 879714332},
{tv_sec = 1482909415, tv_nsec = 816363098}], 0) = 0
- การคัดลอกความเป็นเจ้าของ (เฉพาะกับ 'sudo [strace] cp')
fchown (4, 1,000, 1,000) = 0
- แอตทริบิวต์เพิ่มเติมถูกคัดลอก (xdg.origin.url ถูกตั้งค่าโดยเบราว์เซอร์ wget)
flistxattr (3, NULL, 0) = 0
flistxattr (3, "user.xdg.origin.url \ 0", 20) = 20
fgetxattr (3, "user.xdg.origin.url", "https://superuser.com/", 22) = 22
fsetxattr (4, "user.xdg.origin.url", "https://superuser.com/", 22, 0) = 0
- POSIX ACLs ไม่มีอยู่ดังนั้น ACL พื้นฐานจะถูกสร้างขึ้นจาก st_mode
- (ในกรณีนี้ fchmod ง่าย ๆ () ก็ใช้ได้เช่นกัน)
fgetxattr (3, "system.posix_acl_access", 0x7ffc87a50be0, 132) = -1 ENODATA (ไม่มีข้อมูล)
fsetxattr (4, "system.posix_acl_access", "\ 2 \ 0 \ 0 \ 0 \ 1 \ 0 \ 6 \ 0 \ 377 \ 377 \ 377 \ 377 \ 377 \ 4 \ 0 \ 377 \ 377 \ 377 \ 377 \ 0 \ 4 \ 0 \ 377 \ 377 \ 377 \ 377 ", 28, 0) = 0
ปิด (4) = 0
ปิด (3) = 0
...