先看一下,档案的属性中有三个时间: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也跟着发生了变化?