Bu saklı değil de o dosyaya. Dosya sisteminde saklanır ve tüm parametreler tek tek elle kopyalanır (bazıları kopyalanamıyor).
Yani, çoğu işletim sistemi gerçekten "meta veri içeren bir kopya dosyası" çağrısı yapmaz. Dosya kopyalama programı sadece adında yeni bir dosya oluşturur foobar.py
, tüm 0 bayt veriyi kopyalar, daha sonra değişiklik zamanının orijinalininkiyle aynı görünmesini sağlamak için utime () veya SetFileTime () kullanır . Benzer şekilde, dosya izinleri chmod () kullanılarak yeniden ayarlanarak veya POSIX ACL özniteliği kopyalanarak "kopyalanır".
Bazı meta veriler kopyalanmadı. Birinin kopyaları başka dosyalar size ait ve işgal yüzden sahipliğini ayarlama, kök ayrıcalıkları gerektirir sizin disk kotasını. Ctime (öznitelik değiştirme zamanı), Unix'lerde manuel olarak ayarlanamaz; btime (doğum / yaratma zamanı) da genellikle kopyalanmaz.
Karşılaştır cp -a foo bar
(hangisi meta verileri kopyalar) ve cp foo bar
(hangileri yoktur):
$ strace -v cp foo çubuğu
...
açık ("foo", O_RDONLY) = 3
açık ("bar", O_WRONLY | O_TRUNC) = 4
oku (3, "test \ n", 131072) = 5
yaz (4, "test \ n", 5) = 5
oku (3, "", 131072) = 0
yakın (4) = 0
yakın (3) = 0
...
$ strace -v cp - bir foo
...
- orijinal meta veriler alındı
İstat ("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 + 0.200,816363098,
st_ctime = 2016-12-28T09: 16: 55 + 0200.816363098}) = 0
- veri kopyalandı
açık ("foo", O_RDONLY | O_NOFOLLOW) = 3
açık ("bar", O_WRONLY | O_TRUNC) = 4
oku (3, "test \ n", 131072) = 5
yaz (4, "test \ n", 5) = 5
oku (3, "", 131072) = 0
- değişiklik süresi kopyalandı
utimensat (4, NULL, [{tv_sec = 1482909419, tv_nsec = 879714332},
{tv_sec = 1482909415, tv_nsec = 816363098}], 0) = 0
- mülkiyet kopyalandı (yalnızca 'sudo [strace] cp' ile)
fchown (4, 1000, 1000) = 0
- genişletilmiş öznitelikler kopyalandı (xdg.origin.url tarayıcılar tarafından ayarlandı, 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 ACL'leri yok, bu yüzden st_mode'dan temel bir ACL oluşturuldu
- (Bu durumda, basit bir fchmod () de işe yarar)
fgetxattr (3, "system.posix_acl_access", 0x7ffc87a50be0, 132) = -1 ENODATA (Veri yok)
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 \ 4 \ 0 \ 4 \ 0 \ 377 \ 377 \ 377 \ 377 \ 0 \ 4 \ 0 \ 377 \ 377 \ 377 \ 377 ", 28, 0) = 0
yakın (4) = 0
yakın (3) = 0
...