在Solaris 8中,当我们访问文件时,访问时间发生变化,但修改时间保持不变。但在 Solaris 10 中,我们看到访问文件时访问时间和修改时间都发生了变化。我们检查了at
,mt
使用truss -v lstat -t lstat ls -l <file>
.
这是 Solaris 10 的行为吗?
答案1
不适用于 UFS 或 ZFS(或任何其他标准文件系统)。您用什么来“访问”该文件?你使用什么文件系统?
$ touch test
$ stat test | grep "^[AM]"
Access: (0644/-rw-r--r--) Uid: ( 101/ matt) Gid: ( 10/ staff)
Access: 2013-02-20 13:04:25.597883067 +0000
Modify: 2013-02-20 13:04:25.597883067 +0000
$ cat test
$ stat test | grep "^[AM]"
Access: (0644/-rw-r--r--) Uid: ( 101/ matt) Gid: ( 10/ staff)
Access: 2013-02-20 13:04:38.117719129 +0000
Modify: 2013-02-20 13:04:25.597883067 +0000
$ echo test > test
$ stat test | grep "^[AM]"
Access: (0644/-rw-r--r--) Uid: ( 101/ matt) Gid: ( 10/ staff)
Access: 2013-02-20 13:04:38.117719129 +0000
Modify: 2013-02-20 13:04:54.739753877 +0000
$ cat test
test
$ stat test | egrep "^[AM]"
Access: (0644/-rw-r--r--) Uid: ( 101/ matt) Gid: ( 10/ staff)
Access: 2013-02-20 13:04:59.629405264 +0000
Modify: 2013-02-20 13:04:54.739753877 +0000
答案2
您所看到的某些事情没有正确完成(人为错误)。一个例子:我用 vi 创建了一个文件,你会看到于 = 公吨:
truss -v lstat -t lstat ls -l count_files.awk
lstat64("count_files.awk", 0xFFBFF5B8) = 0
d=0x04010003 i=58647 m=0100755 l=1 u=0 g=0 sz=674
at = Feb 20 14:05:56 CET 2013 [ 1361365556.951290423 ]
mt = Feb 20 14:05:58 CET 2013 [ 1361365558.532478282 ]
ct = Feb 20 14:05:58 CET 2013 [ 1361365558.532478282 ]
bsz=1024 blks=3 fs=zfs
-rwxr-xr-x 1 root root 674 Feb 20 14:05 count_files.awk
现在我将用 vi 再次打开文件,但退出:q!
请注意at 不等于 mt。
truss -v lstat -t lstat ls -l count_files.awk
lstat64("count_files.awk", 0xFFBFF648) = 0
d=0x04010003 i=58647 m=0100755 l=1 u=0 g=0 sz=674
at = Feb 20 14:07:58 CET 2013 [ 1361365678.550493967 ]
mt = Feb 20 14:05:58 CET 2013 [ 1361365558.532478282 ]
ct = Feb 20 14:05:58 CET 2013 [ 1361365558.532478282 ]
bsz=1024 blks=3 fs=zfs
-rwxr-xr-x 1 root root 674 Feb 20 14:05 count_files.awk
现在让我们进行另一个测试:使用 vi 打开文件并退出,而不是 :q!让我们来做吧:wq! (虽然我们没有改变任何东西,vi仍然会保存文件的内容)
truss -v lstat -t lstat ls -l count_files.awk
lstat64("count_files.awk", 0xFFBFF5F8) = 0
d=0x04010003 i=58647 m=0100755 l=1 u=0 g=0 sz=674
at = Feb 20 14:09:26 CET 2013 [ 1361365766.879205630 ]
mt = Feb 20 14:09:28 CET 2013 [ 1361365768.147368630 ]
ct = Feb 20 14:09:28 CET 2013 [ 1361365768.147368630 ]
bsz=1024 blks=3 fs=zfs
-rwxr-xr-x 1 root root 674 Feb 20 14:09 count_files.awk
据我所知,当读取被调用时,时间会改变,而当写入完成(写入调用)时,时间会被修改。