1. 程式人生 > >【Linux】Linux下使用stat命令所顯示出來的三個時間

【Linux】Linux下使用stat命令所顯示出來的三個時間

在linux系統下,使用stat(顯示inode資訊)命令可以檢視一個檔案的某些資訊,我們先來嘗試一下。
這裡寫圖片描述
簡單的介紹一下stat命令顯示出來的檔案其他資訊:
- File:顯示檔名
- Size:顯示檔案大小
- Blocks:檔案使用的資料塊總數
- IO Block:IO塊大小
- regular file:檔案型別(常規檔案)
- Device:裝置編號
- Inode:Inode號
- Links:連結數
- Access:檔案的許可權
- Gid、Uid:檔案所有權的Gid和Uid。

Linux下的三個時間:
1. Access Time:簡寫為atime,表示檔案的訪問時間。當檔案內容被訪問時,更新這個時間
2. Modify Time:簡寫為mtime,表示檔案內容的修改時間,當檔案的資料內容被修改時,更新這個時間。
3. Change Time:簡寫為ctime,表示檔案的狀態時間,當檔案的狀態被修改時,更新這個時間,例如檔案的連結數,大小,許可權,Blocks數。

上面最開始的三個時間是一模一樣的,原因是我在建立它的同時修改了它的內容,所以它的大小,Blocks也發生變化,也相當於一次訪問,所以,我退出儲存後三個時間一致。

下面進行一一驗證。

1.atime(訪問時間)的更新
這裡寫圖片描述
2.mtime(修改時間)的更新
這裡寫圖片描述
這裡我使用echo指令向hello.cpp檔案中寫入了一行內容,驚訝的發現,不止mtime被更新了,而且ctime也被更新了。這是問什麼呢?原因很簡單,前面說過,ctime在檔案大小,Blocks發生變化時也會被更新,所以仔細觀察上圖,這兩項資訊是否發生變化了呢?
3.ctime(狀態時間)的更新

這裡寫圖片描述
使用chmod指令修改hello.cpp的檔案許可權後,狀態時間再次更新。
那如果不採取這些操作導致系統自己更新這三個時間,有沒有辦法人為改變這三個時間呢?答案是有的,請繼續往下看~

touch命令
我們都知道touch命令是用來建立檔案的,其實它的用法還有一個,就是修改檔案的時間戳。
用法:
-a 或–time=atime或–time=access或–time=use 只更改訪問時間。
-m 或–time=mtime或–time=modify  只更改修改時間
-d、-t  使⽤指定的⽇期時間,⽽⾮現在的時間
我們來試一試:
這裡寫圖片描述
通過上圖可以發現,我只是通過-a選項試圖修改hello.cpp的訪問時間,結果ctime(狀態時間)也發生了改變。雖然實際上我用touch操作只改變了atime,但是由於檔案的狀態發生了變化,所以ctime就自己更新了。
這裡寫圖片描述


沒錯,和上面一樣,我只是通過-m選項改了檔案的修改時間,ctime依然更新了。touch指令依然只是修改了修改時間,而狀態時間是系統自己更新的。為什麼會這樣呢?想一下,我們每次使用touch指令其實都是修改了檔案的inode資訊,所以狀態時間就會自己更新。