天天看點

linux ctime 時間戳,檔案的時間戳

### 檔案的時間戳(atime/ctime/mtime)

> 檔案的時間屬性有三種:atime/ctime/mtime。atime是access time,即上一次的通路時間;mtime是modify time,是檔案的修改時間;ctime是change time,也是檔案的修改時間,隻不過這個修改時間計算的inode修改時間,也就是中繼資料修改時間。檔案還有一個建立時間(create time),大多數unix系統上都認為這是個無用的屬性,一般工具無法擷取這個時間,但是對于ext家族檔案系統,通過它的底層調試工具debugfs可以擷取create time。

>

> 但mtime隻有修改檔案内容才會改變,更準确的說是修改了它的data block部分;而ctime是修改檔案屬性時改變的,确切的說是修改了它的中繼資料部分,例如重命名檔案,修改檔案所有者,移動檔案(移動檔案沒有改變datablock,隻是改變了其inode指針,或檔案名)等.當然,修改檔案内容也一定會改變ctime(修改檔案内容至少已經修改了inode記錄上的mtime,這也是中繼資料),也就是說mtime的改變一定會引起ctime的改變。

>

> 對目錄而言,考慮目錄檔案的data block,可知在目錄中建立、删除檔案以及目錄内其他任意檔案操作都會改變mtime,因為目錄裡的任何東西都是目錄中的内容;而目錄的ctime,除了目錄的mtime引起ctime改變之外,對目錄本身的中繼資料修改也會改變ctime。

>

> 總結下:

>

> (1).atime隻在檔案被打開通路時才改變,若不是打開檔案編輯内容(如重定向内容到檔案中),則ctime和mtime的改變不會引起atime的改變;

>

> (2).mtime的改變一定引起ctime的改變,而通路檔案時(例如cat),atime不一定會改變,是以atime"改變"(這個改變是假象,見下文分析)不一定會影響ctime。

stat 檢視時間戳,atime/ctime/mtime。

~~~

[[email protected] test]# stat index.md

File: ‘index.md’

Size: 10       Blocks: 8         IO Block: 4096   regular file

Device: fd01h/64769d Inode: 1356477     Links: 1

Access: (0644/-rw-r--r--) Uid: (   0/   root)   Gid: (   0/   root)

Access: 2019-06-04 15:37:53.678818897 +0800

Modify: 2019-06-04 15:37:51.149753586 +0800

Change: 2019-06-04 15:37:51.149753586 +0800

Birth: -

~~~