टाइमस्टैम्प, संशोधन समय, और एक फ़ाइल का समय बनाया


105

मैं सिर्फ इतना है कि पता है ls -tऔर ls -fएक निर्देशिका के अंतर्गत फाइलों और उपनिर्देशिकाओं के विभिन्न छंटाई दे।

  • टाइमस्टैम्प, संशोधन समय और फ़ाइल के बनाए समय के बीच अंतर क्या हैं?
  • कमांड द्वारा इस प्रकार की जानकारी कैसे प्राप्त करें और बदलें?
  • किस तरह की जानकारी के संदर्भ में लोग कहते हैं कि एक फ़ाइल दूसरे की तुलना में "नई" है?
  • किस प्रकार की जानकारी के परिवर्तन से फ़ाइल अलग नहीं होगी?

उदाहरण के लिए, मैंने देखा कि किसी ने लिखा है:

डिफ़ॉल्ट रूप से, rsync प्रोग्राम केवल यह देखने के लिए दिखता है कि क्या फ़ाइल आकार और टाइमस्टैम्प में भिन्न हैं। यह परवाह नहीं करता है कि कौन सी फ़ाइल नई है, अगर यह अलग है, तो यह ओवरराइट हो जाता है। आप '--update' झंडे को rsync में पास कर सकते हैं, जिसके कारण यह गंतव्य पर फ़ाइलों को छोड़ने का कारण होगा यदि वे स्रोत पर फ़ाइल की तुलना में नए हैं, लेकिन केवल इतने लंबे समय के रूप में वे एक ही प्रकार की फ़ाइल हैं। इसका मतलब यह है कि यदि, उदाहरण के लिए, स्रोत फ़ाइल एक नियमित फ़ाइल है और गंतव्य एक सिमलिंक है, तो गंतव्य फ़ाइल ओवरराइट हो जाएगी, भले ही टाइमस्टैम्प की परवाह किए बिना।

साइड नोट पर, क्या यहाँ फ़ाइल प्रकार का अर्थ केवल नियमित फ़ाइल और सिमलिंक है, न कि प्रकार जैसे कि pdf, jpg, htm, txt आदि?


यह भी देखें askubuntu.com/questions/62492/…
rogerdpack

जवाबों:


138

"टाइमस्टैम्प" के 3 प्रकार हैं:

  • एक्सेस - आखिरी बार फाइल पढ़ी गई थी
  • संशोधित करें - पिछली बार फ़ाइल को संशोधित किया गया था (सामग्री संशोधित की गई है)
  • परिवर्तन - फ़ाइल का पिछली बार मेटा डेटा बदल दिया गया था (जैसे अनुमतियाँ)

इस जानकारी को प्रदर्शित करने के लिए, आप उपयोग कर सकते हैं statजो कोरुटिल का हिस्सा है।

stat आपको कुछ और जानकारी भी दिखाएगा जैसे डिवाइस, इनोड, लिंक इत्यादि।

याद रखें कि इस तरह की जानकारी फाइलसिस्टम और माउंट विकल्पों पर अत्यधिक निर्भर करती है। उदाहरण के लिए यदि आप noatimeविकल्प के साथ एक विभाजन को माउंट करते हैं , तो कोई एक्सेस जानकारी नहीं लिखी जाएगी।

टाइमस्टैम्प को बदलने के लिए एक उपयोगिता होगी touch। यह तय करने के लिए कुछ तर्क हैं कि किस टाइमस्टैम्प को बदलना है (उदाहरण के लिए पहुँच समय के लिए -m, संशोधन समय के लिए) और एक नए दिए गए टाइमस्टैम्प के पार्सिंग को प्रभावित करने के लिए। man touchअधिक जानकारी के लिए देखें।

touchके साथ संयोजन में काम बन सकता है cp -u( "केवल तब कॉपी करें जब SOURCE फ़ाइल गंतव्य फ़ाइल की तुलना में नई हो या जब गंतव्य फ़ाइल गायब हो" ) या खाली मार्कर फ़ाइलों के निर्माण के लिए।


1
धन्यवाद! Rsync कमांड के लिए, "यह ध्यान नहीं देता है कि कौन सी फ़ाइल नई है", किस प्रकार के टाइमस्टैम्प का अर्थ है "नया"। इसके अलावा, एक साइड नोट पर, फ़ाइल प्रकार जो rsync का मतलब केवल नियमित फ़ाइल और सिमलिंक के बारे में है, न कि प्रकार जैसे कि pdf, jpg, htm, txt आदि?
टिम

