在讲解之前先了解索引节点inode包含什么。

我们知道,在Linux中使用stat filename 后会显示 该文件详细信息。该信息保存在一个名为“索引节点”的区域,叫做inode。

inode包含文件的信息:

文件的字节数;

文件数据block的位置;

文件的读、写、执行权限;

文件拥有者的ID;

文件的Group ID;

文件的时间戳(mtime,atime,ctime);

文件链接数等。

下面详述三种linux系统文件中时间戳的不同:

atime:Access time,在读取文件或执行文件时更改。

mtime:Modifiedtime,在写入文件时随文件内容的更改而更改。

ctime:Change time,在写入文件、更改所有者、权限或链接设置时随inode的内容更改而更改。mtime改变,ctime随之改变。


所以得出结论:

1,只有读取或者执行文件后,atime改变而mtime,ctime不改变。

2,只想文件写入内容后,mtime改变而ctime改变,atime不改变。

3,只修改inode信息(除文件内容)后,ctime改变atime,mtime不改变。

下面通过三个实验来更好的验证猜想。

(1)执行 $ gcc -o file.out file.c


对比第一张图可以发现:只有atime改变了,而mtime和ctime都未改变。因为只有执行访问file.c文件,而未改变文件内容或者文件inode信息。

(2)执行$ echo "/*file.c*/">>file.c


对比上一张图可以发现:mtime和ctime都改变了,而atime未改变。因为向file.c结尾写入内容,修改了文件内容,文件的inode信息也随之改变。但并没有执行或者读取file.c内容。

(3)执行$ chmod u+x file.c


对比上一图可以发现:只有ctime改变而atime和mtime没改变。因为修改了file.c文件,增加了可执行权限。文件的inode信息随之改变,而未改变文件内容或者执行(读取)文件。

Logo

更多推荐