<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[linux文件时间知多少？ ]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Wed, 06 Jan 2010 05:10:15 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	在windows下，一个文件有：创建时间、修改时间、访问时间。<br/>而在Linux下，一个文件也有三种时间，分别是：访问时间、修改时间、状态改动时间。<br/><br/>两者有此不同，在Linux下没有创建时间的概念，也就是不能知道文件的建立时间，但如果文件建立后就没有修改过，修改时间=建立时间;如果文件建立后，状态就没有改动过，那么状态改动时间=建立时间;如果文件建立后，没有被读取过，那么访问时间=建立时间，因为不好判断文件是否被改过、读过、其状态是否变过，所以判断文件的建立时间基本上能为不可能。<br/><br/>如何查一个文件的三个时间呢？<br/>先用下面的命令来建立一个文件<br/># date &amp;&amp; echo &quot;this is file be used test time of file&quot; &gt;filetime.txt &amp;&amp; ll --full-time filetime.txt<br/>Tue Aug 4 15:13:44 HKT 2009<br/>-rw-r--r--&nbsp;&nbsp;&nbsp;&nbsp;1 root&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 39 2009-08-04 15:13:44.000000000 +0800 filetime.txt<br/><br/>通过stat filename.txt来查，如：<br/># stat filetime.txt<br/>File: `filetime.txt&#039;<br/>Size: 39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Blocks: 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO Block: 4096&nbsp;&nbsp; Regular File<br/>Device: 802h/2050d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inode: 17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Links: 1&nbsp;&nbsp; <br/>Access: (0644/-rw-r--r--) Uid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)&nbsp;&nbsp; Gid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)<br/>Access: 2009-08-04 15:13:44.000000000 +0800<br/>Modify: 2009-08-04 15:13:44.000000000 +0800<br/>Change: 2009-08-04 15:13:44.000000000 +0800<br/><br/>说明：Access访问时间。Modify修改时间。Change状态改动时间。可以stat *查看这个目录所有文件的状态。<br/>ctime=change time<br/>atime=access time<br/>mtime=modifiy time<br/><br/>因为这是一个新的文件（filetime.txt），没做过内容、属性的更改，也没读过这个文件，所以三者（访问时间、修改时间、状态改动时间）的时间是一致的，这时文件的修改时间与这三个时间是一样的，是没有疑问的。<br/><br/>1、访问时间，读一次这个文件的内容，这个时间就会更新。比如对这个文件运用 more、cat等命令。ls、stat命令都不会修改文件的访问时间。<br/>2、修改时间，修改时间是文件内容最后一次被修改时间。比如：vi后保存文件。ls -l列出的时间就是这个时间。<br/>3、状态改动时间。是该文件的i节点最后一次被修改的时间，通过chmod、chown命令修改一次文件属性，这个时间就会更新。<br/><br/>另个除了可以通过stat来查看文件的mtime,ctime,atime等属性，也可以通过ls命令来查看，具体如下:<br/>ls -lc filename 列出文件的 ctime （最后更改时间）<br/>ls -lu filename 列出文件的 atime（最后存取时间）<br/>ls -l filename 列出文件的 mtime （最后修改时间）<br/><br/>在linux中stat函数中，用st_atime表示文件数据最近的存取时间(last accessed time)；用st_mtime表示文件数据最近的修改时间(last modified time)；使用st_ctime表示文件i节点数据最近的修改时间(last i-node&#039;s status changed time)。<br/><br/>字段&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说明&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例子&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ls(-l)<br/>st_atime 文件数据的最后存取时间&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-u<br/>st_mtime 文件数据的最后修改时间&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; write&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺省<br/>st_ctime 文件数据的最后更改时间&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chown,chmod&nbsp;&nbsp;&nbsp;&nbsp; -c<br/><br/><br/>在linux系统中，系统把文件内容数据与i节点数据是分别存放的，i节点数据存放了文件权限与文件属主之类的数据。<br/><br/>另外，可以格式化输出文件的三种时间，如：<br/>find . -name file -printf &quot;%AY-%Am-%Ad %AH:%AM:%AS&quot;<br/>find . -name file -printf &quot;%TY-%Tm-%Td %TH:%TM:%TS&quot;<br/>find . -name file -printf &quot;%CY-%Cm-%Cd %CH:%CM:%CS&quot;<br/><br/>linux的ctime代表的是文件修改时间，如果文件被修改过就很难知道文件的创建时间，在某些特殊情况下，需要查看文件的创建时间，正常情况下查看文件的ctime是无法实现的。可以使用一个变通的方法来实现保留文件创建时间，但是同时也会牺牲一些其它特性。<br/><br/>可以在mount文件的时候使用参数-o noatime，来把系统更新atime的特性关闭。使用了noatime参数挂载后，在文件被修改后文件的atime是不会被改变的，使用stat查看到的atime就是文件的创建时间。<br/>如：<br/># / sbin/mkfs -t ext3 /dev/ram10<br/># mount -t ext3 -o noatime /dev/loop0 /mnt/foo<br/># mount<br/>/dev/ram10 on /mnt/foo type ext3 (rw,noatime)<br/># cd /mnt/foo<br/># touch filetime1.txt<br/># stat filetime1.txt<br/>File: `filetime1.txt&#039;<br/>Size: 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks: 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO Block: 4096&nbsp;&nbsp; Regular File<br/>Device: 10ah/266d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inode: 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Links: 1&nbsp;&nbsp; <br/>Access: (0644/-rw-r--r--) Uid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)&nbsp;&nbsp; Gid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)<br/>Access: 2009-08-04 20:51:32.000000000 +0800<br/>Modify: 2009-08-04 20:51:32.000000000 +0800<br/>Change: 2009-08-04 20:51:32.000000000 +0800<br/><br/># echo foo.ok &gt;&gt; filetime1.txt<br/>[root@logs-bak foo]# stat filetime1.txt<br/>File: `filetime1.txt&#039;<br/>Size: 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Blocks: 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO Block: 4096&nbsp;&nbsp; Regular File<br/>Device: 10ah/266d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inode: 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Links: 1&nbsp;&nbsp; <br/>Access: (0644/-rw-r--r--) Uid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)&nbsp;&nbsp; Gid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)<br/>Access: 2009-08-04 20:51:32.000000000 +0800<br/>Modify: 2009-08-04 20:53:27.000000000 +0800<br/>Change: 2009-08-04 20:53:27.000000000 +0800<br/><br/># cat filetime1.txt<br/>foo.ok<br/>#stat filetime1.txt<br/>File: `filetime1.txt&#039;<br/>Size: 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Blocks: 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO Block: 4096&nbsp;&nbsp; Regular File<br/>Device: 10ah/266d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inode: 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Links: 1&nbsp;&nbsp; <br/>Access: (0644/-rw-r--r--) Uid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)&nbsp;&nbsp; Gid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)<br/>Access: 2009-08-04 20:51:32.000000000 +0800<br/>Modify: 2009-08-04 20:53:27.000000000 +0800<br/>Change: 2009-08-04 20:53:27.000000000 +0800<br/><br/># 通过以上实验可以看出文件的access time 是不变的。<br/><br/>接着向下多测试一下.<br/># vi filetime1.txt<br/># stat filetime1.txt<br/>File: `filetime1.txt&#039;<br/>Size: 23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Blocks: 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO Block: 4096&nbsp;&nbsp; Regular File<br/>Device: 10ah/266d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inode: 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Links: 1&nbsp;&nbsp; <br/>Access: (0644/-rw-r--r--) Uid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)&nbsp;&nbsp; Gid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)<br/>Access: 2009-08-04 20:55:05.000000000 +0800<br/>Modify: 2009-08-04 20:55:05.000000000 +0800<br/>Change: 2009-08-04 20:55:05.000000000 +0800<br/><br/># chmod 777 filetime1.txt<br/># stat filetime1.txt<br/>File: `filetime1.txt&#039;<br/>Size: 23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Blocks: 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO Block: 4096&nbsp;&nbsp; Regular File<br/>Device: 10ah/266d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inode: 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Links: 1&nbsp;&nbsp; <br/>Access: (0777/-rwxrwxrwx) Uid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)&nbsp;&nbsp; Gid: (&nbsp;&nbsp;&nbsp;&nbsp;0/&nbsp;&nbsp;&nbsp;&nbsp;root)<br/>Access: 2009-08-04 20:55:05.000000000 +0800<br/>Modify: 2009-08-04 20:55:05.000000000 +0800<br/>Change: 2009-08-04 20:57:36.000000000 +0800<br/>可见，chmod后，Ctime的变化。<br/><br/>#########################################################<br/>说到这里，大概大家也对在linux下文件的时间有所了解了吧！<br/>那么以下的操作对文件的时间有什么影响呢？<br/><br/>操作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;atime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctime<br/>----------------------------------------------------------<br/>mv<br/>----------------------------------------------------------<br/>cp<br/>----------------------------------------------------------<br/>touch<br/>----------------------------------------------------------<br/>cat/more/less<br/>----------------------------------------------------------<br/>ls<br/>----------------------------------------------------------<br/>chmod/chown<br/>----------------------------------------------------------<br/>ln<br/>----------------------------------------------------------<br/>echo<br/>----------------------------------------------------------<br/>vi<br/>----------------------------------------------------------<br/>(请大家测试完成这个表吧！！！！做完测试可以给我留言啊！）<br/>##############################################################<br/><br/>另外，从kernel2.6.29开，还默认集成了一个relatime的属性。可能是因为在文件读操作很频繁的系统<br/>中，atime更新所带来的开销很大，所以很多SA都在挂装文件系统的时候使用noatime属性来停止更新atime。但是有些程序需要根据atime进行一些判断和操作，所以Linux就推出了一个relatime特性。<br/>使用这个特性来挂装文件系统后，只有当mtime比atime更新的时候，才会更新atime。事实上，这个时候atime和mtime已经是同一个东西了。所以这个选项就是为了实现对atime的兼容才推出的。并不是一个新的时间属性。使用方法就是通过mount -o relatime /dir来挂装目录。
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] linux文件时间知多少？ ]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>