日期:2014-05-16  浏览次数:20683 次

linux stat命令、inode内容--ctime,mtime,atime的区别
1、[root@localhost tmp]# stat 1.txt 
  File: `1.txt'
  Size: 8               Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 196617      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-10-20 21:43:54.000000000 +0800
Modify: 2013-10-20 21:35:42.000000000 +0800
Change: 2013-10-20 21:35:42.000000000 +0800


2、stat显示出inode的内容--inode包含文件的元信息,具体来说有以下内容:
  * 文件的字节数
  * 文件拥有者的User ID
  * 文件的Group ID
  * 文件的读、写、执行权限
  * 文件的时间戳,共有三个
  * 链接数,即有多少文件名指向这个inode
  * 文件数据block的位置


3、IO Block:逻辑块的大小为4096个字节
    Blocks:物理最小块是512,而IO Block为4096,所以这里就占用了8个物理块的意思
    Access:atime
    Modify:mtime,修改时间,注意这个不是建立时间,m不是make的意思
    Change:ctime,改变时间


4、通过ls怎么查询这三个时间?
    ls -lc filename         列出文件的 ctime
    ls -lu filename         列出文件的 atime
    ls -l filename          列出文件的 mtime --ll默认显示的就是这个时间


5、这三个时间不好区别,但必须区别好,因为很多应用会考虑到这些时间,比如在做同步备份时,会判断时间,大于上次备份时间的文件要再次同步等,或在查找文件何时变化,何时被黑客入侵,都会用到这个。
    atime:访问时间,读取文件或者执行文件时会更改,命令如cat,vi
    mtime:修改时间,文件的内容被改变时,就会更改,如vi
    ctime:改变时间,文件的标签如属性、用户、用户组、权限、内容等被改变时,就会更改,如chmod,chown,vi


6、文件的时间戳(timestamp)是inode的内容之一,从inode来理解:ctime指inode上一次改变的时间,mtime指文件内容上一次修改的时间,atime指文件上一次打开的时间。


7、atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息,就是不想filesystem做太多的修改,而改善读取效能。