查看文件時間戳命令:stat awk.txt
File: `awk.txt'
Size: 20 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 380730 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-04-26 01:50:44.000000000 +0800
Modify: 2008-04-26 01:48:18.000000000 +0800
Change: 2008-04-26 01:48:18.000000000 +0800node
說明:Access訪問時間。Modify修改時間。Change狀態改變時間。能夠stat *查看這個目錄全部文件的狀態。
如今是要過濾出Modify的時間戳,並以yyyyMMddHHSS格式保存,則能夠利用下面這條命令:
stat awk.txt | grep -i Modify | awk -F. '{print $1}' | awk '{print $2$3}'| awk -F- '{print $1$2$3}' | awk -F: '{print $1$2$3}'
輸出結果:20080426014818linux
修改文件時間與建立新文件:touchshell
在介紹ls命令時,提到每一個文件在Linux下面都會記錄3個主要的修改時間:
• modification time(mtime,修改時間):當該文件的「內容數據」更改時,就會更新這個時間。內容數據指的是文件的內容,而不是文件的屬性。
• status time(ctime,狀態時間):當該文件的」狀態(status)」改變時,就會更新這個時間,舉例來講,更改了權限與屬性,就會更新這個時間。
• access time(atime,存取時間):當「取用文件內容」時,就會更新這個讀取時間。舉例來講,使用cat去讀取 ~/.bashrc,就會更新atime了。
舉例來講,咱們來看一看/etc/man.config文件的時間。bash
[root@linux ~]# ls -l /etc/man.config
-rw-r--r-- 1 root root 4506 Apr 8 19:11 /etc/man.config
[root@linux ~]# ls -l --time=atime /etc/man.config
-rw-r--r-- 1 root root 4506 Jul 19 17:53 /etc/man.config
[root@linux ~]# ls -l --time=ctime /etc/man.config
-rw-r--r-- 1 root root 4506 Jun 25 08:28 /etc/man.config
看到了嗎?在默認的狀況下,ls顯示的是該文件的mtime,也就是這個文件的內容上次更改的時間。個人系統是在6/25安裝的,所以,這個文件產生但狀態更改的時間就回溯到那個時間點。由於剛纔的範例中使用到這個文件,因此,它的atime就會變成剛剛使用的時間了。io
文件的時間很重要,由於若是誤判文件時間,可能會形成某些程序沒法順利運行。那麼,萬一我發現了一個文件來自未來(不少時候會有這個問題的。咱們在安裝的時候,提到的GMT時間就是那個意思),該如何讓該文件的時間變成「如今」的時刻呢?很簡單,用touch命令便可。test
[root@linux ~]# touch [-acdmt] 文件
參數:
-a : 僅修改access time。
-c : 僅修改時間,而不創建文件。
-d : 後面能夠接日期,也可使用 --date="日期或時間"
-m : 僅修改mtime。
-t : 後面能夠接時間,格式爲 [YYMMDDhhmm]
範例:
範例一:新建一個空的文件。
[root@linux ~]# cd /tmp
[root@linux tmp]# touch testtouch
[root@linux tmp]# ls -l testtouch
-rw-r--r-- 1 root root 0 Jul 19 20:49 testtouch
# 注意,這個文件的大小是0。在默認的狀態下,若是touch後面接文件,
# 則該文件的3個時間(atime/ctime/mtime)都會更新爲當前時間。若該文件不存在,
# 則會主動創建一個新的空文件。例如上面這個例子。
範例二:將 ~/.bashrc複製成爲bashrc,假設複製徹底的屬性,檢查其日期。
[root@linux tmp]# cp ~/.bashrc bashrc
[root@linux tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rwxr-xr-x 1 root root 395 Jul 4 11:45 bashrc <==這是mtime
-rwxr-xr-x 1 root root 395 Jul 19 20:44 bashrc <==這是atime
-rwxr-xr-x 1 root root 395 Jul 19 20:53 bashrc <==這是ctime
# 在這個案例中,咱們使用了 ; 命令分隔符,它的用法咱們會在Bash shell中提到。
# 此外,ll是ls -l的命令別名,這個也會在bash shell中再次說起,
# 當前能夠簡單地想成,ll就是ls -l的簡寫。至於 ; 則是同時發出兩個命令,
# 且讓兩個命令「按順序」執行的意思。上面的結果中能夠看到,該文件更改的日期
# Jul 4 11:45,可是atime與ctime不同。
範例三:修改案例二的bashrc文件,將日期調整爲兩天前。
[root@linux tmp]# touch -d "2 days ago" bashrc
[root@linux tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rwxr-xr-x 1 root root 395 Jul 17 21:02 bashrc
-rwxr-xr-x 1 root root 395 Jul 17 21:02 bashrc
-rwxr-xr-x 1 root root 395 Jul 19 21:02 bashrc
# 與上一個範例比較,原本是19日的變成了17日了(atime/mtime)。
# 不過,ctime並無跟着改變。
範例四:將上個範例的bashrc日期改成2005/07/15 2:02。
[root@linux tmp]# touch -t 0507150202 bashrc
[root@linux tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rwxr-xr-x 1 root root 395 Jul 15 02:02 bashrc
-rwxr-xr-x 1 root root 395 Jul 15 02:02 bashrc
-rwxr-xr-x 1 root root 395 Jul 19 21:05 bashrc
# 注意,日期在atime與mtime都改變了,但ctime則是記錄當前的時間。
經過touch命令,能夠輕鬆地修改文件的日期與時間。而且,也能夠創建一個空文件。不過,要注意的是,即便複製一個文件,複製全部屬性,但也沒有辦法復 制ctime屬性。ctime能夠記錄文件最近改變狀態(status)的時間。不管如何,仍是要說明一下,咱們平時看的文件屬性中,比較重要的仍是 mtime。咱們關心的經常是這個文件的「內容」是何時更改的。
touch這個命令最經常使用的狀況是:
• 創建一個空文件。
• 將某個文件日期修改成當前日期(mtime與atime)。awk
與文件相關的幾個時間:date
一、訪問時間,讀一次這個文件的內容,這個時間就會更新。好比對這個文件使用more命令。ls、stat命令都不會修改文件的訪問時間。file
二、修改時間,對文件內容修改一次,這個時間就會更新。好比:vi後保存文件。ls -l列出的時間就是這個時間。權限
三、狀態改變時間。經過chmod命令更改一次文件屬性,這個時間就會更新。查看文件的詳細的狀態、準確的修改時間等,能夠經過stat命令 文件名。