Он не хранится в этом файле. Он хранится в файловой системе, и все параметры копируются вручную по одному (хотя некоторые не могут быть скопированы вообще).
То есть большинство операционных систем на самом деле не имеют вызова "копировать файл с метаданными". Программа file-copy просто создает новый файл с именем foobar.py
, копирует все 0 байтов данных, затем использует utime() или SetFileTime(), чтобы время его модификации выглядело так же, как и у оригинала. Аналогично, права доступа к файлу можно "скопировать", заново установив их с помощью chmod() или скопировав атрибут POSIX ACL.
Некоторые метаданные не копируются. Установка собственности требует привилегий суперпользователя, поэтому копии файлов Чужих принадлежат вам и занять свою дисковую квоту. Ctime (время изменения атрибута) невозможно установить вручную в Unix; 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
write(4, "test\n", 5) = 5
read(3, "", 131072) = 0
close(4) = 0
close(3) = 0
…
$ strace -v cp -a foo bar
…
-- original metadata is retrieved
lstat("foo", {st_dev=makedev(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
-- data is copied
open("foo", O_RDONLY|O_NOFOLLOW) = 3
open("bar", O_WRONLY|O_TRUNC) = 4
read(3, "test\n", 131072) = 5
write(4, "test\n", 5) = 5
read(3, "", 131072) = 0
-- modifiction time is copied
utimensat(4, NULL, [{tv_sec=1482909419, tv_nsec=879714332},
{tv_sec=1482909415, tv_nsec=816363098}], 0) = 0
-- ownership is copied (only with 'sudo [strace] cp')
fchown(4, 1000, 1000) = 0
-- extended attributes are copied (xdg.origin.url is set by browsers, 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 are not present, so a basic ACL is built from st_mode
-- (in this case, a simple fchmod() would work as well)
fgetxattr(3, "system.posix_acl_access", 0x7ffc87a50be0, 132) = -1 ENODATA (No data available)
fsetxattr(4, "system.posix_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
close(4) = 0
close(3) = 0
…