Linux文件時間屬性


Linux文件時間屬性

                                                                                                                                                                         -by 石鍋拌飯

寫這篇小文章的緣由是之前做過一個項目,須要定期將文件轉走,或許專業點的名詞叫rollover。那么這就須要推斷一個文件是否到了轉走的時間,從而就須要知道文件的創建時間。 Linux文件分為狀態改動時間ctime。改動時間mtime以及訪問時間atime。那么它們是怎么變化的呢?須要注意這個ctime可不是創建時間,是Change Time的縮寫,改動時間那就是文件改動的時間Modify Time。訪問時間就是文件讀取的時間Access Time。

事實上不然,這里面大有玄機。新建一個文件touch test,寫入內容“abc”。

我們能夠通過stat test命令來查看文件的這三個時間。

剛創建,能夠發現三個時間是一樣的。如圖所看到的:



1.狀態修改時間

實際上,所謂狀態修改,事實上就是inode信息修改的時間。

那么詳細哪些操作會導致inode信息修改呢?我們知道linux文件inode中包括的信息有文件權限,訪問時間,創建時間信息,文件大小。鏈接數。文件所屬用戶等信息。那么更改這些信息會導致ctime發生變化。

  • 我們改變文件test的權限。會導致ctime變化。接着圖之前的樣例,我們運行chmod -w test, 再次運行stat test能夠看到結果例如以下圖所看到的。狀態改動時間ctime發生了變化,而改動時間和訪問時間不變。同理,我們使用chown命令改動文件所屬用戶和組等信息,也會導致ctime發生變化。此外創建硬鏈接如ln test test1,改動文件內容如echo 'hehe' >> test都會使得ctime發生變化(須要注意的是,創建符號連接ln -s test test2並不會導致ctime變化,由於軟連接相當於是另外一個文件,並不影響本身這個文件了)。


  • 那么總結起來,修改狀態修改時間ctime的情況有例如以下幾種情況:
      a.改動文件權限或者全部者、鏈接數等屬性,如chmod,chown。ln等操作(不包含ln -s)。

  •   b.改動文件內容。(當然也會改變mtime。假設是使用vim等工具打開文件再改動,同一時候也會改動atime。假設僅僅是用 echo 'hehe' >> test 這個命令進行追加寫入。則僅僅會改動ctime,mtime,不影響atime)。


2.改動時間

改動時間我們非常easy想成文件有改動才改變,那事實上也的確是這樣,僅僅是這個改動是指改動的操作。不是說文件內容不變它就不改變,而是須要文件沒有進行過寫操作。比方我們用命令vim test打開文件,在test中加一個字符'd'。然后再刪除字符'd'。這個時候用:w保存文件,我們會發現盡管test文件內容沒有變化,可是它的改動時間mtime已經更新。

當然這個操作本身是先打開文件再改動的。所以atime也會更新, ctime肯定也要更新。


3.訪問時間

僅僅要我們是讀取文件,都會改動訪問時間atime。

比方more, cat命令等。

為解決文件讀取頻繁的系統中atime更新所帶來的開銷問題。所以非常多SA都在掛裝文件系統的時候使用noatime屬性來停止更新atime,這樣能夠把atime當做文件創建時間來使用。可是有些程序須要依據atime進行一些推斷和操作。所以Linux在2.6新版本號的內核就推出了一個relatime特性。使用這個特性來掛裝文件系統后。僅僅有當mtime比atime更新的時候。才會更新atime。也就是說單純的more,cat命令並不會更新atime,僅僅有當你改動過文件后再次讀取才會更新atime。

使用了relatime特性后,比方你使用echo 'hehe' >> test命令改動test文件內容,剛剛寫入完,能夠發現ctime和mtime都更新了。可是atime還沒有更新。此時,你使用cat test或者more等命令打開test文件。這樣就會更新atime了。例如以下圖所看到的


當然,假設你掛載的分區設置的不是relatime,而是noatime的話。那么atime是始終不會變的,這個時候atime就能夠當做文件創建時間來用了。(能夠通過mount -l來查看文件系統掛載狀態)


4.參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM