Linux 中的文件时间戳:atime、mtime、ctime 解释
在 Linux 中,每个文件都有一些时间戳,这些时间戳提供了有关文件或其属性何时被修改或更改的重要分析信息。让我们详细了解一下这些时间戳。
什么是 Linux 时间戳?
Linux 中的任何文件通常都有以下三个时间戳:
- atime——访问时间
- mtime——修改时间
- ctime——改变时间
时间
atime 代表访问时间。此时间戳会告诉您上次访问文件的时间。访问是指您使用 cat、vim、less 或其他工具读取或显示文件内容的时间。
时光网
mtime 代表修改时间。此时间戳会告诉您上次修改文件的时间。修改意味着通过编辑文件更改了文件的内容。
时间
ctime 代表状态更改时间。此时间戳会告诉您上次更改文件属性和元数据的时间。元数据包括文件权限、所有权、名称和文件位置。
如何查看文件的时间戳?
您可以使用 stat 命令查看文件的所有时间戳。使用 stat 命令非常简单。您只需提供文件名即可。
stat <filename>
输出将会像这样:
stat abhi.txt
File: abhi.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 10305h/66309d Inode: 11936465 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/abhishek) Gid: ( 1000/abhishek)
Access: 2018-08-30 12:19:54.262153704 +0530
Modify: 2018-08-30 12:19:54.262153704 +0530
Change: 2018-08-30 12:19:54.262153704 +0530
Birth: -
您可以在上面的输出中看到所有三个时间戳(访问、修改和更改)时间。这里所有三个时间戳都相同,因为我刚刚使用touch 命令创建了这个空文件。
现在让我们修改这些时间戳。
如果我使用less 命令查看该文件,它只会改变访问时间,因为文件的内容和元数据保持不变。
$ less abhi.txt
$ stat abhi.txt
File: abhi.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 10305h/66309d Inode: 11936465 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/abhishek) Gid: ( 1000/abhishek)
Access: 2018-08-30 12:25:13.794471295 +0530
Modify: 2018-08-30 12:19:54.262153704 +0530
Change: 2018-08-30 12:19:54.262153704 +0530
Birth: -
现在让我们更改修改时间。我将使用 cat 命令向此文件添加新文本。这将阻止访问时间的更改。
$ cat >> abhi.txt
demo text
^C
$ stat abhi.txt
File: abhi.txt
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: 10305h/66309d Inode: 11936465 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/abhishek) Gid: ( 1000/abhishek)
Access: 2018-08-30 12:25:13.794471295 +0530
Modify: 2018-08-30 12:32:34.751320967 +0530
Change: 2018-08-30 12:32:34.751320967 +0530
Birth: -
你注意到有什么奇怪的事情了吗?你修改了文件并期望 mtime 被改变,但它也改变了 ctime。
请记住,ctime 总是随 mtime 而改变。这是因为 mtime 由用户控制,而 ctime 由系统控制。它表示文件的数据块或元数据上次更改的时间。如果您修改文件,数据块会发生变化,因此 ctime 也会发生变化。
您可以通过使用 chmod或chgrp 命令修改文件权限来单独更改 ctime ,但不修改 ctime 则无法修改 mtime。
您也无法通过常规方式更改过去的 ctime。这是一种安全功能,因为它会告诉您上次更改文件的时间。即使有人出于恶意目的修改 mtime 并将其设置为过去时间,ctime 也会指示更改 mtime 的实际时间。
记住:ctime总是会被mtime的改变所修改。
文件时间戳有什么用?
它对分析很有帮助。在很多情况下,你需要参考文件的时间戳。例如,你可以查看文件是否最近被修改,或者是否在应该被修改的时间被修改。
我最喜欢的用途之一是使用 mtime 查找应用程序的日志文件。运行该应用程序,然后进入应用程序的父目录并搜索最近几分钟内修改过的文件。
我已经在上面向您展示了它还可以帮助分析是否有人访问或恶意修改了文件。在这种情况下,时间戳起着重要作用。
如何知道文件最初何时创建?
您注意到了 stat 命令输出的最后一行吗?它显示“出生”。您可能猜到这代表文件“出生”(或更准确地说是创建)时的时间戳。
实际上,还有一个时间戳,称为创建时间 (cr)。并非所有文件系统都支持此时间戳。Ext4 是流行的 Linux 文件系统之一,虽然它支持创建时间戳,但 stat 命令目前无法显示它。也许 stat 命令的未来版本会在 Birth 部分显示创建时间戳。