linux文件时间戳:atime、mtime和ctime

什么时候“更改”不是“修改”的意思?当我们谈论Linux文件时间戳时。在本指南中,我们将解释系统如何更新它们,以及如何自己修改它们。...

什么时候“更改”不是“修改”的意思?当我们谈论Linux文件时间戳时。在本指南中,我们将解释系统如何更新它们,以及如何自己修改它们。

atime、mtime和ctime的区别

每个Linux文件都有三个时间戳:访问时间戳(atime)、修改时间戳(mtime)和更改时间戳(ctime)。

访问时间戳是上次读取文件的时间。这意味着有人使用程序来显示文件的内容或从中读取一些值。没有对文件进行编辑或添加任何内容。数据已被引用,但未更改。

修改的时间戳表示上次修改文件内容的时间。编辑或操纵文件的程序或过程。“修改”是指文件中的某些内容被修改或删除,或者添加了新数据。

更改的时间戳不是指对文件内容所做的更改。相反,它是与文件相关的元数据更改的时间。例如,文件权限更改将更新更改的时间戳。

标准的ext4linux文件系统也在其内部文件系统结构中为文件创建时间戳分配空间,但这还没有实现。有时,填充了这个时间戳,但不能依赖于它中的值。

时间戳的剖析

Linux时间戳保存的是一个数字,而不是日期和时间。此数字是自Unix纪元(协调世界时,1970年1月1日午夜(00:00:00))以来的秒数。在Linux时间戳中,闰秒被忽略了,因此它们与实时不相似。

当Linux需要显示时间戳时,它会将秒数转换为日期和时间。这使得人类更容易理解。查看文件的计算机所在的位置和时区指导将秒数转换为日期和时间。它还可以确保月份使用正确的语言。

那么,一个时间戳可以存储多少秒?准确地说是2147483647。这是一个很大的数字,但足够吗?如果您将其添加到Unix epoch中,然后将其转换为日期和时间,您将得到2038年1月19日星期二凌晨03:14:07的时间戳。不过,在此之前,我们需要一个不同的时间戳方案。

查看时间戳

将-l(long listing)选项与ls一起使用时,如下图所示,可以看到修改后的时间戳:

ls -l dp.c

如果要查看访问时间戳,请使用-lu(访问时间)选项,如下所示:

ls -lu dp.c

最后,要查看更改时间戳,可以使用-lc(更改时间)选项;键入以下内容:

ls -lc dp.c

linux文件时间戳:atime、mtime和ctime

上面的时间戳显示文件内容最后一次修改是在2019年4月21日。访问和更改的时间戳是相同的,因为文件是在2020年1月20日从另一台计算机复制到这台计算机上的,并且两个时间戳都是在那时更新的。

要同时查看所有时间戳,请使用stat命令,如下所示:

stat dp.c

linux文件时间戳:atime、mtime和ctime

时区列在显示屏底部。如你所见,它们有一个非常精确的分数秒分量。在每个时间戳的末尾,还可以看到-0500或-0400。

这些是时区偏移。文件系统以UTC格式记录时间戳,并在stat显示时将其转换为本地时区。我们用于研究本文的计算机配置为美国东部标准时区(EST)。

当东部标准时间生效时,该时区比UTC晚5个小时。然而,当东部夏令时(EDT)生效时,它比UTC晚了四个小时。2019年4月,修改后的时间戳发生变化,EDT生效。这就是为什么两个时间戳的偏移量为5小时,而修改的时间戳的偏移量为4小时。

偏移量和时区不会存储在任何地方。没有inode或文件系统空间专门用来保存这些值。您必须使用时间戳(始终是UTC时间)、显示文件的计算机的本地时区以及DST是否有效来动态计算这些时间。

您还会看到一个“出生”时间戳,它是为文件的创建日期保留的。这没有实现,您会看到连字符“-”而不是时间戳。

相关:你想知道的关于Linux上inodes的一切

更改时间戳

如果需要,可以更改文件上的时间戳。您可以使用touch命令更改访问或修改的时间戳,或者两者兼有:

touch -a dp.c

要设置新的访问时间戳,可以使用-a(访问时间)选项。此命令将访问时间戳设置为计算机的当前时间:

stat dp.c

linux文件时间戳:atime、mtime和ctime

