上面的时间戳显示文件内容最后一次修改是在2019年4月21日。访问和更改的时间戳是相同的,因为文件是在2020年1月20日从另一台计算机复制到这台计算机上的,而且这两个时间戳都是在那时更新的。
要同时查看所有时间戳,请使用stat命令,如下所示:
stat dp.c
时区列在显示屏的底部。如你所见,它们有一个非常精确的分数秒分量。在每个时间戳的末尾,您还会看到-0500或-0400。
这些是时区偏移。文件系统以UTC记录时间戳,并在STAT显示时将其转换为本地时区。我们用来研究这篇文章的计算机被配置为就像在美国东部标准时间(EST)区一样。
当美国东部夏令时生效时,该时区比UTC晚5小时。然而,当东部夏令时(EDT)生效时,它比UTC晚四个小时。2019年4月,当修改后的时间戳被更改时,EDT生效。这就是为什么其中两个时间戳的偏移量为5小时,而修改后的时间戳的偏移量为4小时。
偏移量和时区不存储在任何地方。既没有索引节点,也没有专门用于保存这些值的文件系统空间。您必须使用时间戳(始终使用UTC时间)、显示文件的计算机的本地时区以及DST是否生效来动态计算这些值。
您还会看到一个“出生”时间戳,该时间戳保留为文件的创建日期。这没有实现,您看到的是连字符“-”,而不是时间戳。
相关:您想知道的关于Linux上的inode的所有信息
更改时间戳
如果需要,您可以更改文件上的时间戳。您可以使用触摸命令来更改访问和/或修改的时间戳:
触摸-a dp.c
要设置新的访问时间戳,可以使用-a(访问时间)选项。此命令将访问时间戳设置为计算机的当前时间:
stat dp.c
访问时间戳如预期般更改。但是,更改后的时间戳也会更新;这是正常的。
要更改修改后的时间戳,可以使用-m(修改时间)选项:
Touch-m dp.c
stat dp.c
这一次,修改和更改的时间戳被更新。
如果您希望同时更改访问时间戳和修改后的时间戳,可以使用-d(日期)选项。您还可以指定时间和日期-您不限于将时间戳更改为当前时间戳。
我们将使用以下命令将访问和修改后的时间戳设置为2020年1月15日10:30:45:
Touch-d“2020-01-15 10:30:45”dp.c
stat dp.c
我们现在已经将访问和修改的时间戳设置为过去的日期。更改的时间戳也更新为计算机的当前时间。
如果要将一个文件的时间戳值设置为另一个文件的时间戳值,还可以使用-r(引用)选项,如下所示:
触摸dp.c-r骰子_words.sl3
stat dp.c
然后,我们差不多又回到了开始的地方,时间戳是-0400和-0500的混合。
让我们做一些只影响更改后的时间戳的事情。我们将使用chmod命令为所有用户授予可执行文件的执行权限:
chmod+x DP
状态DP
更改后的时间戳是唯一更新的时间戳。这是因为文件本身没有更改-它既没有被访问也没有被修改。但是,有关该文件的元数据已更改。
相关:如何在Linux上使用chmod命令
文件系统如何更新时间戳
装载文件系统时,您可以使用一些选项来指定应如何操作或处理该文件系统。这些文件存储在/etc/fstab文件中,在引导时读取和处理该文件。您还可以设置选项来指定它们应该用来更新访问时间戳的方案。
以下是一些最常见的选项:
Structatime(Strict Atime):此选项在每次访问文件时更新文件的访问时间戳。这种方法有一定的开销,但是一些服务器可以从这种方案中受益。它在台式机或笔记本电脑上几乎没有什么优点。 noatime_(No Atime):此选项完全禁止更新文件和目录的访问时间戳。但是,修改后的时间戳仍将更新。 nodiatime(No Dir Atime):此选项启用要更新的文件的访问时间戳,但禁用目录的访问时间戳。 Relatime(Relative Atime):此选项仅在访问时间戳超过24小时,或者前一个时间戳早于当前修改或更改的时间戳时更新访问时间戳。这在访问时间戳更新过频繁或根本不更新之间取得了很好的平衡。
我们来看看这台计算机的/etc/fstab文件,看看设置了哪些选项:
较少/etc/fstab
将为我们显示/etc/fstab文件,如下所示。
以下是不带环绕的文件内容:
#/etc/fstab:静态文件系统信息。 #。 #使用‘blkID’打印一个对象的通用唯一标识符。 #device;这可以与uuid=一起使用,作为一种更可靠的设备命名方式。 即使添加和删除磁盘也可以使用#。请参见fstab(5)。 #。 #<文件系统><挂载点><类型><选项><转储><通过>。 安装期间#/在/dev/sda1上。 uuid=4a143d08-8695-475b-8243-b13b56050fc2/ext4错误=重新挂载-ro 0 1。 /swapfile无交换软件0%0
只有两个条目,其中一个是交换文件,我们可以忽略它。另一个挂载在文件系统(/)的根目录下,安装时位于设备/dev/sda1上。这是第一个硬盘上的第一个分区,它恰好包含一个ext4文件系统。
传递给它的唯一选项是:Errors=remount-ro,它告诉操作系统,如果在尝试将该文件系统作为读写文件系统挂载时出现错误,则将其重新挂载为只读。
因此,没有提到如何处理访问时间戳。让我们更深入地研究一下/proc/mount可以告诉我们什么。我们将通过grep传输/proc/mount的输出。我们的搜索字符串将是“sda”,即硬盘标识符。
我们键入以下内容:
cat/proc/mount|grep“sda”
现在我们看到以下选项:
RW:文件系统将作为读写文件系统挂载。 相对:文件系统将使用“相对相对”方案来更新访问时间戳。
那是从哪来的?嗯,在以下情况下使用的是相对关系方案:
当使用DEFAULTS/etc/fstab选项时。 当使用relatime/etc/fstab选项时。 如果/etc/fstab中没有使用访问时间戳选项,并且您使用的是Linux内核2.6.30或更高版本。
我们为ext4文件系统输入的/etc/fstab条目没有指定任何访问时间戳更新选项,所以Linux做出了明智的选择,并使用了relatime。
相关:如何在Linux上编写fstab文件
时间戳很重要
时间戳为我们提供了一种查看文件何时被访问、修改或更改的简单方法。但是,更重要的是,它们提供了一种备份和同步软件的方法,以确定需要备份哪些文件。
当您需要强制说服程序包含或忽略一个文件或一组文件时,操作时间戳的能力将被证明是有用的。