首页 » 信息技术 »

atime,mtime,ctime分别是什么?

2019年6月21日 / 58次阅读
Linux

系统中的每份文件,以及文件夹,都有三个时间属性,分别是atime,mtime,ctime,本文对这三个时间属性做点介绍。

atime,就是(last)access time,代表的是最后一次对文件的访问时间。当对文件进行read之类的系统调用的时候,这个时间会被更新。

mtime,就是(last)modified time,代表的是文件最后一次被修改的时间。这个比较容易理解。

ctime,就是(last)changed time,这个属性与平台相关,在Linux系统中,ctime表示是最后一次文件的metadata被修改的时间,而在Win系统中,就是文件的初始创建的时间。

啥是文件的metadata?

系统中有一个结构体来保存文件除内容外的各种信息,如下:

struct stat {
           dev_t     st_dev;     /* ID of device containing file */
           ino_t     st_ino;     /* inode number */
           mode_t    st_mode;    /* protection */
           nlink_t   st_nlink;   /* number of hard links */
           uid_t     st_uid;     /* user ID of owner */
           gid_t     st_gid;     /* group ID of owner */
           dev_t     st_rdev;    /* device ID (if special file) */
           off_t     st_size;    /* total size, in bytes */
           blksize_t st_blksize; /* blocksize for file system I/O */
           blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
           time_t    st_atime;   /* time of last access */
           time_t    st_mtime;   /* time of last modification */
           time_t    st_ctime;   /* time of last status change */
       };

这些状态信息,除了几个time_t变量之外,都输入metadata。

在Linux系统中,这些信息被改变,ctime被刷新。

Win系统中查看这些时间信息

面对文件点击右键:

文件的atime,mtime,ctime

文件的atime,mtime,ctime

如果在Win系统中,对着文件夹点右键,只能看到一个创建时间。

Linux系统查看文件或文件夹的时间属性

我们可以使用stat命令来查看文件或文件夹的时间属性。

xinlin@ubuntu:~/repos$ stat sendslip/
File: sendslip/
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 801h/2049d Inode: 1049112 Links: 3
Access: (0755/drwxr-xr-x) Uid: ( 1000/ xinlin) Gid: ( 1000/ xinlin)
Access: 2019-06-20 11:38:07.813409404 +0800
Modify: 2019-06-17 15:36:33.275792599 +0800
Change: 2019-06-17 15:36:33.275792599 +0800
Birth: -

再来一个查看文件的:

xinlin@ubuntu:~/repos/sendslip$ stat sendslip.py
File: sendslip.py
Size: 8310 Blocks: 24 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1049766 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ xinlin) Gid: ( 1000/ xinlin)
Access: 2019-06-20 11:38:10.557378093 +0800
Modify: 2019-06-17 15:30:34.357096731 +0800
Change: 2019-06-17 15:30:34.357096731 +0800
Birth: -

扩展知识:
从kernel2.6.29开,还默认集成了一个relatime的属性。可能是因为在文件读操作很频繁的系统中,atime更新所带来的开销很大,所以很多SA都在挂装文件系统的时候使用noatime属性来停止更新atime。但是有些程序需要根据atime进行一些判断和操作,所以Linux就推出了一个relatime特性。使用这个特性来挂装文件系统后,只有当mtime比atime更新的时候,才会更新atime。事实上,这个时候atime和mtime已经是同一个东西了。所以这个选项就是为了实现对atime的兼容才推出的。并不是一个新的时间属性。使用方法就是通过mount -o relatime /dir来挂装目录.

atime这个属性有些鸡肋,好多人做系统优化,都会考虑关闭atime的修改来提高磁盘性能。

在Linux系统中修改文件的时间,使用touch命令。

xinlin@ubuntu:~/test$ stat a.txt
File: a.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 2101167 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ xinlin) Gid: ( 1000/ xinlin)
Access: 2019-06-21 14:32:57.765544292 +0800
Modify: 2019-06-21 14:32:57.765544292 +0800
Change: 2019-06-21 14:32:57.765544292 +0800
Birth: -
xinlin@ubuntu:~/test$ touch -t 1802211010 a.txt
xinlin@ubuntu:~/test$ ll
total 8
drwxr-xr-x 2 xinlin xinlin 4096 Jun 21 14:32 ./
drwxr-xr-x 18 xinlin xinlin 4096 Jun 21 14:32 ../
-rw-r--r-- 1 xinlin xinlin 0 Feb 21 2018 a.txt
xinlin@ubuntu:~/test$ stat a.txt
File: a.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 2101167 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ xinlin) Gid: ( 1000/ xinlin)
Access: 2018-02-21 10:10:00.000000000 +0800
Modify: 2018-02-21 10:10:00.000000000 +0800
Change: 2019-06-21 14:34:18.552657232 +0800
Birth: -

使用touch -t后,a.txt文件的atime和mtime被修改,ctime变成了修改的时刻。

以上就是对文件的atime,mtime,ctime这三个时间的简单介绍。

本文链接:https://www.maixj.net/ict/atime-mtime-ctime-21782

相关文章

留言区


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top