2
आम तौर पर, एक फ़ाइल के समय का संदर्भ "संशोधित" टाइमस्टैम्प है। उदाहरण के लिए, आप जो देखते हैं ls -l। और फ़ाइल का प्रकार फ़ाइल बनाम सिमिलिंक (या निर्देशिका या डिवाइस जैसी अन्य प्रकार की फाइलें) को संदर्भित करता है। नहीं क्या फ़ाइल में डेटा के प्रकार (बनाम jpeg पाठ, आदि) है।
सेठ एल।

2
@ उस संदर्भ में यह संशोधित टाइमस्टैम्प है; rsync कह रहा है कि जब यह निर्णय ले रहा है कि इसे किसी फ़ाइल का बैकअप लेना चाहिए, तो यह देखने के लिए जाँच नहीं करता है कि क्या स्रोत फ़ाइल को मौजूदा बैकअप की तुलना में हाल ही में संशोधित किया गया है (जो बैकअप प्रोग्राम के साथ आम है); यह सिर्फ अगर फ़ाइलें विभिन्न आकारों या अलग संशोधन बार देखने के लिए जाँच करता है और यदि ऐसा है तो आप बैक अप लेता
माइकल Mrozek

1
और मुझे कैसे पता चलेगा कि फ़ाइल पहले कब बनाई गई थी? क्या यह जानकारी कहीं बनी हुई है या अपडेट में खोई हुई है? तो यह कहना है कि, फ़ाइल कब से अस्तित्व में है ..?
xyz

1
स्टेट (2) आदमी पेज अधिक विस्तार से वर्णन है जब उन timestamps बदल रहे हैं।
क्रिस्टियन सियुपिटु

35

इकोक्स का उत्तर मान्य है लेकिन मैं फ़ाइल निर्माण समय के बारे में जानकारी जोड़ना चाहता हूं।

फाइल सिस्टम सपोर्ट

कुछ फ़ाइल सिस्टम निर्माण समय (या जन्म समय) के बारे में इनकोड में एक अतिरिक्त प्रविष्टि का समर्थन करते हैं। मुझे पता है कि ext4 इस सुविधा का समर्थन करता है और JFS और BTRFS भी ।

हालाँकि अधिकांश उपकरण और API अभी तक इस अतिरिक्त जानकारी को पढ़ने के लिए अपडेट नहीं किए गए हैं। तो भी-हालांकि यह हो सकता है, यह सुलभ नहीं है।

उदाहरण के लिए उबंटू 12.04 एलटीएस पर मुझे आज बनाई गई फ़ाइल के लिए निम्नलिखित मिला:

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

आप देख सकते हैं कि नए स्टेट फ़ंक्शन में एक जन्म क्षेत्र है, हालांकि आउटपुट गलत लगता है। और डिबगफ़ के माध्यम से हम जानकारी प्राप्त कर सकते हैं (जैसा कि मैं ext4 फाइल सिस्टम पर हूं)।

स्टेटेक्स समर्थन

कर्नेल 4.11 के बाद से अब एक नया स्टेटेक्स सिस्टम कॉल है , Y2038 या नेटवर्क फ़ाइल सिस्टम के बेहतर समर्थन के शीर्ष पर, यह कुछ अतिरिक्त सुविधाओं को भी लाता है जैसे btimeजन्म समय (निर्माण समय)। Ext4 के लिए समर्थन समान कर्नेल रिलीज़ 4.11 में होना चाहिए।

बाद में कर्नेल रिलीज में इस नए syscall में समर्थन जोड़ने के लिए पैच किए गए हैं: जैसे कर्नेल 4.13 में BTRFS और F2FS, 4.14 में SMB3, 4.15 में GFS2, 4.16 में NFS, आदि।

ऊपर आ रही glibc इस इंटरफ़ेस को क्वेरी करने के लिए एक फ़ंक्शन कॉल प्रदान करेगी (देखें glibc statx समर्थन के बारे में Phoronix समाचार )। इसलिए हम बहुत जल्द यूजर स्पेस में इस सुविधा के लिए समर्थन की उम्मीद कर सकते हैं।


क्या आपको पता है कि विंडोज (क्रिएशन टाइम) से फाइल एक्सट्रीम 4 पर ले जाए जाते हैं और माइम की तरह इसके विपरीत, अगर समय बरकरार रहता है?
विरोधाभास

@ अपरॉडाय सॉरी मुझे इसका जवाब नहीं पता। यदि आप NTFS से ext4 में फाइल कॉपी करते समय लिनक्स के तहत मतलब रखते हैं, तो किसी को NTFS ड्राइवर में देखने की आवश्यकता होगी यदि यह सृजन समय का समर्थन करता है। अगर आप विंडोज के तहत मतलब रखते हैं, तो किसी को विंडोज के लिए ext4 ड्राइवर में देखना होगा।
ह्यूजेंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.