如何检查文件的所有时间戳?


52

Linux中是否有命令检查文件的所有时间戳?

我正在尝试查看文件上的最后修改,创建和触摸日期。


4
需要指出的是,Linux文件没有出生日期。因此,无法确定文件的创建日期。
FatalError

注意到=(。感谢你指出我。
Mechaflash

4
@FatalError:各种文件系统已经支持生成/创建时间戳; 真正的麻烦在于获取这些额外信息。(struct stat遗憾的是,一个人不能在没有破坏的情况下进行扩展......)你可以尝试debugfs -R "stat <1234>" /dev/sdXY使用ext4,替换1234为ino。
grawity 2012年

@grawity:干净!我总是想知道为什么没有fs拥有它...但我想他们确实如此,但就像你说的那样,不能仅仅打破现有二进制文件的ABI。谢谢你的提示 :)。
FatalError

1
@FatalError,可以使用Linux stat命令显示出生时间,请参阅如何查找文件的创建日期?什么文件系统在Linux上存储的创建时间?
Franklin Piat 2015年

Answers:


71

该命令被调用stat

$ stat test
234881026 41570368 -rw-r--r-- 1 werner staff 0 0 "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" 4096 0 0 test

如果要调整格式,请参阅手册页,因为输出是特定于操作系统的,并且在Linux / Unix下有所不同。

通常,您也可以通过正常的目录列表获取时间:

  • ls -l 上次修改文件内容的输出, mtime
  • ls -lc输出文件状态修改的最后一次,ctime(有什么区别?
  • ls -lu输出最后访问时间,atime(虽然这个概念的用处有待讨论

当然,ctime不记录文件何时“创建”。POSIX规范仅定义了三个时间戳,但某些Linux文件系统存储了出生时间/创建时间。如何查找文件的创建日期?在这种支持的配置上,可以使用

stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'

stat真的很详细。但ls只需要一条线。如果它还可以显示秒,那将是很好的。但是,在创建文件列表时,前者非常适合。
neverMind9

ls -l是我的快速解决方案
安德鲁

我注意到,ls -l当安装了BusyBox时(在Android上),结果会显示不同的日期格式。我认为没有它,就像“2019-07-26 14:41”,有了它,就像“5月6日21:27”。为什么这一年不见了?有没有办法强制它使用没有它的格式?
android开发人员

@androiddeveloper就像我说的,答案取决于操作系统。我想你应该开一个新问题。如果你是专门谈论Android,也许Stack OverflowAndroid Enthusiasts会更合适。
slhck

@slhck嗯,它是相同的操作系统,只是安装了BusyBox。我问是否可能(意思是:是否有命令使用)来获取将要显示的格式。
android开发人员

21

根据POSIX标准的定义,每个文件只存储三个不同的时间值:http//pubs.opengroup.org/onlinepubs/9699919799/(参见基本定义部分 - > 4.一般概念 - > 4.8文件时报更新)

每个文件都有三个不同的关联时间戳:上次数据访问的时间,上次数据修改的时间以及文件状态上次更改的时间。这些值在文件特征结构struct stat中返回,如<sys / stat.h>中所述

<sys / stat.h>

atime is for Last data access timestamp.
mtime is for Last data modification timestamp.
ctime is for Last file status change timestamp.

以下示例显示了atimemtimectime之间的差异,这些示例在GNU / Linux BASH中。您可以stat -x在Mac OS X或其他BSD Dist中使用。看到类似的输出格式。

$ stat --version
stat (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ touch test
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:58:28.609223953 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

刚刚创建文件时,三个时间戳是相同的。


atime

首先,让我们通过读取(或),打印出来()或将其复制到另一个文件()来访问文件的数据。lessvimcatcp

$ cat test #Nothing will be printed out, since the file is empty
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800  <-- atime Changed!
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

2. ctime

现在,让我们改变文件的状态,通过改变许可(chmod)或重命名(mv

$ chmod u+x test
$ stat stet
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:04:10.178285430 +0800  <-- ctime Changed!
$    
$ mv test testing
$ stat testing
  File: `testing'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:06:33.342207679 +0800  <-- ctime Changed again!

请注意,到目前为止,文件的内容(数据)仍然与创建时相同。


mtime

最后,让我们修改通过编辑该文件的文件的内容。

$ echo 'Modify the DATA of the file' > testing
$ echo 'Modify the DATA of the file also change the file status' > testing
$ stat testing
  File: `testing'
  Size: 56          Blocks: 8          IO Block: 4096   regular file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 11:09:48.247345148 +0800  <-- mtime Changed!
Change: 2014-03-16 11:09:48.247345148 +0800  <-- ctime also Changed!

4.出生时间

另请注意,较新版本stat(例如,stat --version 8.13在Ubuntu 12.04中)具有第4个时间戳信息 - 出生时间(文件创建时间)。虽然现在可能没有显示正确的时间:

$ stat --version
stat (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ stat birth_time
  File: `birth_time'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 4073946     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ bingyao)   Gid: ( 1000/ bingyao)
Access: 2014-03-16 10:46:48.838718970 +0800
Modify: 2014-03-16 10:46:48.838718970 +0800
Change: 2014-03-16 10:46:48.838718970 +0800
 Birth: -

10:46:48.838718970是什么意思?HH:MM:SS。纳秒?
Dzung Nguyen 2016年

2
是的“自内核2.5.48以来,统计结构支持三个文件时间戳字段的纳秒分辨率......”
Tom Lord

如果需要,可以通过root访问和debugfs计算创建时间:moiseevigor.github.io/software/2015/01/30 / ...
Mikko Rantalainen

2
出生时间......很高兴。因为上次修改和最后一次更改几乎是出于同一目的但仍然不同。如果所有四个都存在,那就好了。
neverMind9'18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.