在 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 change 修改。
文件时间戳的用途是什么?
对分析有很大帮助。 在许多情况下,您可能需要参考文件的时间戳。 为了 example,您可以查看文件是否在应该修改时最近被修改。
我最喜欢的用途之一是使用 mtime 定位应用程序的日志文件。 运行应用程序,然后进入应用程序的父目录并搜索最近几分钟内修改过的文件。
我已经在上面向您展示了它还可以帮助分析是否有人访问了文件或恶意修改了文件。 时间戳在这种情况下起着重要作用。
如何知道最初创建文件的时间?
你注意到 stat 命令输出的最后一行了吗? 上面写着“出生”。 您可能会猜到,这表示文件“诞生”(或更精确地创建)时的时间图。
实际上,还有一个称为创建时间 (cr) 的时间戳。 并非所有文件系统都支持此时间戳。 Ext4 是流行的 Linux 文件系统之一,虽然它支持创建时间戳,但目前 stat 命令无法显示它。 也许未来版本的 stat 命令会在 Birth 部分显示创建时间戳。