Linux文件的三种时间属性

一、Linux文件时间属性的分类
我们在用windows系统时,在查看磁盘文件时,经常会看到文件或目录的后面有一个时间信息,这个是文件在磁盘上别创建的时间。其实,在windows系统中,文件还有文件的修改时间、访问时间两个时间属性。

在linux系统中,文件同样有时间属性,不过Linux文件的时间属性与windows略有不同,它的时间属性分为;
1、访问时间(atime->access time):读一次这个文件的内容,这个时间就会更新。比如对这个文件运用 more、cat等命令。ls、stat命令都不会修改文件的访问时间。
2、修改时间(mtime->modifiy time):修改时间是文件内容最后一次被修改时间。比如:vi后保存文件。ls -l列出的时间就是这个时间。
3、状态改动时间(ctime->change time):ctime是在写入文件、更改所有者、权限或链接设置时随i节点的内容更改而更改的,是该文件的i节点最后一次被修改的时间,通过chmod、chown命令修改一次文件属性,这个时间就会更新。
在Linux中,文件的时间属性通过一个struct来表示。如下:

  1 struct stat
  2 {
  3     dev_t st_dev;    /* device inode resides on */
  4     ino_t st_ino;    /* inode's number */
  5     mode_t st_mode;  /* inode's mode */
  6     nlink_t st_nlink;  /* number of hard links to the file */
  7     uid_t st_uid;    /* user ID of owner */
  8     gid_t st_gid;    /* group ID of owner */
  9     dev_t st_rdev;  /* device type, for special file inode */
 10     struct timespec st_atimespec;  /* time of last access */
 11     struct timespec st_mtimespec;  /* time of last data modification */
 12     struct timespec st_ctimespec;  /* time of last file status change */
 13     off_t st_size;  /* file size, in bytes */
 14     int64_t st_blocks; /* blocks allocated for file */
 15     u_int32_t  st_blksize;/* optimal file sys I/O ops blocksize */
 16     u_int32_t  st_flags;  /* user defined flags for file */
 17     u_int32_t  st_gen;    /* file generation number */
 18 }; 

二、Linux文件属性的查看方法
1、ls命令簇
1)ls -lc filename 列出文件的 ctime (最后状态更改时间)
2)ls -lu filename 列出文件的 atime(最后访问时间)
3)ls -l filename 列出文件的 mtime (最后修改时间)

注:以下每幅图片修改前的时间为上一幅图的中时间。
例如:
Linux文件的三种时间属性_第1张图片
因为文件刚刚别创建,没有进行任何的改动,所以这儿看到的ctime、atime、mtime是相同的。
Linux文件的三种时间属性_第2张图片
当我用vim向file文件里写入了一些东西后,ctime、atime、mtime全都发生了改变,因为要向file文件里写入东西,那么必须要访问文件file,所以atime会改变,因为改变了文件file的内容,所以ctime、mtime会改变。
Linux文件的三种时间属性_第3张图片
当我用chmod改变文件file的权限后,因为修改了文件权限,所以ctime肯定会改变,而修改文件权限肯定需要访问文件,所以atime被改变,但文件的内容没有被修改,那么文件的mtime不会改变。

2、stat命令
stat命令可以一次性更精确的看到文件的三种时间属性。
Linux文件的三种时间属性_第4张图片

三、总结
操作对三种时间属性的影响:
1、cat、less等只访问文件,不修改文件的操作,只会修改atime的值。
2、chmod、chown等修改文件权限、所有者等的操作,会修改atime和ctime的值。
3、vim、emacs等修改文件内容的操作,会修改atime、ctime、mtime的值。

你可能感兴趣的:(Linux基础)