了解 Linux 文件时间戳:mtime、ctime 和 atime
想要了解有关 Linux 如何跟踪文件更改的更多信息?以下是您需要了解的有关 Linux 文件时间戳的信息。
Linux 操作系统会跟踪系统上每个文件的三个时间戳。这些时间戳使您能够发现文件上次更新的时间。但它们到底是什么意思呢?如何找出文件的这些时间?目录有区别吗?
了解atime、ctime 和mtime 可以回答所有这些问题。这是 Unix 文件系统跟踪的三个时间戳。如果您需要了解有关更改内容和时间的详细信息,请继续阅读。
什么是 Unix 的三个时间戳?
每个文件都有三个与其关联的时间戳。 Linux 以 Unix 时间格式存储这些数据,该格式测量自纪元以来的秒数。这三个时间戳通常称为atime、ctime 和mtime。
mtime 是最常见且通常也是最有用的。它代表修改时间。这是文件内容最后一次写入磁盘的时间。
略有不同的是ctime,它代表更改时间。此时间戳跟踪元数据更改,例如所有权和权限。它包括重命名文件——至少在典型的现代 Linux 操作系统上是这样。但当文件内容更改时它也会更新,因此它始终与 mtime 一样最新。
第三个时间戳是atime,它存储最后一次访问该文件的时间。
时间戳如何应用于目录
Linux 目录本质上是该目录中文件的列表。因此,在目录中创建文件将更新该目录的运行时间。例如,使用 ls 命令列出目录中的文件会更新其访问时间。并且,与文件一样,更改目录的权限或名称会更新其 ctime。
创建时间呢?
您可能会惊讶地发现 Linux 根本不记录创建时间。您最初可能会认为 ctime 代表创建时间。同样,您可能会认为能够找到它是一件非常有用的事情。
许多应用程序通过每次从头开始创建文件来保存文件。这会使使用创建时间产生误导。
如何查看不同的时间戳
获取时间戳信息的最简单方法是使用 ls 命令。默认长格式显示 mtime 的详细信息:
$ date
Sat Mar 6 16:57:01 GMT 2021
$ echo "hello, world" > tmp
$ ls -l tmp.txt
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp
您可以使用 -u 标志来显示 atime:
$ date
Sat Mar 6 16:59:33 GMT 2021
$ cat tmp
hello, world
$ ls -lu tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp
$ ls -l tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp
最后一行确认该文件的 mtime 与 atime 不同。最后,使用 -c 标志查看 ctime:
$ date
Sat Mar 6 17:02:34 GMT 2021
$ mv tmp tmp2
$ ls -lc tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 17:02 tmp2
$ ls -l tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp2
$ ls -lu tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp2
这一次,我们确认这三个时间都是不同且正确的:我们按顺序修改、访问、更改文件。
ls 的替代方法是 stat 命令。此命令显示文件索引节点的低级详细信息。这样可以更轻松地同时检查所有 3 次。它还解决了不直观的 -u 标志的问题。以下是同一文件的示例输出:
$ stat tmp2
File: `tmp2'
Size: 13 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 327688 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2021-03-06 16:59:45.000000000 +0000
Modify: 2021-03-06 16:57:59.000000000 +0000
Change: 2021-03-06 17:02:43.000000000 +0000
如何更新时间戳
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 工作流程。