初識linux下的三個時間

1.從命令看時間


在linux下,我們可以去查看一個文件的三個時間,比如:對於test.c文件我們可以查看時間,使用命令
stat查看

stat test.c

在這裏我們得到以下信息。
這裏寫圖片描述
通過上述信息,我們可以看到有許多信息,接下來,對於這三個時間,我們進行一番講解。

2.深入理解三個時間


atime(Access time):當我們去訪問這個文件,這個時間會被改變,時間就是最後一次我們訪問的時間,例如:我們使用cat或者more來讀取這個文件。
mtime(Modify time):這裏所說的就是文件內容最後的修改時間,不涉及權限。
ctime(Change time):這裏所說的改變是改變inode中的信息,比如說文件的權限,所有者,所有組等等信息。

我們首先來創建三個文件
這裏寫圖片描述

在這裏,默認情況下,我們所顯示出來的時間是系統的mtime。
如果想要查看atime和ctime,可以這樣操作:
這裏寫圖片描述

這樣,我們就可以通過上述的兩條命令來查看ctime和atime。(由於上述文件只進行了創建,所以這個時候,三個文件的三個時間都是一樣的)

接下來,我們對三個時間的改變進行驗證。

首先我們對first.txt改變mtime,只需要修改文件內容就好了
這裏寫圖片描述

然後我們對於first文件,我們進行操作,cat訪問它,查看它的atime

這裏寫圖片描述

所以,可以知道atime的性質了

接下來,驗證一下ctime。通過last.txt驗證
這裏寫圖片描述

3.關於三個時間之間的聯繫


其實如果當你把這三種都進行一次測試以後,就會發現一些聯繫,就是當你去做一些操作,改變了一個時間以後,也可能影響到了另外的時間。

比如說我們這麼來看。
這裏寫圖片描述

從這點,我可以這樣推測,我在給last.txt當中添加文件的時候,mtime發生了變化,這個時候inode當中的信息size也發生了變化,所以ctime也會改變。

接下來我們測試修改ctime,查看其他是否修改我們測試last.txt
這裏寫圖片描述

最後我們測試修改atime
這裏寫圖片描述

通過上述步驟我們就對三個時間之間的關係有了一些瞭解。

另外。在練習的步驟中我發現一個問題,就是對於atime當你more一次以後,更新了時間,再次進行more,這個時間是不會更新的。
這裏寫圖片描述
這個行爲經過搜素說明是和內核的行爲有關,atime更新少,使得性能更加高效。

4.touch命令和三個時間的關係


這個命令就是touch
touch有兩個功能,一個是用來創建新的文件,另外的一個功能就是把已經存在的文件時間變爲系統當前的時間,把數據原封不動的保存下來。

-a:或--time=atime或--time=access或--time=use  只更改存取時間;
-c:或--no-create  不建立任何文件;
-d:<時間日期> 使用指定的日期時間,而非現在的時間;
-f:此參數將忽略不予處理,僅負責解決BSD版本touch指令的兼容性問題;
-m:或--time=mtime或--time=modify  只更該變動時間;
-r:<參考文件或目錄>  把指定文件或目錄的日期時間,統統設成和參考文件或目錄的日期時間相同;
-t:<日期時間>  使用指定的日期時間,而非現在的時間;
--help:在線幫助;
--version:顯示版本信息。

首先touch -a
這裏寫圖片描述
所以可以看到 -a主要是更改的atime,當atime改變以後,文件的狀態發生了改變,所以ctime也發生了改變。

然後是touch -m
這裏寫圖片描述

這個時候的修改了mtime。

爲什麼ctime都發生了改變呢?
其實這個很好解釋當我們對這個文件touch以後無論怎麼樣,都改變了這個文件的inode的信息,所以,ctime在touch以後是肯定要改變的。

另外的touch -t和touch -d可以改變兩個時間到一個指定的時間,只不過格式的要求是不同的。

5.總結


所以最後關於改變時間的總結,
當你讀取文件,只會改變atime
當你變更文件內容,會改變ctime和mtime
當你改變了權限與inode的其他相關屬性,會改變ctime

我們通過touch可以修改三個時間。只要修改了,ctime是一直會變的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章