访问时间戳已按预期更改。但是,更改的时间戳也被更新了;这是正常的。

要更改修改的时间戳,可以使用-m(修改的时间)选项:

touch -m dp.c stat dp.c

linux文件时间戳:atime、mtime和ctime

这一次,修改和更改的时间戳被更新。

如果要同时更改访问和修改的时间戳,可以使用-d(date)选项。您还可以指定一个时间和日期,而不限于将时间戳更改为现在。

我们将使用以下命令将访问和修改的时间戳设置为2020年1月15日10:30:45:

touch -d "2020-01-15 10:30:45" dp.c stat dp.c

linux文件时间戳:atime、mtime和ctime

我们现在将访问和修改的时间戳设置为过去的日期。更改的时间戳也被更新为计算机的当前时间。

如果要将一个文件的时间戳设置为另一个文件的时间戳值,还可以使用-r(引用)选项,如下所示:

touch dp.c -r dice_words.sl3 stat dp.c

linux文件时间戳:atime、mtime和ctime

然后,我们差不多回到了我们开始的地方,时间戳是-0400和-0500的混合。

让我们做一些只影响更改的时间戳的事情。我们将使用chmod命令为所有用户授予可执行文件执行权限:

chmod +x dp stat dp

linux文件时间戳:atime、mtime和ctime

更改的时间戳是唯一更新的时间戳。这是因为文件本身没有改变,它既没有被访问也没有被修改。但是,有关该文件的元数据已更改。

相关:如何在Linux上使用chmod命令

文件系统如何更新时间戳

安装文件系统时,可以使用一些选项来指定该文件系统的操作或处理方式。它们存储在/etc/fstab文件中,该文件在引导时被读取和处理。您还可以设置选项来指定他们应该用来更新访问时间戳的方案。

以下是一些最常见的选项:

  • strictatime(strictatime):此选项在每次访问文件时更新文件的访问时间戳。这种方**带来额外的开销,但是有些服务器可以从这个方案中受益。它在台式机或笔记本电脑上没有什么优点。
  • noatime(no atime):此选项完全禁止更新文件和目录的访问时间戳。但是,修改后的时间戳仍将更新。
  • nodiratime(no dir atime):此选项启用要更新的文件的访问时间戳,但禁用目录的访问时间戳。
  • relatime(relatime):仅当访问时间戳超过24小时,或者前一个时间戳早于当前修改或更改的时间戳时,此选项才更新访问时间戳。这在访问时间戳更新过于频繁或根本不更新之间取得了很好的平衡。

让我们查看此计算机的/etc/fstab文件,并查看设置了哪些选项:

less /etc/fstab

linux文件时间戳:atime、mtime和ctime

将为我们显示/etc/fstab文件,如下所示。

linux文件时间戳:atime、mtime和ctime

以下是不带环绕的文件内容:

# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <opti***> <dump> <pass> # / was on /dev/sda1 during installation UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 errors=remount-ro 0 1 /swapfile none swap sw 0 0

只有两个条目,其中一个是交换文件,我们可以忽略它。另一个安装在文件系统的根目录(/)上,安装时在设备/dev/sda1上。这是第一个硬盘上的第一个分区,它恰好包含一个ext4文件系统。

传递给它的唯一选项是errors=remount ro,它告诉操作系统,如果尝试将此文件系统作为读写文件系统装载时出错,则将其作为只读文件系统重新装载。

所以,没有提到如何处理访问时间戳。让我们深入研究一下/proc/mounts能告诉我们什么。我们将通过grep将/proc/mounts的输出管道。我们的搜索字符串将是“sda”,硬盘驱动器标识符。

我们键入以下内容:

cat /proc/mounts | grep "sda"

linux文件时间戳:atime、mtime和ctime

现在我们看到以下选项:

  • rw:文件系统将作为读写文件系统安装。
  • relatime:文件系统将使用“相对atime”方案来更新访问时间戳。

那是从哪里来的?那么,在以下情况下使用RelasTime方案:

  • 当使用defaults/etc/fstab选项时。
  • 使用relatime/etc/fstab选项时。
  • 如果在/etc/fstab中使用了no access timestamp选项,并且您使用的是Linux内核2.6.30或更新版本。

ext4文件系统的/etc/fstab条目没有指定任何访问时间戳更新选项,因此Linux做出了明智的选择并使用relatime。

