一、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 stat2 {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 (最后修改时间)
注:以下每幅图片修改前的时间为上一幅图的中时间。
例如:
因为文件刚刚别创建,没有进行任何的改动,所以这儿看到的ctime、atime、mtime是相同的。
当我用vim向file文件里写入了一些东西后,ctime、atime、mtime全都发生了改变,因为要向file文件里写入东西,那么必须要访问文件file,所以atime会改变,因为改变了文件file的内容,所以ctime、mtime会改变。
当我用chmod改变文件file的权限后,因为修改了文件权限,所以ctime肯定会改变,而修改文件权限肯定需要访问文件,所以atime被改变,但文件的内容没有被修改,那么文件的mtime不会改变。
2、stat命令
stat命令可以一次性更精确的看到文件的三种时间属性。
三、总结
操作对三种时间属性的影响:
1、cat、less等只访问文件,不修改文件的操作,只会修改atime的值。
2、chmod、chown等修改文件权限、所有者等的操作,会修改atime和ctime的值。
3、vim、emacs等修改文件内容的操作,会修改atime、ctime、mtime的值。