Linux文件时间戳示例说明

本教程介绍了Linux文件时间戳的类型,以及如何使用以下命令查看和更改文件的时间戳 touch 带有示例的命令。

Linux文件时间戳简介

通常在Linux和Unix中,每个文件都有三种类型的时间戳,即 一次 (访问时间), 时光 (修改时间)和 时间 (更改时间)。 顾名思义,时间戳用于确定何时访问,修改和更改文件。

访问时间(或短时间)时间戳是最后一次读取文件的时间。 例如,您可能已打开文件。 该文件可能已被某些其他程序或远程计算机访问。 您可能已经使用命令读取了文件的内容(例如 cat 命令)或程序(例如gedit,vim等)。 该文件没有被编辑或修改。 您或其他用户只能从远程系统访问它。

修改时间(或mtime)时间戳指示上次修改文件(或目录)的时间。 换句话说,mtime表示文件内容已更改的时间。 例如,您可能已在文件中添加了某些内容或从文件中删除了某些内容,或者可能已修改了文件的内容。

更改时间(或ctime)时间戳显示文件内容或文件元数据(即文件属性,例如文件所有权,文件许可权或组)的最后更改时间。

综上所述,

  • atime-指示最后的时间 访问 归档以读取内容。
  • mtime-指示最后的时间 修改 归档内容。
  • ctime-指示最后的时间 更改 文件内容或文件元数据(所有者,组或权限)。

时间戳可以在各种情况下提供帮助。 以下是一些时间戳的用例:

  • 根据访问或修改时间查找和排序文件。
  • 查找和删除X天之前的文件。 清理硬盘驱动器中的旧文件很有用。
  • 检查何时更改了配置文件。
  • 验证是否访问了文件。
  • 验证目录是否已更新。
  • 查找早于X天的文件。

使用查看Linux文件时间戳 statls 命令

我们可以使用以下命令在Linux中查看文件时间戳 stat 命令。 根据手册页, stat 命令在Linux中显示文件或文件系统状态。 stat命令是 GNU Coreutils,所以我们不必费心安装它。

现在,让我们检查一个名为的文本文件的时间戳 ostechnix.txt 使用 stat 命令:

$ stat ostechnix.txt

样本输出:

  File: ostechnix.txt
  Size: 21        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 4351679     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/      sk)   Gid: ( 1000/      sk)
Access: 2020-11-11 17:31:01.484504149 +0530
Modify: 2020-11-11 17:31:01.484504149 +0530
Change: 2020-11-11 17:31:01.484504149 +0530
 Birth: -

使用stat命令查看Linux文件时间戳

上面输出的最后三行分别显示了访问时间,修改时间和更改时间时间戳。 当我们只创建一个新文件时,所有时间戳都相同。

您是否注意到“Birth:在输出的末尾显示“”?它指示文件创建时间的时间戳。POSIX标准未定义文件创建的时间戳。某些文件系统(例如ext4,JFS,Btrfs)存储该值,但是当前没有Linux内核API因此,我们在“出生:”行中看到一个连字符“-”,而不是一个时间戳。

您还可以使用以下方式分别获取atime,mtime和ctime时间戳 ls 命令。

要查看修改时间(mtime)时间戳,请使用 ls -l 命令:

$ ls -l ostechnix.txt 
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt

要查看更改时间(ctime)时间戳,请运行 ls -lc 命令:

$ ls -lc ostechnix.txt 
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt

在这里 c 标志用于显示文件元数据或文件属性的最后更改时间。

查看访问时间(时间)时间戳记 ls -lu 命令:

$ ls -lu ostechnix.txt 
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt

在这里 u 标志显示最后一次访问文件的时间。

使用ls命令查看Linux文件时间戳

使用更改Linux文件时间戳 touch 命令

touch 该命令用于更改文件时间戳,并在Linux中创建新的空文件。 就像 stat 命令, touch 命令也是 GNU coreutils,因此您也不需要安装它。

