linux系统中档案的modify time和change time的理解和学习

本文详细解释了Linux文件系统的三个时间属性:访问时间(accesstime)、修改时间(modifytime)及更改时间(changetime)。并通过具体示例演示了不同操作如何影响这些时间戳的变化。

先看一下,档案的属性中有三个时间:access time,modify time以及change time。
其中access time很好理解,但是modify time和change time这两个时间却困惑了我好久。
所以还是决定查资料学习,否则睡不着觉。

1. 刚创建文件时,access time、modify time和change time是相同的。
sh-3.2# cp /etc/passwd /tmp/
sh-3.2# stat /tmp/passwd
  File: "/tmp/passwd"
  Size: 31              Blocks: 8          IO Block: 4096   regular file
Device: eh/14d  Inode: 7633        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 1970-01-01 00:05:51.000000000
Modify: 1970-01-01 00:05:51.000000000
Change: 1970-01-01 00:05:51.000000000

sh-3.2#

2. 修改/tmp/passwd档案内容后,此时access time已经和modify time和change time不一样了。
这是因为使用vi命令打开文件内容时,access time就已经变化了;
而紧接着修改了文件内容并保存,所以才会看到access time要比modify time和change time要早。
sh-3.2# stat /tmp/passwd
  File: "/tmp/passwd"
  Size: 36              Blocks: 8          IO Block: 4096   regular file
Device: eh/14d  Inode: 7633        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 1970-01-01 00:07:25.000000000
Modify: 1970-01-01 00:07:35.000000000
Change: 1970-01-01 00:07:35.000000000

sh-3.2#

3. 什么都不做,过了一会之后,使用stat命令查看结果依然一样,
sh-3.2# date
Thu Jan  1 00:09:47 UTC 1970
sh-3.2#
sh-3.2# stat /tmp/passwd
  File: "/tmp/passwd"
  Size: 36              Blocks: 8          IO Block: 4096   regular file
Device: eh/14d  Inode: 7633        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 1970-01-01 00:07:25.000000000
Modify: 1970-01-01 00:07:35.000000000
Change: 1970-01-01 00:07:35.000000000

sh-3.2#

4. 使用cat命令查看档案内容,再使用stat命令查看,可以看到此时access time又改变了。
sh-3.2# cat /tmp/passwd
root:x:0:0:root:/home:/bin/sh
ooxx
sh-3.2#
sh-3.2# stat /tmp/passwd
  File: "/tmp/passwd"
  Size: 36              Blocks: 8          IO Block: 4096   regular file
Device: eh/14d  Inode: 7633        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 1970-01-01 00:12:00.000000000
Modify: 1970-01-01 00:07:35.000000000
Change: 1970-01-01 00:07:35.000000000

sh-3.2#

讲到现在,仍然没有讲到modify time和change time。
linux文件系统ext2,它有两部分组成:
一个是inode,存放在inode区,用来记录文件的一些属性相关的信息;
一个是文件实际的内容,它存放在block区域。
所以,
如果档案的inode发生了变化,那么change time就会被修改;
如果档案的内容发生了变化,那么modify time就会被修改。
其中modify time也叫时间戳(timestamp)。

5. 以下我们通过chmod命令修改文件的权限,再去用stat命令查看,
可以看到change time发生了改变,但是modify time仍然没变。
原因是因为chmod命令也改变了权限,实际上就是只修改了inode信息,并没有修改到文件的内容。
sh-3.2# ls -lh /tmp/passwd
-rw-r--r-- 1 root root 36 Jan  1 00:16 /tmp/passwd
sh-3.2#
sh-3.2# chmod 755 /tmp/passwd
sh-3.2# ls -lh /tmp/passwd
-rwxr-xr-x 1 root root 36 Jan  1 00:16 /tmp/passwd
sh-3.2#
sh-3.2# stat /tmp/passwd
  File: "/tmp/passwd"
  Size: 36              Blocks: 8          IO Block: 4096   regular file
Device: eh/14d  Inode: 7633        Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 1970-01-01 00:12:00.000000000
Modify: 1970-01-01 00:16:06.000000000
Change: 1970-01-01 00:36:21.000000000

sh-3.2#

6. 如果去修改了文件的内容,再去使用stat命令查看,
可以看到modify time和change time都发生了变化。
原因是改变文件内容的同时,文件的inode信息也会需要去做相应的修改,
比如文件的size发生了变化。
那如何做到只修改modify time而不改变change time呢?
通过查资料,发现touch -m可以用来只修改档案的modify time,
但是经过测试发现并没有得到期望的结果。
这难道是touch命令的-m选项执行有问题?
sh-3.2# stat /tmp/passwd
  File: "/tmp/passwd"
  Size: 36              Blocks: 8          IO Block: 4096   regular file
Device: eh/14d  Inode: 7633        Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 1970-01-01 00:12:00.000000000
Modify: 1970-01-01 00:16:06.000000000
Change: 1970-01-01 00:36:21.000000000

sh-3.2#
sh-3.2# touch -m /tmp/passwd
sh-3.2# stat /tmp/passwd
  File: "/tmp/passwd"
  Size: 36              Blocks: 8          IO Block: 4096   regular file
Device: eh/14d  Inode: 7633        Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 1970-01-01 00:12:00.000000000
Modify: 1970-01-01 00:46:17.000000000
Change: 1970-01-01 00:46:17.000000000

sh-3.2#

待确认问题:
touch -m修改档案的modify time,为什么change time也跟着发生了变化?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值