天天看點

linux中ctime,mtime,atime的差別

當你同熟練的UNIX使用者進行交談時,你經常會聽到他們傲慢地講出術語“改變時間(change time)”和“修改時間(modification time)”。對于許多人(和許多字典而言),改變和修改是相同的。這裡會有什麼不同那?

改變和修改之間的差別在于是改某個元件的标簽還是更改它的内容。如果有人說chmod a-w myfile,那麼這是一個改變;如果有人說echo foo >> myfile,那麼 

這是一個修改。改變是檔案的索引節點發生了改變;修改是文本本身的内容發生了變化。[檔案的修改時間也叫時間标志

(timestamp).]

隻要讨論改變時間和修改時間,就不可能不提到“通路時間(access

time)”.通路時間是檔案最後一次被讀取的時間。是以閱讀一個檔案會更新它的通路時間,當它的改變時間并沒有變化(有關檔案的資訊沒有被改變),它的

修改時間也同樣如此(檔案本身沒有被改變)

有時,在許多地方改變時間或者“ctime”被錯誤地寫成“建立時間”,包括某些UNIX參考手冊。不要相信他們

下面是我man出來的内容,僅供參考!

st_atime

Time when file data was last accessed. Changed by  the

following   functions:   creat(),   mknod(),   pipe(),

utime(2), and read(2).

st_mtime

Time when data was last modified. Changed by the  fol-

lowing  functions:  creat(), mknod(), pipe(), utime(),

and write(2).

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().

ls顯示出的time應該是mtime。

touch後,檔案的三個時間應該都會改變,可以試一試。

問題描述

檔案的 ctime、mtime、atime 之間有什麼差別? 

配置資訊

解決方法

檔案的 Access time,atime 是在讀取檔案或者執行檔案時更改的。

檔案的 Modified time,mtime 是在寫入檔案時随檔案内容的更改而更改的。

檔案的 Create time,ctime 是在寫入檔案、更改所有者、權限或連結設定時随 Inode 的内容更改而更改的。 

是以,更改檔案的内容即會更改 mtime 和 ctime,但是檔案的 ctime 可能會在 mtime 未發生任何變化時更改 - 在權限更改,但是檔案内容沒有變化的情況下。 

ls(1) 指令可用來列出檔案的 atime、ctime 和 mtime。

ls -lc filename         列出檔案的 ctime

ls -lu filename         列出檔案的 atime

ls -l filename          列出檔案的 mtime 

atime不一定在通路檔案之後被修改,因為:使用ext3檔案系統的時候,如果在mount的時候使用了noatime參數那麼就不會更新atime的

資訊。而這是加了 noatime 取消了, 不代表真實情況.反正, 這三個 time stamp 都放在 inode 中.若 mtime,

atime 修改, inode 就一定會改, 既然 inode 改了, 那 ctime 也就跟著要改了.之是以在 mount option

中使用 noatime, 就是不想 file system 做太多的修改, 而改善讀取效能.

本文轉自 holy2009 51CTO部落格,原文連結:http://blog.51cto.com/holy2010/425388

繼續閱讀