一天一点学习Linux之atime,mtime,ctime

2011年02月12日 Linux基础 评论 8 条 阅读 15,873 views 次

其实这个内容本不想拿出来单独讲的,但考虑到一些朋友可能对这三个时间不是很明白,所以就和大家再一起来学习一下。

在Linux系统下,文件的时间有三种记录方式

mtime (modification time ):在写入文件时随文件内容的更改而更改的时间。我们用ls -l看到的时间,就是mtime
ctime (status time):是在写入文件、更改所有者、权限或链接设置时随Inode的内容更改而更改的时间。相当于ls -l --time=ctime所看到的时间
atime (access time):读取文件或者执行文件时更改的时间。也就是用ls -l --time=atime看到的时间

可以通过下面的三个例子对比来研究
ls -l install.log; ll --time=ctime install.log; ll --time=atime install.log
具体的内容就不在这里讲述了,大家仔细理解,我想没有什么难度的。
正是由于这些时间的关系,有可能某个文件的时间与目前系统的时间有差距。因为全世界的时间是不一样的。
上面三个时间定义也很简单,关键是要理解,加深理解的办法就是自己实践。OK,下面我们来给大家介绍个touch命令,他作用就是用来"改变文件或目录时间命令"。

改变文件或目录时间命令 touch

参数说明
-a :修改atime
-m :修改mtime
-c :仅修改文件的时间(三个时间一起修改),若该文件不存在则不建立新的文件
-d :后面可以接想修改的日期而不用目前的日期,也可以使用 --date="日期或时间"
-t :后面可以接想修改是时间而不用目前的时间,格式为[YYMMDDhhmm]

我们来看个例子
[root@yufei ~]# ls -l install.log; ll --time=ctime install.log; ll --time=atime install.log
-rwxr--r--. 1 root root 31537 Jan 20 05:09 install.log
-rwxr--r--. 1 root root 31537 Feb 9 19:25 install.log
-rwxr--r--. 1 root root 31537 Feb 11 16:28 install.log
[root@yufei ~]# touch -c install.log
[root@yufei ~]# ls -l install.log; ll --time=ctime install.log; ll --time=atime install.log
-rwxr--r--. 1 root root 31537 Feb 11 20:38 install.log
-rwxr--r--. 1 root root 31537 Feb 11 20:38 install.log
-rwxr--r--. 1 root root 31537 Feb 11 20:38 install.log

在预设的状态下,如果touch后面有接文件,则该文件的三个时间(atime/ctime/mtime)都会更新为目前的时间。若该文件不存在,则会主动的建立一个新的空的文件,与-c参数不同,-c不创建文件哦!这个可以自己touch一个文件出来看一下。

我们再来看一个例子
[root@yufei ~]# cp -a /etc/profile ./
[root@yufei ~]# ls -l profile; ls -l --time=atime profile; ls -l --time=ctime profile
-rw-r--r--. 1 root root 1459 Jun 30 2010 profile
-rw-r--r--. 1 root root 1459 Feb 11 10:51 profile
-rw-r--r--. 1 root root 1459 Feb 11 20:46 profile

第一行为此文件的mtime,也就是这个文件创建或编辑的时间
第二行为此文件的atime,这个时间是记录此文件的最后访问时间
第三行为此文件的ctime,因为这个文件是刚复制过来的,此文件的I节点与原文件肯定不一样了
[root@yufei ~]# ls -li /etc/profile;ls -li profile
651556 -rw-r--r--. 1 root root 1459 Jun 30 2010 /etc/profile
522034 -rw-r--r--. 1 root root 1459 Jun 30 2010 profile

希望通过上面的讲解,大家能对这三个时间能明白了。
从上面的例子我们可以看出,即使我们复制一个文件时,复制所有的属性,但也没有办法复制ctime这个属性的。ctime可以记录这个文件最近的状态(status)被改变的时间。

如果想改变时间,我们可以通过下面的方法来实现
如将刚才的文件,日期和时间改成"2010/11/22 8:08"
[root@yufei ~]# touch -t 1011220808 profile
[root@yufei ~]# ls -l profile; ls -l --time=atime profile; ls -l --time=ctime profile
-rw-r--r--. 1 root root 1459 Nov 22 08:08 profile
-rw-r--r--. 1 root root 1459 Nov 22 08:08 profile
-rw-r--r--. 1 root root 1459 Feb 11 21:02 profile

我们看到atime与mtime都改变了,但ctime则是记录的是系统目前的时间。

讲了这么多,其实touth常用的功能就只有两个
1、创建一个空的文件
2、修改时间(mtime atime)不过,这个功能用到的也不多

希望通过上面的讲解,大家能对这三个时间能有个深刻的理解了。

本文关键字:一天一点,学习Linux,RHEL6,mtime,atime,ctime

8 条留言  访客:4 条  博主:4 条

  1. 我也跟着博主一天天学吧,不过现在每天晚上10点才下班,还真没什么时间学了!

  2. avatar 天堂之光

    [root@yufei ~]# cp -a /etc/profile ./
    [root@yufei ~]# ls -l profile; ls -l –time=atime profile; ls -l –time=ctime profile
    -rw-r–r–. 1 root root 1459 Jun 30 2010 profile
    -rw-r–r–. 1 root root 1459 Feb 11 10:51 profile
    -rw-r–r–. 1 root root 1459 Feb 11 20:46 profile
    这个时间的解释我觉得不对
    我的系统RHEL6
    [root@server1 ~]# ls -l /etc/profile; ls -l –time=atime /etc/profile; ls -l –time=ctime /etc/profile
    -rw-r–r–. 1 root root 1459 Jun 30 2010 /etc/profile
    -rw-r–r–. 1 root root 1459 Feb 12 15:55 /etc/profile
    -rw-r–r–. 1 root root 1459 Feb 10 11:49 /etc/profile
    第一行你说是系统安装时间,我是11年2月10日安装的,可是这里显示10年6月30
    第二行的atime你说是访问时间也就是系统启动时的时间也不对,我的系统晚上9点多重启了3次

    • mtime是最后编辑/修改文件的时间。系统安装的时候肯定是有个时间的,但是不能保证他就是最后修改这个文件的时间。
      atime是最后的访问时间。系统启动后, /etc/profile这个文件也是会被访问的。
      另外,说明一下,/etc/profile这个文件很诡异,所以,最好不要用此文件来实验!

  3. avatar 天堂之光

    所以我认为第一行的mtime,也就是这个编辑过的时间,如果没有编辑过的,就是系统开发人员最后修改的时间,楼主认为然否?
    还有一点就是linux的文件没有创建时间的概念,如果文件创建后状态没有改变过那么状态改变时间=创建时间

    • 对的,其实不能说是安装系统的时间,应该说是某个系统打包后的时间,也就相当于系统出厂的时间。

  4. atime是linux通过命令或脚本等其他方式读取/访问的时间
    ctime是修改了文件属性和权限之内的东东的时间
    mtime是最后修改文件内容的时间
    如果没有修改权限,ctime时间和mtime时间一样
    我用touch h.txt在/home/用户名下建立文件测试的
    如有错误 请指正

给我留言

Copyright © 羽飞博客 保留所有权利.   Ality主题 皖ICP备14013844号-1

用户登录