函数mtime linux 分钟,linux中atime,ctime和mtime的区别详解linux操作系统 -电脑资料

在linux中atime,ctime和mtime这些函数如果一不小心还真可能搞混乱了,下面我来给大家整理一下linux中atime,ctime和mtime函数区别吧,

猜测man手册中应当有这三个时间的相关说明,于是尝试man atime、man st_atime都没有相关文档。后

来想到stat可以查看文件的这三个时间,就用man stat查找,虽然有文档,但是没有这三个时间的相关

说明。正一筹莫展之际,突然想到c语言的stat函数也可以查看文件的状态,立马就用man 2 stat查看手

册,果然找到了,摘抄在这里:

The field st_atime is changed by file accesses, for example, by execve(2), mknod(2),

pipe(2), utime(2) and read(2) (of more than zero bytes). Other routines, like mmap(2), may

or may not update st_atime.

The field st_mtime is changed by file modifications, for example, by mknod(2), truncate(2),

utime(2) and write(2) (of more than zero bytes). Moreover, st_mtime of a directory is

changed by

the creation or deletion of files in that directory. The st_mtime field is not changed for

changes in owner, group, hard link count, or mode.

The field st_ctime is changed by writing or by setting inode information (i.e., owner,

group, link count, mode, etc.).有了英文手册,理解起来就简单些了,从上面分析:

•atime:access time文件被访问的最后时间。

•mtime:modify time文件内容被修改的时间。

•ctime:change time文件的inode内容修改的时间。

这样还是不容易理解,如果从英文解释中的函数来理解就容易分清了。例如atime中有提到execve(2)和

read(2)函数,其实就是表示文件执行和读取时该时间被修改;mtime中的write(2)就表示内容写入时该

时间被修改;ctime中的owner和group表示修改文件所属用户和用户组时该时间被修改。

测试下atime

用c语言编写一个简单的功能,编译成a.out,使用stat命令查看a.out的三个时间值:

$ stat a.out

......

Access: 2013-01-15 10:49:50.032767384 +0800

Modify: 2013-01-15 10:49:50.032767384 +0800

Change: 2013-01-15 10:49:50.032767384 +0800

......然后执行一下这个文件,再次查看:

$ ./a.out

$ stat a.out

......

Access: 2013-01-15 10:52:31.912772564 +0800

Modify: 2013-01-15 10:49:50.032767384 +0800

Change: 2013-01-15 10:49:50.032767384 +0800

......可以发现atime发生了改变,linux中atime,ctime和mtime的区别详解linux操作系统》(https://www.unjs.com)。

测试下mtime

创建一个新文件:

$ echo 'hello' > test.txt

$ stat test.txt

......

Access: 2013-01-15 11:13:43.712813262 +0800

Modify: 2013-01-15 11:13:43.712813262 +0800

Change: 2013-01-15 11:13:43.712813262 +0800

......修改文件:

$ echo 'world' > test.txt

$ stat test.txt

......

Access: 2013-01-15 11:13:43.712813262 +0800

Modify: 2013-01-15 11:13:57.232813694 +0800

Change: 2013-01-15 11:13:57.232813694 +0800

......可以发现mtime和ctime都发现了改变,为什么ctime也会发生改变呢?因为文件的inode内存储了

文件的字节数、文件拥有者的id等文件相关属性,修改了文件内容后,相关文件属性也会被更新,相当

于修改了inode的内容,所以ctime也发生了变化。

另外还有一个疑问:inode也存储了atime、mtime和ctime,那么上例改变atime的时候,inode的内容发

生了变化,为什么ctime没有发生变化呢?非常不解。

测试下ctime

创建新文件ctime.txt

$ echo 'hello' > ctime.txt

$ stat ctime.txt

......

Access: 2013-01-15 11:22:02.908829236 +0800

Modify: 2013-01-15 11:22:02.908829236 +0800

Change: 2013-01-15 11:22:02.908829236 +0800

......修改time.txt的权限

$ chmod 777 ctime.txt

$ stat ctime.txt

......

Access: 2013-01-15 11:22:02.908829236 +0800

Modify: 2013-01-15 11:22:02.908829236 +0800

Change: 2013-01-15 11:22:20.268829792 +0800

......可以发现ctime发生了改变。

小结

这边主要是针对普通文件做了测试,关于目录的问题,和普通文件类似,只是目录本身的内容存储的是

目录下的所有文件的文件名。如果目录内的文件有新建、改名、删除等操作,那么目录本身的内容就会

被修改,可以使用vim查看目录本身存储的内容。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值