Linux下文件的時間屬性node
每一個文件都有三個主要的時間屬性,這三個時間屬性的意義是什麼呢?web
modify time (mtime)bash
當該文件的「內容數據」更改時,就會更新這個時間。內容數據指的是文件的內容,而不是文件的屬性或權限。ide
change time (ctime)性能
當該文件的「狀態、元數據」更改時,就會更新這個時間。好比更改文件權限、屬主、屬組、文件名等元數據。this
access time (atime)spa
當該文件的「內容被訪問、讀取」時,就會更新這個讀取時間(access)。好比經過cat,more命令去讀取文件,那麼就會更新該文件的atime了。
orm
如何【查看】文件的三個時間屬性?開發
stat命令, 能夠顯示文件或者文件系統狀態。
it
語法: stat [OPTION]... FILE... [root@web ~]# stat strerror.c File: `strerror.c' Size: 201 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 143765 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-02-11 21:00:46.976652765 +0800 Modify: 2016-02-11 21:00:40.286651956 +0800 Change: 2016-02-11 21:00:40.342654314 +0800
默認狀況下, ls 顯示出來的是該文件的 mtime, 也就是這個文件的內容上次被更改的時間。
[root@web ~]# ls -l strerror.c -rw-r--r-- 1 root root 201 Feb 11 2016 strerror.c [root@web ~]# ls -l --time=atime strerror.c -rw-r--r-- 1 root root 201 Feb 11 2016 strerror.c [root@web ~]# ls -l --time=ctime strerror.c -rw-r--r-- 1 root root 201 Feb 11 2016 strerror.c
如何【修改】文件的三個時間屬性?
touch命令能夠修改文件的時間屬性。
touch [OPTION]... FILE... -a change only the access time -m change only the modification time -r, --reference=FILE use this file’s times instead of current time
針對 access time 沒有改變的問題
有時候,用 cat filename,或者 more filename 訪問相應文件時,並無刷新文件的 access time ,而是在修改了文件內容以後,才刷新了access time, 以及 modity time。
官方解釋:
在kernel版本 2.6.30以前, Linux的核心開發人員針對 ext3/ext4文件系統的性能進行討論,其中包括 atime。 在 kernel 2.6.30 以前,文件系統中默認會及時的更新atime,這樣會帶來兩個問題。
(1)系統中大量的文件訪問,將atime寫入到磁盤中,消耗時間,從而下降系統性能
(2)頻繁的更新操做,也會消耗大量電能
其實在Linux上不多程序須要獲取精確的atime時間,而且Linux核心開發人員從ext3/ext4文件系統的性能角度出發,決定在2.6.30版本的內容中修改atime的更新方式,只有在如下三種狀況之一纔會更新atime:
(1)若是將分區mount掛載的時候指定採用非relatime方式(默認採用 relatime方式),如 strictatime。補充:在OS啓動的時候,將各個分區掛載到不一樣的目錄,在掛載(mount)的參數中採用 strictatime,代表及時更新atime。在2.6.30以後mount添加了 relatime 和 strictatime 兩個選項,詳細的能夠經過 man mount 查看。
(2)atime 小於 ctime 或者 小於 mtime 的時候
(3)本次的 access time 和 上次的 access time 超過24個小時