2010-08-02 39 views
7

我想知道什麼是訪問時間。在網上搜索,但獲得相同的定義(讀取變化)。我知道觸摸我們可以改變它。有沒有人可以用一個例子說明它是如何改變的?還有什麼辦法可以在unix中找到創建日期/時間的方法嗎?關於訪問時間unix

回答

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編輯器或cat命令呢這個函數使用讀取系統調用。我在哪裏可以找到使用read或utimes或mknod系統調用的unix命令列表 – Arav 2010-08-04 01:23:09

+1

@arav,'read(2)'對於'read(2)','pread(2)','readv 2),readdir(2),readlink(2),splice(2),sendfile(2)等等。換句話說,所有讀取文件內容的東西。所以,如果您的程序已經讀取了一個文件,那麼它可能會修改讀取文件的訪問時間。 (當然,有些文件系統會關閉訪問時間來提高性能或可靠性。)如果你想找到使用特定系統調用的程序,你可以這樣做:'for/in/bin/*/usr/bin/*/sbin/*/usr/sbin/*;做readelf -s $ f | grep -q readdir @ GLIBC && echo $ f; done 2>/dev/null' – sarnold 2010-08-04 02:13:29

+0

vi或cat是否使用讀取系統調用。我試過了,但它並沒有修改訪問時間 – Arav 2010-08-05 04:14:58

13
  • 上次訪問:上次訪問文件數據的時間。由mknod(2),utimes(2)和read(2)系統調用改變。

  • 上次修改時間:上次修改文件數據的時間。由mknod(2),utimes(2)和write(2)系統調用改變。

  • 上次更改:文件狀態上次更改的時間(inode數據修改)。由chmod(2),chown(2),link(2),mknod(2),rename(2),unlink(2),utimes(2)和write(2)系統調用改變。

+0

當我使用vi編輯器或貓命令這個功能使用讀取系統調用。我在哪裏可以找到使用read或utimes或mknod系統調用的unix命令列表 – Arav 2010-08-03 23:59:37

-3

存儲在特定組件(如硬派生或RAM)中的信息請求與其傳送之間的平均時間。在讀取請求和希望的單詞到來之間的另一個字時間。例如235,288個單位/ 13,82個交易=每個交易16.8個單位。