2010-08-02 13 views
7

के बारे में मैं जानना चाहता हूं कि एक्सेस समय क्या है। वेब में खोजा गया लेकिन एक ही परिभाषा प्राप्त करें (पढ़ें- बदल जाता है)। मुझे स्पर्श के साथ पता है हम इसे बदल सकते हैं। क्या कोई मुझे इसके बारे में और अधिक समझा सकता है उदाहरण के साथ यह कैसे बदला जाता है। यूनिक्स में फ़ाइल बनाने की तिथि/समय कोई भी तरीका है?एक्सेस समय यूनिक्स

उत्तर

19

stat(2) संरचना सभी फाइल तारीख/बार का ट्रैक रखता है:

 struct stat { 
      dev_t  st_dev;  /* ID of device containing file */ 
      ino_t  st_ino;  /* inode number */ 
      mode_t st_mode; /* protection */ 
      nlink_t st_nlink; /* number of hard links */ 
      uid_t  st_uid;  /* user ID of owner */ 
      gid_t  st_gid;  /* group ID of owner */ 
      dev_t  st_rdev; /* device ID (if special file) */ 
      off_t  st_size; /* total size, in bytes */ 
      blksize_t st_blksize; /* blocksize for file system I/O */ 
      blkcnt_t st_blocks; /* number of 512B blocks allocated */ 
      time_t st_atime; /* time of last access */ 
      time_t st_mtime; /* time of last modification */ 
      time_t st_ctime; /* time of last status change */ 
     }; 

st_atimeपहुँच समय, read(2) कॉल पर अद्यतन है (और शायद यह भी जब open(2) पढ़ने के लिए एक फ़ाइल को खोलता है) - mmap(2) के माध्यम से फ़ाइलों को पढ़ने के दौरान यह अद्यतन नहीं किया जाता है। (इसीलिए मुझे लगता है open(2) उपयोग समय का प्रतीक होगा।)

st_mtime, डेटा संशोधन समय आ गया है या तो write(2) या truncate(2) या लिखने के लिए open(2) के माध्यम से। (फिर से, यह अद्यतन किया जाता है नहीं जब फ़ाइलें mmap(2) के माध्यम से लिखा जाता है।)

st_ctimeमेटाडाटा संशोधन समय आ गया है: जब struct stat में अन्य डेटा के किसी भी संशोधित हो जाता है।

आप utime(2) साथ फ़ाइलों के टाइमस्टैम्प बदल सकते हैं:

 struct utimbuf { 
      time_t actime;  /* access time */ 
      time_t modtime;  /* modification time */ 
     }; 

नोट आप केवल उपयोग समय और (डेटा) संशोधन समय बदल सकते हैं। आप इनमें से किसी एक को मनमाने ढंग से सेट कर सकते हैं, लेकिन ctime वर्तमान समय पर सेट होने जा रहा है - क्योंकि आपने फ़ाइल के लिए मेटाडेटा बदल दिया है।

इस संरचना में कोई समय नहीं है, इसलिए यह पता लगाना संभव नहीं है कि फ़ाइल को सिस्टम से सीधे बनाया गया था।

यदि आपको वास्तव में समय बनाने की आवश्यकता है, तो आप इसे अपने बैकअप को देखकर एक सीमा तक सीमित कर सकते हैं - यह मानते हुए कि जिस फ़ाइल में आप रुचि रखते हैं उसका बैक अप लिया गया है, इसके मेटाडेटा के साथ।

+0

जब मैं vi संपादक या बिल्ली आदेश का उपयोग करता है यह फ़ंक्शन सिस्टम कॉल पढ़ने का उपयोग करता है। मुझे यूनिक्स कमांड की सूची कहां मिल सकती है जो पढ़ने या utimes या mknod सिस्टम – Arav

+1

@arav कहते हैं, 'read (2) '' read (2) ', pread (2)', readv (2) ',' readdir (2) ',' रीडलिंक (2) ',' splice (2) ',' sendfile (2) ', और बहुत आगे। दूसरे शब्दों में, फ़ाइल सामग्री को पढ़ने वाली हर चीज। इसलिए, यदि आपके प्रोग्राम ने एक फ़ाइल पढ़ी है, तो यह पढ़ने वाली फ़ाइल के एक्सेस समय को संशोधित कर सकती है। (बेशक, कुछ फाइल सिस्टम प्रदर्शन या विश्वसनीयता के लिए एक्सेस समय बंद कर देते हैं।) यदि आप विशिष्ट सिस्टम कॉल का उपयोग करने वाले प्रोग्राम ढूंढना चाहते हैं, तो आप ऐसा कुछ कर सकते हैं: 'f/bin/*/usr/bin/*/sbin/*/usr/sbin/*; पढ़िए- $ एफ | grep -q readdir @ जीएलबीबीसी और echo $ f; किया 2>/dev/null' – sarnold

+0

vi या cat रीड सिस्टम कॉल का उपयोग करता है। मैंने कोशिश की लेकिन जब मैं वीआई संपादक या बिल्ली कमांड का उपयोग करता हूं तो यह एक्सेस समय – Arav

13
  • अंतिम पहुंच: फ़ाइल डेटा अंतिम बार पहुंचने पर समय। Mknod (2), utimes (2) द्वारा बदला और पढ़ें (2) सिस्टम कॉल।

  • अंतिम बार संशोधित: फ़ाइल डेटा आखिरी बार संशोधित होने पर समय। Mknod (2), utimes (2) और लिखने (2) सिस्टम कॉल द्वारा बदला गया।

  • अंतिम बार बदला गया: समय जब फ़ाइल की स्थिति आखिरी बार बदल दी गई थी (डेटा डेटा इनोडिफिकेशन)। Chmod (2), chown (2), लिंक (2), mknod (2), नाम बदलें (2), अनलिंक (2), utimes (2) और लिखने (2) सिस्टम कॉल द्वारा बदला गया।

+0

को संशोधित नहीं कर रहा था, यह फ़ंक्शन सिस्टम कॉल पढ़ने का उपयोग करता है। मुझे यूनिक्स कमांड की सूची कहां मिल सकती है जो पढ़ने या utimes या mknod सिस्टम कॉल का उपयोग करती है – Arav

-3

हार्ड व्युत्पन्न या रैम और इसकी डिलीवरी जैसे किसी विशेष घटक में संग्रहीत जानकारी के अनुरोध के बीच औसत समय। दूसरे शब्द के समय जब एक पठन अनुरोध और वांछित शब्द आता है। उदाहरण के लिए प्रति लेनदेन 235,288 इकाइयां/13,82 लेनदेन = 16.8 इकाइयां।

1

एक ऊपर जवाब है, निर्माण या वास्तव में "जन्म" तारीख के विपरीत संग्रहीत किया जाता है और पहुँचा जा सकता है, को देखने के https://unix.stackexchange.com/a/50184/8250 (debugfs sudo के तहत किया जाना चाहिए)