相关:如何在Linux上编写fstab文件

时间戳很重要

时间戳为我们提供了一种查看文件何时被访问、修改或更改的简单方法。但是,更重要的是,它们提供了一种备份和同步软件的方法,以确定需要备份哪些文件。

当您需要强制说服程序包含或忽略一个文件或一组文件时,操纵时间戳的能力将被证明是有用的。

  • 发表于 2021-04-02 16:01
  • 阅读 ( 344 )
  • 分类:互联网

你可能感兴趣的文章

使用以下技巧和技巧成为linux命令行高手

... 文件和文件夹 ...

  • 发布于 2021-03-12 10:19
  • 阅读 ( 277 )

什么是unix时代?unix时代是什么时候?

...间戳也被大量使用,所以它们的存储会增加。例如,每个文件都有三个与之关联的时间戳。 ...

  • 发布于 2021-03-26 15:47
  • 阅读 ( 169 )

如何使用journalctl读取linux系统日志

...的改变。根据创建日志的服务或守护程序,日志通常位于文件系统中的不同位置。但他们都有一个共同点。它们是纯文本文件。 使用systemd,所有系统、引导和内核日志文件都由一个集中的、专用的日志解决方案收集和管理。它...

  • 发布于 2021-04-02 17:06
  • 阅读 ( 177 )

你想知道的关于linux上inodes的一切

Linux文件系统依赖于inode。文件系统内部工作的这些重要部分经常被误解。让我们看看他们到底是什么,他们做了什么。 文件系统的元素 根据定义,文件系统需要存储文件,而且它们还包含目录。文件存储在目录中,这些目录...

  • 发布于 2021-04-02 18:04
  • 阅读 ( 168 )

如何在linux上使用history命令

...令,可以键入负数,如下所示: history -d -5 手动更新历史文件 当您登录或打开终端会话时,历史记录列表将从历史记录文件中读取。在Bash中,默认的历史文件是.Bash\u history。 在当前终端窗口会话中所做的任何更改仅在关闭终端...

  • 发布于 2021-04-02 18:17
  • 阅读 ( 203 )

如何在linux上使用stat命令

...挖个洞。你可以像剥洋葱一样剥Linux。 ls将向您显示有关文件的大量信息,例如对其设置了哪些权限、文件的大小以及文件是文件还是符号链接。为了显示这个信息,ls从一个叫做inode的文件系统结构中读取它。 每个文件和目录...

  • 发布于 2021-04-02 19:25
  • 阅读 ( 167 )

如何在linux上使用dmesg命令

...彩色显示,请使用以下命令: sudo dmesg --color=always 人类时间戳 默认情况下,dmesg使用自内核启动以来秒和纳秒的时间戳表示法。要以更人性化的格式呈现,请使用-H(human)选项。 sudo dmesg -H 这导致两件事发生。 输出自动以较...

  • 发布于 2021-04-02 21:09
  • 阅读 ( 227 )

如何使用ls命令列出linux上的文件和目录

...项,包括一些您应该添加到命令行库中的选项。 ls列出文件和目录 ls命令可能是大多数Linux用户遇到的第一个命令。我们这些整天围着命令行转的人日复一日地使用它,甚至没有想过它。这也许可以解释为什么这个命令比大多...

  • 发布于 2021-04-02 21:28
  • 阅读 ( 231 )

如何在linux上使用echo命令

...终端窗口。它不一定是静态文本。它可以包括shell变量、文件名和目录。您还可以重定向echo以创建文本文件和日志文件。按照这个简单的指南来了解如何。 回声重复你让它重复的东西 宙斯喜欢离开奥林匹斯山,与美丽的仙女...

  • 发布于 2021-04-03 00:31
  • 阅读 ( 183 )

如何在linux上使用mkfs命令

必须先创建文件系统,然后才能使用连接到Linux计算机的任何数据存储设备。学习如何使用mkfs和其他实用程序来为各种文件系统实现这一点。我们教你怎么做。 mkfs**文件系统 mkfs命令生成文件系统。在其他操作系统上,创建文...

  • 发布于 2021-04-03 02:03
  • 阅读 ( 204 )
w5gAigD9a
w5gAigD9a

0 篇文章

相关推荐