Linux 中的文件时间戳:atime、mtime、ctime 解释
让我们看看 Linux 中的各种文件时间戳是什么、如何查看文件的时间戳以及如何更改时间戳。
在 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 命令的未来版本将在出生部分显示创建时间戳。