了解Linux中时间戳:mtime/ctime和atime

在Linux服务器中为系统的每个文件保留了三个时间戳。这些时间戳可以让你发现一个文件最后更新的时间。但它们都是什么意思呢?你又是如何发现一个文件的这些时间的呢?当涉及到目录时,有什么不同吗?
了解atime、ctime和mtime可以回答所有这些问题。这是Unix文件系统跟踪的三个时间戳。如果你需要了解什么东西在什么时候发生了变化的细节,请继续阅读。
什么是三个Unix时间戳?
每个文件都有三个与之相关的时间戳。Linux以Unix时间格式来存储这些时间戳,它测量的是自纪元以来的秒数。这三个时间戳通常被称为atime、ctime和mtime。
mtime是最常见的,通常也是最有用的。它代表修改后的时间。它是文件内容最后写入磁盘的时间。
稍有不同的是ctime,它代表更改时间。这个时间戳可以跟踪元数据的变化,比如所有权和权限。它包括重命名一个文件--至少在典型的现代Linux操作系统上是这样。但是当文件的内容发生变化时,它也会更新,所以它总是和mtime一样最新。
第三个时间戳是atime,它存储了任何人最后一次访问文件的时间。
时间戳如何应用于目录
一个Linux目录,本质上就是该目录中的文件列表。所以在一个目录里面创建一个文件,会更新该目录的mtime。例如,使用ls命令列出目录中的文件,会更新它的访问时间。而且,和文件一样,改变一个目录的权限或名称会更新它的ctime。
创建时间是什么?
你可能会惊讶地发现,Linux根本就没有跟踪创建时间。你可能最初会认为ctime代表创建时间。同样,你可能会认为这是一件非常有用的事情。
许多应用程序通过每次从头创建文件来保存文件。这将使使用创建时间产生误导。
如何查看不同的时间戳
获取时间戳信息的最简单方法是使用ls命令。默认的长格式显示mtime的详细信息。

你可以使用-u标志来显示atime。

最后一行确认这个文件的mtime与atime不同。最后,使用-c标志来查看ctime。

这一次,我们确认这三次都是不同的,而且是正确的:我们修改了文件,然后访问了文件,然后改变了文件,顺序是这样的。
ls的替代方法是stat命令。这条命令显示文件inode的低级细节。它可以让我们更方便地同时检查这三次。它也绕过了不直观的-u标志的问题。下面是同一个文件的输出示例。

如何更新时间戳
touch命令可以改变文件的修改和访问时间。它也是一种创建空文件的方便方法,如果文件还不存在,它就会这样做。
touch tmp
默认情况下,它将mtime和atime设置为当前时间。你可以用 -t 标志设置不同的时间。
touch -t 202103061200 tmp
你也可以用-m和-a标志分别只设置mtime或atime。
touch -t 202103061300 -m tmp
请注意,当我们设置atime或mtime时,ctime总是更新的。
如何根据时间戳查找文件
find命令是另一个作用于时间戳的工具。它可以根据atime、ctime或mtime来过滤文件。例如
find . -amin 15
将找到15分钟前访问的文件,而。
find . -mtime -2
会发现最近两天内修改的文件。
Linux会对每个文件进行三次跟踪
最常引用的文件时间戳是mtime。例如,这是文件列表显示的日期和时间。但是其他两个时间戳也是很有用的,前提是你要明白它们所指的是什么。特别是,一定要记住,ctime代表更改时间,而不是创建时间。
诸如 touch 和 stat 等命令是 Linux 命令行工具箱中有用的成员。这些命令会让你快速创建新文件,从而增强你的Linux工作流程。