touch這個命令最常被使用的情況是:
1>簡歷一個空文件
2>將一個文件的時間戳修改爲目前的時間
與touch相關的三個時間戳分別是:
1>access time (atime)
當一個文件內容被讀取時,就會更新這個讀取時間。舉例,使用cat查看/tmp/mn.txt:
使用stat查看該文件的三個時間戳:
顯然,我們可以看到atime被更新了
2>modification time (mtime)
當文件內容數據被改變時,就會更新這個時間。內容數據是指文件的內容,而不是文件的屬性或權限。
以上是我用vim編輯了mn.txt,之後使用stat查看的結果,mtime被改變了。
3>status time (ctime)
當該文件狀態改變時,就會更新這個時間,舉例,像是權限和屬性被更改,都會更新這個時間。
但我們也看到上面的情況,mtime改變了,ctime也變了。這又是爲什麼呢?我是覺得如果文件的內容改變,一定也會導致文件的屬性發生變化,就比如說文件的大小,會隨着文件的增刪而改變。
而且我觀察到在改變了文件內容之後,mtime和ctime並不完全一致,在後面的秒數上會有微小的差別。
使用touch命令可以對文件的三個時間戳進行修改:
以上我使用touch命令將mn.txt三個時間戳修改到當前。
可以分別使用 touch -a 和 touch -m 來改變 atime 和 mtime 。
但我們使用 touch -a 時,會改變文件的訪問時間(atime),同時也會改變文件的狀態時間(ctime),並且它們完全相同,沒有任何差異。
我們使用 touch -m 時,會改變文件的修改時間(mtime),同時也會改變文件的狀態時間(ctime),並且它們也完全相同,沒有任何差異。這與使用vim編輯文件時的情況不一樣。
但不管怎麼說,使用 touch -a ,touch -m 以及使用vim對文件進行編輯都是對文件狀態進行修改,所以說 ctime 就會改變。
另外,經過測試,我發現一個有趣的情況,我們來看:
首先我使用vim對mn.txt再次進行編輯:
然後我們使用cat打開這個文件:
使用stat查看文件狀態,並且在之後使用vim打開這個文件,注意:不對其做任何編輯操作,退出,也就是說,我只是使用vim打開看了mn.txt這個文件,而沒有對其進行編輯操作,我們來看看效果:
看到了嗎?使用vim和使用cat打開文件查看內容的效果是不一樣的,使用cat會改變文件的atime,而使用vim查看文件內容是不會改變這個時間戳的。因此,這可以說是一個小小的安全隱患,如果文件權限設置不當就會泄露文件內容,並且不易察覺。
touch -d:後面可以跟一個指定的時間,而不是用目前的時間:
三個時間戳均發生了改變,atime 和 mtime 都變成了兩天前的時間,而ctime 則記錄了當前的時間。
我們也可以使用ll命令(ls -l的別名)來查看:
touch -t:後面也可以跟一個指定的時間,但它有格式限制:[YYMMDDhhmm]
所以說,touch -t和touch -d用法類似,都會改變atime和mtime,並且ctime會記錄atime 和mtime 變化的時間點!
透過touch這條命令,我們可以輕易修改文件的時間戳,並且可以建立空文件!不過,即使我們複製一個文件是,複製所有屬性,也無法複製ctime這個屬性。ctime 記錄的就是這個文件狀態被改變的時間點。但我們平時應該更加關注的是mtime。而使用ll來查看文件的屬性時,所顯示的就是mtime: