在運維的日常工作中,服務器是很常見的。而服務器的操作系統因linux系統的優勢80%都在用它。不論你用的是centos,Redhat,ubuntu等,這些都是用的Linux內核,所以都是Linux操作系統,區別在于各家公司的封裝和優化調整不一樣,就造成了不同的發行版本。我們經常聽到的都是不同的發行版本而已。而對于Linux系統而言,一切皆文件,對文件的時間表述有3個,分別是:atime,mtime,ctime。很多同學對這3個時間比較困惑且很容易混淆,這里就這個問題以centos為例詳細品味。
Linux time
結論
可能有些同學理解下就知道,我們先來說下結論,后面再一一驗證。
- atime:(access time)中文名:訪問時間;顯示的是文件最后被訪問的時間。比如命令和腳本間接使用等
- mtime:(modify time)中文名:修改時間;顯示的是文件被修改的最后時間,比如用vim編輯文件時就會被改變。
- ctime:(change time)中文名:變化時間;顯示的是文件元數據變化時間,例如:權限、擁有者、所屬的組等等。很多朋友把它理解成創建時間,包括書籍也是這么寫就會誤導人了,記住ctime是屬性改變時間。
- relatime: 從kernel2.6.29開,默認集成了一個relatime的屬性。是因為在系統中對文件的讀操作很頻繁,那么久造成atime更新開銷很大。所以很多運維在掛裝文件系統磁盤時使用noatime屬性來停止更新atime。但有些程序需要根據atime進行一些判斷和操作,避免不了的。所以Linux就推出了relatime。利用這個特性來掛載文件系統,只有當mtime比atime更新時,才會更新atime。事實上,這時atime和mtime已經是一樣的了。所以這個選項是為了實現對atime的兼容才推出的。并不是新的時間屬性。具體掛載方法就是通過mount -o relatime /dir來掛裝的。
例子
[root@localhost ~]# ll總用量 8-rw-------. 1 root root 1290 9月 30 10:19 anaconda-ks.cfg-rw-r--r--. 1 root root 4 1月 2 11:22 wandouduoduo[root@localhost ~]# stat wandouduoduo總用量 8-rw-------. 1 root root 1290 9月 30 10:19 anaconda-ks.cfg-rw-r--r--. 1 root root 4 1月 2 11:22 wandouduoduo[root@localhost ~]# stat wandouduoduo 文件:"wandouduoduo" 大小:4 塊:8 IO 塊:4096 普通文件設備:fd00h/64768dInode:33577049 硬鏈接:1權限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)環境:unconfined_u:object_r:admin_home_t:s0最近訪問:2020-01-02 11:29:07.301204037 +0800最近更改:2020-01-02 11:22:39.952908458 +0800最近改動:2020-01-02 11:22:39.952908458 +0800創建時間:-[root@localhost ~]# ls -l #默認的ls -l顯示的是mtime 總用量 8-rw-------. 1 root root 1290 9月 30 10:19 anaconda-ks.cfg-rw-r--r--. 1 root root 4 1月 2 11:22 wandouduoduo[root@localhost ~]# ls -l --time=atime #指定選項,列出文件的atime總用量 8-rw-------. 1 root root 1290 9月 30 10:19 anaconda-ks.cfg-rw-r--r--. 1 root root 4 1月 2 11:29 wandouduoduo[root@localhost ~]# ls -l --time=ctime #指定選項,列出文件的ctime總用量 8-rw-------. 1 root root 1290 9月 30 10:19 anaconda-ks.cfg-rw-r--r--. 1 root root 4 1月 2 11:22 wandouduoduo
測試
讀取文件
[root@localhost ~]# stat wandouduoduo #獲取3個時間 文件:"wandouduoduo" 大小:4 塊:8 IO 塊:4096 普通文件設備:fd00h/64768dInode:33577048 硬鏈接:1權限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)環境:unconfined_u:object_r:admin_home_t:s0最近訪問:2020-01-02 11:57:01.410659319 +0800最近更改:2020-01-02 11:57:01.410659319 +0800最近改動:2020-01-02 11:57:01.410659319 +0800創建時間:-[root@localhost ~]# cat wandouduoduo #讀取下文件Sun[root@localhost ~]# stat wandouduoduo #再查看時間 文件:"wandouduoduo" 大小:4 塊:8 IO 塊:4096 普通文件設備:fd00h/64768dInode:33577048 硬鏈接:1權限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)環境:unconfined_u:object_r:admin_home_t:s0最近訪問:2020-01-02 11:57:23.616643436 +0800最近更改:2020-01-02 11:57:01.410659319 +0800最近改動:2020-01-02 11:57:01.410659319 +0800創建時間:-
結果描述:可以看出來,使用cat讀取文件后,文件的atime發生了改變,其他的沒有改變。
文件寫入
[root@localhost ~]# stat wandouduoduo #獲取3個時間 文件:"wandouduoduo" 大小:4 塊:8 IO 塊:4096 普通文件設備:fd00h/64768dInode:33577048 硬鏈接:1權限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)環境:unconfined_u:object_r:admin_home_t:s0最近訪問:2020-01-02 11:57:23.616643436 +0800最近更改:2020-01-02 11:57:01.410659319 +0800最近改動:2020-01-02 11:57:01.410659319 +0800創建時間:-[root@localhost ~]# echo "hello world" >>wandouduoduo #文件寫入內容[root@localhost ~]# stat wandouduoduo #再查看時間 文件:"wandouduoduo" 大小:16 塊:8 IO 塊:4096 普通文件設備:fd00h/64768dInode:33577048 硬鏈接:1權限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)環境:unconfined_u:object_r:admin_home_t:s0最近訪問:2020-01-02 11:57:23.616643436 +0800最近更改:2020-01-02 11:59:54.107480965 +0800最近改動:2020-01-02 11:59:54.107480965 +0800創建時間:-
結果描述:可以看出,寫操作不會對atime(訪問時間)有任何影響,但mtime和ctime都發生了修改。mtime修改了我們是可以理解的,畢竟我們修改了文件。那為何ctime也修改了呢? 仔細觀察,我們發現文件的大小也發生了變化,也就是元數據發生了變化,所以ctime也是要變化的。
修改文件屬性
[root@localhost ~]# stat wandouduoduo #獲取3個時間 文件:"wandouduoduo" 大小:16 塊:8 IO 塊:4096 普通文件設備:fd00h/64768dInode:33577048 硬鏈接:1權限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)環境:unconfined_u:object_r:admin_home_t:s0最近訪問:2020-01-02 11:57:23.616643436 +0800最近更改:2020-01-02 11:59:54.107480965 +0800最近改動:2020-01-02 11:59:54.107480965 +0800創建時間:-[root@localhost ~]# chown sun wandouduoduo #修改文件權限[root@localhost ~]# stat wandouduoduo #再查看時間 文件:"wandouduoduo" 大小:16 塊:8 IO 塊:4096 普通文件設備:fd00h/64768dInode:33577048 硬鏈接:1權限:(0644/-rw-r--r--) Uid:( 1000/ sun) Gid:( 0/ root)環境:unconfined_u:object_r:admin_home_t:s0最近訪問:2020-01-02 11:57:23.616643436 +0800最近更改:2020-01-02 11:59:54.107480965 +0800最近改動:2020-01-02 12:06:29.115867565 +0800創建時間:-
結果描述:可以看出,修改了權限后,文件ctime發生了變化。
總結
通過上面的實驗,我們也對這三個時間有了清晰的認識。如有疑問,歡迎留言評論。