Nó không được lưu trong tập tin đó. Nó được lưu trữ trong hệ thống tập tin và tất cả các tham số được sao chép thủ công từng cái một (mặc dù một số không thể được sao chép).
Đó là, hầu hết các hệ điều hành không thực sự có lệnh gọi "sao chép tệp với siêu dữ liệu". Chương trình sao chép tệp chỉ tạo một tệp mới có tên foobar.py
, sao chép toàn bộ 0 byte dữ liệu, sau đó sử dụng utime () hoặc SetFileTime () để làm cho thời gian sửa đổi của nó trông giống như thời gian ban đầu. Tương tự, quyền của tệp sẽ được "sao chép" bằng cách đặt lại chúng bằng chmod () hoặc bằng cách sao chép thuộc tính POSIX ACL.
Một số siêu dữ liệu không được sao chép. Đặt quyền sở hữu yêu cầu quyền root, vì vậy các bản sao của tệp của người khác thuộc về bạn và chiếm dung lượng đĩa của bạn . Không thể đặt ctime (thời gian thay đổi thuộc tính) theo cách thủ công trên Unix; btime (thời gian sinh / sáng tạo) thường không được sao chép.
So sánh cp -a foo bar
(sao chép siêu dữ liệu) và cp foo bar
(không sao chép ):
$ strace -v cp foo thanh
Giáo dục
mở ("foo", O_RDONLY) = 3
mở ("thanh", O_WRONLY | O_TRUNC) = 4
đọc (3, "kiểm tra \ n", 131072) = 5
viết (4, "kiểm tra \ n", 5) = 5
đọc (3, "", 131072) = 0
đóng (4) = 0
đóng (3) = 0
Giáo dục
$ strace -v cp -a thanh foo
Giáo dục
- siêu dữ liệu gốc được lấy
lstat ("foo", {st_dev = makenev (254, 0), st_ino = 60569468, st_mode = S_IFREG | 0644,
st_nlink = 1, st_uid = 1000, st_gid = 1000, 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 + 0200.816363098,
st_ctime = 2016-12-28T09: 16: 55 + 0200.816363098}) = 0
- dữ liệu được sao chép
mở ("foo", O_RDONLY | O_NOFOLLOW) = 3
mở ("thanh", O_WRONLY | O_TRUNC) = 4
đọc (3, "kiểm tra \ n", 131072) = 5
viết (4, "kiểm tra \ n", 5) = 5
đọc (3, "", 131072) = 0
- thời gian sửa đổi được sao chép
utplesat (4, NULL, [{tv_sec = 1482909419, tv_nsec = 879714332},
{tv_sec = 1482909415, tv_nsec = 816363098}], 0) = 0
- quyền sở hữu được sao chép (chỉ với 'sudo [strace] cp')
fchown (4, 1000, 1000) = 0
- các thuộc tính mở rộng được sao chép (xdg.origin.url được đặt bởi trình duyệt, wget)
flistxattr (3, NULL, 0) = 0
flistxattr (3, "người dùng.xdg.origin.url \ 0", 20) = 20
fgetxattr (3, "người dùng.xdg.origin.url", "https://superuser.com/", 22) = 22
fsetxattr (4, "người dùng.xdg.origin.url", "https://superuser.com/", 22, 0) = 0
- Không có ACL POSIX, vì vậy ACL cơ bản được xây dựng từ st_mode
- (trong trường hợp này, một fchmod () đơn giản cũng sẽ hoạt động)
fgetxattr (3, "system.poseix_acl_access", 0x7ffc87a50be0, 132) = -1 ENODATA (Không có sẵn dữ liệu)
fsetxattr (4, "system.poseix_acl_access", "\ 2 \ 0 \ 0 \ 0 \ 1 \ 0 \ 6 \ 0 \ 377 \ 377 \ 377 \ 377 \ 4 \ 0 \ 4 \ 0 \ 377 \ 377 \ 377 \ 377 \ 0 \ 4 \ 0 \ 377 \ 377 \ 377 \ 377 ", 28, 0) = 0
đóng (4) = 0
đóng (3) = 0
Giáo dục