首頁 > 軟體

Linux 檔案時間詳解 ctime mtime atime

2020-06-16 18:08:45

Linux系統檔案有三個主要的時間屬性,分別是 ctime(change time), atime(access time), mtime(modify time)。這三個時間很容易混淆,準備深入了解Linux的童鞋請區分這三者的區別

atime:Access time,是在讀取檔案或者執行檔案時更改,即檔案最後一次被讀取的時間。
說明: st_atime
          Time when file data was last accessed. Changed by  the
          following  functions:  creat(),  mknod(),  pipe(),
          utime(2), and read(2).

mtime:Modified time,是在寫入檔案時隨檔案內容的更改而更改,是指檔案內容最後一次被修改的時間。
說明: st_mtime
          Time when data was last modified. Changed by the  fol-
          lowing  functions:  creat(), mknod(), pipe(), utime(),
          and write(2).

ctime:Change time,是在寫入檔案、更改所有者、許可權或連結設定時隨 Inode 的內容更改而更改,即檔案狀態最後一次被改變的時間。
說明: st_ctime
          Time when file status was last changed. Changed by the
          following  functions:  chmod(),  chown(),  creat(),
          link(2),  mknod(),  pipe(),  unlink(2),  utime(),  and
          write().
很多人把它理解成create time,包括很多誤導人的書籍也是這麼寫。實際上ctime是指change time。

注意:
1、修改是文字本身的內容發生了變化(mtime)
      改變是檔案的索引節點發生了改變(ctime)
2、如果修改了檔案內容,則同時更新ctime和mtime
3、如果只改變了檔案索引節點,比如修改許可權,則只是改變了ctime

4、如果使用ext3檔案系統的時候,在mount的時候使用了noatime引數則不會更新atime的資訊,即存取檔案之後atime不會被修改,而這個不代表真實情況

小知識:這三個 time stamp 都放在 inode 中。若mtime,atime修改, inode 就一定會改,相應的inode改了,那ctime 也就跟著要改了,之所以在mount option中使用 noatime, 就是不想 file system 做太多的修改, 從而改善讀取效能.

檢視檔案的 atime、ctime 和 mtime。
# ls -lc filename        列出檔案的 ctime
# ls -lu filename        列出檔案的 atime
# ls -l  filename          列出檔案的 mtime

例子
1: # echo "Hello World" >> myfile    atime不變,同時改變了ctime和mtime
2: # cat myfile            ctime和mtime不變,只改變atime
      # ls myfile
                    ctime和mtime以及atime都不改變
3: # chmod u+x myfile            mtime和atime不變,只改變ctime
4: # mv myfile ../
                    mtime和atime不變,只改變ctime

其他擴充套件:
relatime屬性

從kernel2.6.29開始,預設整合了一個 relatime的屬性。使用這個特性來掛裝檔案系統後,只有當mtime比atime更新的時候,才會更新atime。

使用場景:
在檔案讀操作很頻繁的系統中,atime更新所帶來的開銷很大,所以在掛裝檔案系統的時候使用noatime屬性來停止更新atime。但是有些程式需要根據atime進行一些判斷和操作,這個時候relatime特性就派上用場了。其實在事實上,這個時候atime和mtime已經是同一個time,所以可以理解這個選項就是為了實現對atime的相容才推出的,並不是一個新的時間屬性。
使用方法: # mount -o relatime /dir##掛載目錄的時候加relatime引數


IT145.com E-mail:sddin#qq.com