📜  文件时间戳——Linux 中的 mtime、ctime 和 atime

📅  最后修改于: 2022-05-13 01:57:29.452000             🧑  作者: Mango

文件时间戳——Linux 中的 mtime、ctime 和 atime

时间戳是对文件执行操作的时间记录。时间戳很有用,因为它可以记录访问、修改或添加文件的时间。 Linux 的文件有 3 个由计算机记录的时间戳:

  • 访问时间戳(atime):表示上次访问文件的时间。
  • 修改时间戳(mtime):这是文件内容最后一次被修改的时间。
  • 更改时间戳(ctime):指的是与文件相关的某些元数据上次更改的时间。

在 Linux 中,时间戳实际上存储为秒数而不是日期和时间。这个秒数是指从 1970 年 1 月 1 日 00:00:00 开始的时间量,也就是 Unix Epoch 的时间。但是,当用户想要显示时间戳时,Linux 会将其转换为人类可读的格式,因此将其显示为日期和时间。用户可以使用 ls 命令或 stat 命令查看时间戳。

时间:

修改时间戳 (mtime) 表示上次修改文件内容的时间。例如,如果在文件中添加、删除或替换了新内容,则修改后的时间戳会更改。要查看修改后的时间戳,我们可以简单地使用带有 -l 选项的 ls 命令。

Syntax:
ls -l [filename]

时间:

与 mtime 只与文件内部的内容相关,不同的时间戳表示文件的某些元数据上次更改的时间。例如,如果修改了文件的权限设置,则 mtime 会指示它。要查看更改的时间戳,我们可以在 ls 命令中使用 -lc 选项,如下所示:

Syntax:
ls -lc [filename]

时间:

访问时间戳 (atime) 是指用户上次读取文件的时间。即,用户使用任何合适的程序显示文件的内容,但不必修改任何内容。要使用 ls 命令查看访问时间戳,我们使用 -lu 选项后跟文件名。



Syntax:
ls -lu [filename]

统计命令:

stat 命令可用于同时查看文件的所有时间戳。

Syntax:
stat [filename]

比较表

下表总结了我们提到的三个时间戳之间的区别:

 File Contents are ModifiedMetadata is Modified File Accessed without ModificationCommand to Use
mtimeChangesNo changeNo changels -l or stat
ctimeChangesChangesNo changels -cl or stat
atimeChangesNo changeChangesls -ul or stat

为了进一步解释这个概念,我们将检查一个名为 test.txt 的文件,对该文件进行了以下更改:

创建文件

该文件是在 25/03/2021 的 14:04 使用 nano 命令创建的。我们还可以使用 touch 命令或任何文本编辑器。最初,我们在文件中添加了 1 行

创建文件的命令:

nano test.txt

文件时间戳 - Linux 中的 mtime、ctime 和 atime

最初,时间戳都显示创建文件的时间。下图显示了使用 stat 命令查看 3 个时间戳的示例。在此图像中,显示了显示文件创建时间的初始时间戳。每个时间戳右侧的数字 +004 称为时区偏移量,表示时区比 UTC 早 +004 小时。显示给用户时,显示的日期和时间会从 UTC 转换为本地时区。我们还可以注意到 stat 命令在显示时间戳中的秒数方面非常准确。

命令:



stat test.txt

文件时间戳 - Linux 中的 mtime、ctime 和 atime

或者,可以使用 ls 命令单独查看每个时间戳,如下所示:

命令:

mtime: ls -l test.txt
ctime: ls -cl test.txt
atime: ls -ul test.txt

在以下步骤中,我们将对文件进行一些更改,并使用 stat 命令观察时间戳的变化。 ls 命令也可以使用。

修改文件

2021 年 3 月 25 日 14:22 使用 nano 文本编辑器(可以使用任何文本编辑器)访问该文件并在其中添加了一个新行。

命令:

nano test.txt

文件时间戳 - Linux 中的 mtime、ctime 和 atime

使用 stat 命令,我们可以看到所有 3 个时间戳都更改为 14:22。

命令:



stat test.txt

文件时间戳 - Linux 中的 mtime、ctime 和 atime

更改元数据

该文件的权限已于 2021 年 3 月 25 日 14:36 使用 chmod 命令更改。

命令:

chmod 777 test.txt

我们注意到,更改权限后,ctime 和 atime 都更改为 14:36。 mtime 不是这种情况,因为它只在文件内的内容被修改时才会改变。因此,mtime 仍然是 14:22。

命令:

stat test.txt

文件时间戳 - Linux 中的 mtime、ctime 和 atime

打开文件而不进行更改

该文件已在 nano 文本编辑器中打开,但在 2021 年 3 月 25 日 14:55 未进行任何更改。

命令:

nano test.txt

从 stat 命令的输出中,我们可以观察到,唯一更改为 14:55 的时间戳是访问时间戳。这是因为没有更改数据。因此,ctime 保持在 14:36,而 mtime 保持在 14:22。

命令:

stat test.txt

文件时间戳 - Linux 中的 mtime、ctime 和 atime