Linux中的文件时间戳记:atime,mtime,ctime说明

时间:2020-03-05 15:26:44  来源:igfitidea点击:

在Linux中,每个文件都有一些时间戳,这些时间戳提供有关何时修改或者更改文件或者其属性的一些关键分析。
让我们详细了解这些时间戳。

什么是Linux时间戳?

Linux中的任何文件通常都具有以下三个时间戳:

  • atime –访问时间
  • mtime –修改时间
  • ctime –更改时间

atime

atime代表访问时间。
该时间戳告诉我们上次访问文件的时间。
通过访问,这意味着我们是否使用cat,vim,less或者其他工具来读取或者显示文件的内容。

mtime

mtime代表修改时间。
该时间戳告诉我们上次修改文件的时间。
通过修改,这意味着是否通过编辑文件来更改文件的内容。

ctime

ctime代表状态更改时间。
该时间戳告诉我们上次更改文件的属性和元数据的时间。
元数据包括文件许可权,所有权,文件名和位置。

如何查看文件的时间戳?

我们可以使用stat命令查看文件的所有时间戳。
使用stat命令非常简单。

我们只需要提供文件名即可。

stat <filename>

输出将是这样的:

stat abhi.txt 
  File: abhi.txt
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 10305h/66309d	Inode: 11936465    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/igi)   Gid: ( 1000/igi)
Access: 2016-08-30 12:19:54.262153704 +0530
Modify: 2016-08-30 12:19:54.262153704 +0530
Change: 2016-08-30 12:19:54.262153704 +0530
 Birth: 

我们可以在上面的输出中看到所有三个时间戳(访问,修改和更改)时间。
这三个时间戳都是相同的,因为我只是使用touch命令创建了这个空文件。

现在,我们来修改这些时间戳。

如果我使用less命令读取文件,它将仅更改访问时间,因为文件的内容和元数据保持不变。

$less abhi.txt 
$stat abhi.txt 
   File: abhi.txt
   Size: 0             Blocks: 0          IO Block: 4096   regular empty file
 Device: 10305h/66309d    Inode: 11936465    Links: 1
 Access: (0644/-rw-r--r--)  Uid: ( 1000/igi)   Gid: ( 1000/igi)
 Access: 2016-08-30 12:25:13.794471295 +0530
 Modify: 2016-08-30 12:19:54.262153704 +0530
 Change: 2016-08-30 12:19:54.262153704 +0530
  Birth: 

现在,让我们更改修改时间。
我将使用cat命令向该文件添加新文本。
这样可以防止访问时间的改变。

$cat >> abhi.txt 
 demo text
 ^C
 $stat abhi.txt 
   File: abhi.txt
   Size: 10            Blocks: 8          IO Block: 4096   regular file
 Device: 10305h/66309d    Inode: 11936465    Links: 1
 Access: (0644/-rw-r--r--)  Uid: ( 1000/igi)   Gid: ( 1000/igi)
 Access: 2016-08-30 12:25:13.794471295 +0530
 Modify: 2016-08-30 12:32:34.751320967 +0530
 Change: 2016-08-30 12:32:34.751320967 +0530
  Birth: 

你有没有发现怪异的东西?
我们修改了文件并希望更改mtime,但是它也更改了ctime。

请记住,ctime总是随mtime一起更改。
这是因为在mtime受用户控制的同时,ctime由系统控制。
它表示最后一次更改文件的数据块或者元数据的时间。

如果修改文件,则数据块将更改,因此ctime也将更改。

我们可以通过使用chmod或者chgrpcommands修改文件权限来单独更改ctime,但是如果不修改ctime便无法修改mtime。

我们也无法通过常规方式更改过去的ctime。
这是一种安全功能,因为它会告诉我们上次更改文件的时间。
即使有人修改了mtime并在过去出于恶意目的对其进行了设置,ctime也会指示mtime更改的实际时间。

切记:ctime始终会被mtime更改所修改。

文件时间戳的用途是什么?

它对分析很有帮助。
在许多情况下,我们需要引用文件的时间戳。
例如,我们可以查看某个文件是否应该在最近修改过,而应该在最近修改过。

我最喜欢的用途之一是使用mtime查找应用程序的日志文件。
运行该应用程序,然后进入该应用程序的父目录,然后搜索最近几分钟内已修改的文件。

我已经在上面向我们展示了它还可以分析是否有人访问了文件或者恶意修改了文件。
在这种情况下,时间戳记起着重要的作用。

如何知道最初创建文件的时间?

我们是否注意到stat命令输出的最后一行?
上面写着“出生”。
我们可能会猜测这代表文件“出生”(或者更准确地说是创建)的时间戳。

实际上,还有一个称为创建时间(cr)的时间戳。
并非所有文件系统都支持此时间戳。
Ext4是流行的Linux文件系统之一,尽管它支持创建时间戳,但目前stat命令无法显示它。