यह उस फ़ाइल में संग्रहीत नहीं है । यह फ़ाइल सिस्टम में संग्रहीत है, और सभी मापदंडों को एक-एक करके मैन्युअल रूप से कॉपी किया जाता है (हालांकि कुछ को बिल्कुल भी कॉपी नहीं किया जा सकता है)।
यही है, ज्यादातर ऑपरेटिंग सिस्टम में वास्तव में "मेटाडेटा के साथ कॉपी फ़ाइल" नहीं होती है। फ़ाइल-कॉपी प्रोग्राम सिर्फ नाम की एक नई फ़ाइल बनाता है foobar.py
, पूरे 0 बाइट्स डेटा की प्रतिलिपि बनाता है , फिर इसके संशोधन समय को मूल के रूप में देखने के लिए utime () या SetFileTime () का उपयोग करता है । इसी तरह, फ़ाइल अनुमतियाँ chmod () का उपयोग करके या POSIX ACST विशेषता की प्रतिलिपि बनाकर उन्हें "कॉपी" किया जाएगा।
कुछ मेटाडेटा की प्रतिलिपि नहीं बनाई गई है। स्वामित्व सेट करने के लिए रूट विशेषाधिकारों की आवश्यकता होती है, इसलिए किसी और की फ़ाइलों की प्रतियां आपके पास होती हैं और आपके डिस्क कोटा पर कब्जा कर लेती हैं । यूनिक्स पर मैन्युअल रूप से सेट करने के लिए समय (विशेषता परिवर्तन समय) असंभव है; btime (जन्म / निर्माण समय) आमतौर पर या तो कॉपी नहीं किया जाता है।
तुलना करें cp -a foo bar
(जो प्रतियां मेटाडेटा) और cp foo bar
(जो नहीं करता है):
$ स्ट्रेस -v सीपी फू बार
...
खुला ("फू", O_RDONLY) = 3
खुला ("बार", O_WRONLY | O_TRUNC) = 4
पढ़ें (3, "test \ n", 131072) = 5
लिखना (4, "test \ n", 5) = 5
पढ़ें (3, "", 131072) = 0
पास (४) = ०
पास (३) = ०
...
$ स्ट्रेस -v cp -a फू बार
...
- मूल मेटाडेटा पुनर्प्राप्त किया जाता है
lstat ("फू", {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 + ०,२००.८१,६३,६३,०९८,
st_ctime = 2016-12-28T09: 16: 55 + 0200.816363098}) = 0
- डेटा कॉपी किया जाता है
खुला ("फू", O_RDONLY | O_NOFOLLOW) = 3
खुला ("बार", O_WRONLY | O_TRUNC) = 4
पढ़ें (3, "test \ n", 131072) = 5
लिखना (4, "test \ n", 5) = 5
पढ़ें (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, 1000, 1000) = 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 ACL मौजूद नहीं है, इसलिए एक मूल 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 \ 4 \ 0 \ 377 \ 377 \ 377 \ 377 \" 377 \ 0 \ 4 \ 0 \ 377 \ 377 \ 377 \ 377 ", 28, 0) = 0
पास (४) = ०
पास (३) = ०
...