Linux 操作系统会跟踪系统上每个文件的三个时间戳。 这些时间戳使您能够发现文件上次更新的时间。 但它们都是什么意思? 以及如何找出文件的这些时间? 目录有区别吗?
了解 atime、ctime 和 mtime 可以回答所有这些问题。 这些是 Unix 文件系统跟踪的三个时间戳。 如果您需要了解更改内容和时间的详细信息,请继续阅读。
什么是三个 Unix 时间戳?
每个文件都有三个与之关联的时间戳。 Linux 将这些以 Unix 时间格式存储,该格式测量自纪元以来的秒数。 这三个时间戳通常称为 atime、ctime 和 mtime。
这 时间 是最常见的,通常也是最有用的。 它代表 修改时间. 这是文件内容最后一次写入磁盘的时间。
略有不同的是 时间 代表 改变时间. 此时间戳跟踪元数据更改,例如所有权和权限。 它包括重命名文件——至少在典型的现代 Linux 操作系统上是这样。 但它也会在文件内容更改时更新,因此它始终与 mtime 一样最新。
第三个时间戳是 一次,它存储了任何人最后一次访问该文件的时间。
时间戳如何应用于目录
Linux 目录本质上是该目录中文件的列表。 因此,在目录中创建文件将更新该目录的 mtime。 列出目录中的文件,使用 ls 命令,对于 example,更新其访问时间。 而且,与文件一样,更改目录的权限或名称会更新其 ctime。
创作时间呢?
得知 Linux 根本不跟踪创建时间,您可能会感到惊讶。 您最初可能会认为 时间 代表创建时间。 同样,您可能会认为能够找到它是一件非常有用的事情。
许多应用程序通过每次从头开始创建文件来保存文件。 这会使使用创建时间产生误导。
如何查看不同的时间戳
获取时间戳信息的最简单方法是使用 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 旗帜:
$ 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 的替代方法是 统计 命令。 此命令显示文件 inode 的低级详细信息。 这样可以更轻松地一次检查所有三遍。 它还解决了不直观的问题 -u 旗帜。 这是一个 example 同一文件的输出:
$ 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 tmp
默认情况下,它会将 mtime 和 atime 设置为当前时间。 您可以使用 -t 旗帜:
touch -t 202103061200 tmp
您也可以只设置 mtime 或 atime -m 和 -一种 分别标志:
touch -t 202103061300 -m tmp
请注意,当我们设置 atime 或 mtime 时,ctime 总是会更新。
如何根据时间戳查找文件
这 寻找 command 是另一个作用于时间戳的工具。 它可以根据 atime、ctime 或 mtime 过滤文件。 为了 example:
find . -amin 15
将找到恰好在 15 分钟前访问的文件,同时:
find . -mtime -2
将查找在过去两天内修改过的文件。
Linux 对每个文件进行 3 次跟踪
最常引用的文件时间戳是 mtime。 这是文件列表显示的日期和时间,例如 example. 但其他两个时间戳也很有用,前提是您了解它们所指的内容。 特别是,永远记住 ctime 代表 改变 时间,不是 创建 时间。
touch 和 stat 等命令是 Linux 命令行工具箱的有用成员。 这些命令允许您快速创建新文件,从而增强您的 Linux 工作流程。