在更改时间戳之前,让我们获取名为的文件的当前时间戳 ostechnix.txt 以供参考:

$ stat ostechnix.txt 
  File: ostechnix.txt
  Size: 21        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 4351679     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/      sk)   Gid: ( 1000/      sk)
Access: 2020-11-11 17:31:01.484504149 +0530
Modify: 2020-11-11 17:31:01.484504149 +0530
Change: 2020-11-11 17:31:01.484504149 +0530
 Birth: -

如您在上面的输出中看到的,该文件 ostechnix.txt 已被访问。 在相同的日期和时间进行修改和更改,即2020年11月11日在17:31:01。

让我们使用以下命令更改此文件的时间戳 touch 如下命令:

$ touch ostechnix.txt

上面的命令会将所有时间戳(即atime,mtime和ctime)更改为计算机的当前时间。

现在让我们来看看文件的时间戳 stat 命令:

$ stat ostechnix.txt 
  File: ostechnix.txt
  Size: 21        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 4351679     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/      sk)   Gid: ( 1000/      sk)
Access: 2020-11-11 17:39:59.430610787 +0530
Modify: 2020-11-11 17:39:59.430610787 +0530
Change: 2020-11-11 17:39:59.430610787 +0530
 Birth: -

使用touch命令更改Linux文件时间戳使用touch命令更改Linux文件时间戳

看到? 所有时间戳都已更改为系统的当前时间,即 2020-11-10 17:51:02

也可以单独更改各个时间戳。 例如,您只能使用更改访问时间(时间)时间戳 -a 旗:

$ touch -a ostechnix.txt

上面的命令将访问时间时间戳设置为当前时间。

现在,检查的时间戳 ostechnix.txt 与文件 stat 命令:

$ stat ostechnix.txt 
  File: ostechnix.txt
  Size: 21        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 4351679     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/      sk)   Gid: ( 1000/      sk)
Access: 2020-11-11 17:43:46.555428706 +0530
Modify: 2020-11-11 17:39:59.430610787 +0530
Change: 2020-11-11 17:43:46.555428706 +0530
 Birth: -

使用touch命令仅更改访问时间时间戳使用touch命令仅更改访问时间时间戳

从上面的输出中可以看到,访问时间已更改为当前时间。 更改时间也会更新。

要仅更改修改时间时间戳(mtime),请使用 -m 旗:

$ touch -m ostechnix.txt

验证mtime是否已更改 stat 命令:

$ stat ostechnix.txt 
  File: ostechnix.txt
  Size: 21        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 4351679     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/      sk)   Gid: ( 1000/      sk)
Access: 2020-11-11 17:43:46.555428706 +0530
Modify: 2020-11-11 17:47:17.577722187 +0530
Change: 2020-11-11 17:47:17.577722187 +0530
 Birth: -

使用touch命令仅更改修改时间时间戳使用touch命令仅更改修改时间时间戳

现在,mtime和ctime时间戳已更改,而atime保持不变。

您可能已经注意到,当我们更改访问时间或修改时间时,ctime也将更新。

如果要同时更改atime和mtime时间戳,请使用 -d 选项。

$ touch -d "2020-11-11 17:50:01" ostechnix.txt

使用以下命令验证atime和mtime时间戳是否已更改 stat 命令:

$ stat ostechnix.txt 
  File: ostechnix.txt
  Size: 21        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 4351679     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/      sk)   Gid: ( 1000/      sk)
Access: 2020-11-11 17:50:01.000000000 +0530
Modify: 2020-11-11 17:50:01.000000000 +0530
Change: 2020-11-11 17:51:17.024213698 +0530
 Birth: -

使用触摸命令同时更改atime和mtime时间戳使用触摸命令同时更改atime和mtime时间戳

