Linux下檔案的三種時間標記

來源:互聯網
上載者:User


Linux下檔案的三種時間標記 在windows下,一個檔案有:建立時間、修改時間、訪問時間。而在Linux下,一個檔案也有三種時間,分別是:訪問時間、修改時間、狀態改動時間。  www.2cto.com  兩者有此不同,在Linux下沒有建立時間的概念,也就 是不能知道檔案的建立時間,但如果檔案建立後就沒有修改過,修改時間=建立時間;如果檔案建立後,狀態就沒有改動過,那麼狀態改動時間=建立時間;如果文 件建立後,沒有被讀取過,那麼訪問時間=建立時間,因為不好判斷檔案是否被改過、讀過、其狀態是否變過,所以判斷檔案的建立時間基本上能為不可能。 如何查一個檔案的三個時間呢?先用下面的命令來建立一個檔案# date && echo "this is file be used test time of file" >filetime.txt && ll --full-time filetime.txtTue Aug  4 15:13:44 HKT 2009-rw-r--r--    1 root     root           39 2009-08-04 15:13:44.000000000 +0800 filetime.txt 通過stat filename.txt來查,如:# stat filetime.txt   File: `filetime.txt'  Size: 39              Blocks: 8          IO Block: 4096   Regular FileDevice: 802h/2050d      Inode: 17          Links: 1    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2009-08-04 15:13:44.000000000 +0800Modify: 2009-08-04 15:13:44.000000000 +0800Change: 2009-08-04 15:13:44.000000000 +0800 說明:Access訪問時間。Modify修改時間。Change狀態改動時間。可以stat *查看這個目錄所有檔案的狀態。ctime=change timeatime=access timemtime=modifiy time 因為這是一個新的檔案(filetime.txt),沒做過內容、屬性的更改,也沒讀過這個檔案,所以三者(訪問時間、修改時間、狀態改動時間)的時間是一致的,這時檔案的修改時間與這三個時間是一樣的,是沒有疑問的。 1、訪問時間,讀一次這個檔案的內容,這個時間就會更新。比如對這個檔案運用 more、cat等命令。ls、stat命令都不會修改檔案的訪問時間。2、修改時間,修改時間是檔案內容最後一次被修改時間。比如:vi後儲存檔案。ls -l列出的時間就是這個時間。3、狀態改動時間。是該檔案的i節點最後一次被修改的時間,通過chmod、chown命令修改一次檔案屬性,這個時間就會更新。 另個除了可以通過stat來查看檔案的mtime,ctime,atime等屬性,也可以通過ls命令來查看,具體如下:ls -lc filename 列出檔案的 ctime (最後更改時間)ls -lu filename 列出檔案的 atime(最後存取時間)ls -l filename 列出檔案的 mtime (最後修改時間) 在linux中stat函數中,用st_atime表示檔案資料最近的存取時間(last accessed time);用st_mtime表示檔案資料最近的修改時間(last modified time);使用st_ctime表示檔案i節點資料最近的修改時間(last i-node's status changed time)。  欄位           說明                  例子           ls(-l) st_atime  檔案資料的最後存取時間       read            -u st_mtime  檔案資料的最後修改時間       write           預設 st_ctime  檔案資料的最後更改時間       chown,chmod     -c 在linux系統中,系統把檔案內容資料與i節點資料是分別存放的,i節點資料存放了檔案許可權與檔案屬主之類的資料。 另外,可以格式化輸出檔案的三種時間,如:find . -name file -printf "%AY-%Am-%Ad %AH:%AM:%AS"find . -name file -printf "%TY-%Tm-%Td %TH:%TM:%TS"find . -name file -printf "%CY-%Cm-%Cd %CH:%CM:%CS" linux的ctime代表的是檔案修改時間,如果檔案被修改過就很難知道檔案的建立時間,在某些特殊情況下,需要查看檔案的建立時間,正常情況下查看檔案的ctime是無法實現的。可以使用一個變通的方法來實現保留檔案建立時間,但是同時也會犧牲一些其它特性。 可以在mount檔案的時候使用參數-o noatime,來把系統更新atime的特性關閉。使用了noatime參數掛載後,在檔案被修改後檔案的atime是不會被改變的,使用stat查看到的atime就是檔案的建立時間。如:# / sbin/mkfs -t ext3 /dev/ram10# mount -t ext3 -o noatime /dev/loop0 /mnt/foo# mount/dev/ram10 on /mnt/foo type ext3 (rw,noatime)# cd /mnt/foo# touch filetime1.txt# stat filetime1.txt   File: `filetime1.txt'  Size: 0               Blocks: 0          IO Block: 4096   Regular FileDevice: 10ah/266d       Inode: 12          Links: 1    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2009-08-04 20:51:32.000000000 +0800Modify: 2009-08-04 20:51:32.000000000 +0800Change: 2009-08-04 20:51:32.000000000 +0800 # echo foo.ok >> filetime1.txt [root@logs-bak foo]# stat filetime1.txt   File: `filetime1.txt'  Size: 14              Blocks: 2          IO Block: 4096   Regular FileDevice: 10ah/266d       Inode: 12          Links: 1    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2009-08-04 20:51:32.000000000 +0800Modify: 2009-08-04 20:53:27.000000000 +0800Change: 2009-08-04 20:53:27.000000000 +0800 # cat filetime1.txt   foo.ok#stat filetime1.txt   File: `filetime1.txt'  Size: 14              Blocks: 2          IO Block: 4096   Regular FileDevice: 10ah/266d       Inode: 12          Links: 1    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2009-08-04 20:51:32.000000000 +0800Modify: 2009-08-04 20:53:27.000000000 +0800Change: 2009-08-04 20:53:27.000000000 +0800 # 通過以上實驗可以看出檔案的access time 是不變的。 接著向下多測試一下.# vi filetime1.txt# stat filetime1.txt   File: `filetime1.txt'  Size: 23              Blocks: 2          IO Block: 4096   Regular FileDevice: 10ah/266d       Inode: 14          Links: 1    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2009-08-04 20:55:05.000000000 +0800Modify: 2009-08-04 20:55:05.000000000 +0800Change: 2009-08-04 20:55:05.000000000 +0800 # chmod 777 filetime1.txt # stat filetime1.txt   File: `filetime1.txt'  Size: 23              Blocks: 2          IO Block: 4096   Regular FileDevice: 10ah/266d       Inode: 14          Links: 1    Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2009-08-04 20:55:05.000000000 +0800Modify: 2009-08-04 20:55:05.000000000 +0800Change: 2009-08-04 20:57:36.000000000 +0800可見,chmod後,Ctime的變化。############################################################## 另外,從kernel2.6.29開,還預設整合了一個relatime的屬性。可能是因為在檔案讀操作很頻繁的系統中,atime更新所帶來的開銷很大,所以很多SA都在掛裝檔案系統的時候使用noatime屬性來停止更新atime。但是有些程式需要根據atime進行一些判斷和操作,所以Linux就推出了一個relatime特性。使 用這個特性來掛裝檔案系統後,只有當mtime比atime更新的時候,才會更新atime。事實上,這個時候atime和mtime已經是同一個東西 了。所以這個選項就是為了實現對atime的相容才推出的。並不是一個新的時間屬性。使用方法就是通過mount -o relatime /dir來掛裝目錄。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.