Linux 中是否有命令可以检查文件的所有时间戳?
我正在尝试查看该文件的最后修改、创建和接触日期。
答案1
该命令称为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 下会有所不同。
通常,您也可以通过普通目录列表获取时间:
当然,ctime
它不记录文件何时“创建”。POSIX 规范仅定义了三个时间戳,但一些 Linux 文件系统存储出生时间/创建时间。如何找到文件的创建日期?在这种受支持的配置下,可以使用
stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'
答案2
只有三为每个文件存储不同的时间值,由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.
以下示例显示了时间,时光网和时间,这些示例是在 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
当文件刚刚创建时,三个时间戳是相同的。
1. 时间
首先,让我们使用权less
通过读取文件数据(或vim
)、打印文件数据(cat
)或将其复制到另一个文件(cp
)来获取文件数据。
$ 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 test
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!
请注意,到目前为止,内容(数据) 仍然与文件创建时相同。
3. 时光网
最后,让我们调整通过编辑文件来获取文件的内容。
$ 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)有第四个时间戳 -出生时间(文件创建时间)。虽然现在可能没有显示正确的时间:
$ 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: -