现在,我们将访问时间和修改时间设置为特定时间,即 2020-11-11 17:50:01。 并且ctime时间戳也已更新为当前时间。

也可以使用特定的时间戳代替当前时间 -t 标记:

$ touch -t 2011111754 ostechnix.txt

此命令会将atime和mtime时间戳设置为 2020-11-11 17:54:00。 验证 stat 如下命令:

$ stat ostechnix.txt 
  File: ostechnix.txt
  Size: 21        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 4351679     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/      sk)   Gid: ( 1000/      sk)
Access: 2020-11-11 17:54:00.000000000 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:56:20.844405239 +0530
 Birth: -

如前所述,当更改atime和mtime时,ctime会更新。 如果只想更改ctime时间戳,则没有专用标志 touch 命令。 因此,您需要通过修改文件元数据或文件属性来手动更改ctime。 例如,我要分配 可执行权限ostchnix.txt 与文件 chmod 命令:

$ chmod +x ostechnix.txt

检查ctime是否更新为 stat 命令:

$ stat ostechnix.txt 
  File: ostechnix.txt
  Size: 21        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 4351679     Links: 1
Access: (0775/-rwxrwxr-x)  Uid: ( 1000/      sk)   Gid: ( 1000/      sk)
Access: 2020-11-11 17:54:00.000000000 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:57:21.022720776 +0530
 Birth: -

使用触摸命令仅更改更改时间时间戳使用触摸命令仅更改更改时间时间戳

看到? ctime时间戳已更改,但atime和mtime时间未更改。 因为既没有访问文件,也没有更改。 我只更改了文件权限。

通过查看或访问或修改文件来更改文件时间戳

如前所述,访问我们的文件进行读取时,atime时间戳会更改。 尝试访问该文件以供使用 cat 命令,看看会发生什么。

$ cat ostechnix.txt
This is a text file.

现在检查访问时间时间戳是否已更新:

$ stat ostechnix.txt 
  File: ostechnix.txt
  Size: 21        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 4351679     Links: 1
Access: (0775/-rwxrwxr-x)  Uid: ( 1000/      sk)   Gid: ( 1000/      sk)
Access: 2020-11-11 18:00:16.005323521 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:57:21.022720776 +0530
 Birth: -

看到? atime值现在已更改。

当我们在文件中添加或删除数据时,mtime会更新。

让我在 ostechnix.txt 文件:

$ echo "modify this file" >> ostechnix.txt

检查文件时间戳:

$ stat ostechnix.txt 
  File: ostechnix.txt
  Size: 38        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 4351679     Links: 1
Access: (0775/-rwxrwxr-x)  Uid: ( 1000/      sk)   Gid: ( 1000/      sk)
Access: 2020-11-11 18:00:16.005323521 +0530
Modify: 2020-11-11 18:01:49.072771458 +0530
Change: 2020-11-11 18:01:49.072771458 +0530
 Birth: -

由于文件的内容已更改,因此其mtime和ctime均已更改。

更改符号链接时间戳

默认情况下,如果您使用 touch 在一个命令 符号链接 (或symlink),它也会更改引用文件的时间戳。

如果只想更改符号链接的时间戳,请使用 -h,(--no-dereference) 选项:

$ touch -h <path-to-symlink>

[Bonus Tip] 从另一个文件复制时间戳

touch命令有一个名为 -r, (--reference=) 这样您就可以将时间戳从一个文件复制到另一个文件。

以下命令会将file1的时间戳复制到file2。

$ touch -r file1.txt file2.txt

有关更多详细信息,请参见 stattouch 命令:

$ man stat
$ man touch

结论

在本指南中,我们讨论了三种类型的Linux文件时间戳,即atime,mtime和ctime,如何使用以下命令查看文件时间戳 statls 命令,最后如何更改这些文件的时间戳 touch 命令。 希望这可以帮助。

atimectimeLinuxLinux基础知识Linux命令mtimeTimestamps

Sidebar