内容简介:Linux的文件能否找到文件的创建时间取决于文件系统类型,在ext4之前的早期文件系统中(ext、ext2、ext3),文件的元数据不会记录文件的创建时间,它只会记录访问时间、修改时间、该表时间。
Linux的文件能否找到文件的创建时间取决于文件系统类型,在ext4之前的早期文件系统中(ext、ext2、ext3),文件的元数据不会记录文件的创建时间,它只会记录访问时间、修改时间、该表时间。
Access 是访问时间
Modify 是修改时间
Change 是改变时间
所以,对于ext、ext2、ext3文件格式的文件, 文件创建时间其实是不存在的,若文件从创建后不曾修改过则可认为创建时间=修改时间,若文件创建后状态也不曾改变过则可认为创建时间=改变时间,若文件创建后不曾被读取过则可认为创建时间=访问时间。但是很少有文件自创建后,从不被访问、修改。所以基本无法找到一个准确的创建时间,但是在ext4文件格式中,文件的创建时间保存在ext4文件系统的inode中,所以我们可以使用debugfs &stat命令来获取准确的文件创建时间。
注意:Linux文件系统繁多,一般较常见的有:ext2、ext3、ext4、jfs、ReiserFS、XFS、Btrfs 。这里面,个人只用过ext3、ext4、XFS文件系统类型。维基百科上列出的文件系统类型有下面这些,很多文件系统都没有使用过,本文测试环境为ext3、ext4、XFS。
文件系统 |
创建命令 |
工具 |
Archiso [1] |
内核文档 [2] |
说明 |
Btrfs |
mkfs.btrfs(8) |
btrfs-progs |
Yes |
btrfs.txt |
稳定状态 |
VFAT |
mkfs.fat(8) |
dosfstools |
Yes |
vfat.txt |
|
exFAT |
mkexfatfs(8) |
exfat-utils |
Yes |
N/A (FUSE-based) |
|
F2FS |
mkfs.f2fs(8) |
f2fs-tools |
Yes |
f2fs.txt |
基于闪存的设备 |
ext3 |
mke2fs(8) |
e2fsprogs |
Yes ( base ) |
ext3.txt |
|
ext4 |
mke2fs(8) |
e2fsprogs |
Yes ( base ) |
ext4.txt |
|
HFS |
mkfs.hfsplus(8) |
hfsprogs AUR |
No |
hfs.txt |
macOS 文件系统 |
JFS |
mkfs.jfs(8) |
jfsutils |
Yes ( base ) |
jfs.txt |
|
NILFS2 |
mkfs.nilfs2(8) |
nilfs-utils |
Yes |
nilfs2.txt |
|
NTFS |
mkfs.ntfs(8) |
ntfs-3g |
Yes |
N/A (FUSE-based) |
Windows 文件系统 |
Reiser4 |
mkfs.reiser4(8) |
reiser4progs AUR |
No |
||
ReiserFS |
mkfs.reiserfs(8) |
reiserfsprogs |
Yes ( base ) |
||
UDF |
mkfs.udf(8) |
udftools |
Optional |
udf.txt |
|
XFS |
mkfs.xfs(8) |
xfsprogs |
Yes ( base ) |
xfs.txt |
|
ZFS |
zfs-linux AUR |
No |
N/A ( OpenZFS 移植 ) |
步骤一般为:
1:找到文件或目录的索引节点号
ls -i filename
2:找到文件所在的分区或VG
df -T
3:使用debugfs找到文件的创建时间(crtime)
debugfs -R 'stat <xxx>' /dev/xxxx
下面为测试用例,如下所示:
[root@mylnx06 resource]# touch test.txt [root@mylnx06 resource]# stat test.txt File: ‘test.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 811h/2065d Inode: 13 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-02-27 09:26:03.833224736 +0800 Modify: 2019-02-27 09:26:03.833224736 +0800 Change: 2019-02-27 09:26:03.833224736 +0800 Birth: - [root@mylnx06 resource]# ls -i test.txt 13 test.txt [root@mylnx06 resource]# debugfs -R 'stat <13>' /dev/sdb1 debugfs 1.42.9 (28-Dec-2013) Inode: 13 Type: regular Mode: 0644 Flags: 0x80000 Generation: 3202520017 Version: 0x00000000:00000001 User: 0 Group: 0 Size: 0 File ACL: 0 Directory ACL: 0 Links: 1 Blockcount: 0 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x5c75e72b:c6a80080 -- Wed Feb 27 09:26:03 2019 atime: 0x5c75e72b:c6a80080 -- Wed Feb 27 09:26:03 2019 mtime: 0x5c75e72b:c6a80080 -- Wed Feb 27 09:26:03 2019 crtime: 0x5c75e72b:c6a80080 -- Wed Feb 27 09:26:03 2019 Size of extra inode fields: 28 EXTENTS: [root@mylnx06 resource]# vi test.txt it is only a test [root@mylnx06 resource]# debugfs -R 'stat <13>' /dev/sdb1 debugfs 1.42.9 (28-Dec-2013) Inode: 13 Type: regular Mode: 0644 Flags: 0x80000 Generation: 3202520017 Version: 0x00000000:00000001 User: 0 Group: 0 Size: 0 File ACL: 0 Directory ACL: 0 Links: 0 Blockcount: 0 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x5c75e766:924da674 -- Wed Feb 27 09:27:02 2019 atime: 0x5c75e757:dfe24bb0 -- Wed Feb 27 09:26:47 2019 mtime: 0x5c75e72b:c6a80080 -- Wed Feb 27 09:26:03 2019 crtime: 0x5c75e72b:c6a80080 -- Wed Feb 27 09:26:03 2019 dtime: 0x5c75e766 -- Wed Feb 27 09:27:02 2019 Size of extra inode fields: 28 EXTENTS: [root@mylnx06 resource]# cat test.txt it is only a test [root@mylnx06 resource]# debugfs -R 'stat <13>' /dev/sdb1 debugfs 1.42.9 (28-Dec-2013) Inode: 13 Type: regular Mode: 0644 Flags: 0x80000 Generation: 3202520017 Version: 0x00000000:00000001 User: 0 Group: 0 Size: 0 File ACL: 0 Directory ACL: 0 Links: 0 Blockcount: 0 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x5c75e766:924da674 -- Wed Feb 27 09:27:02 2019 atime: 0x5c75e757:dfe24bb0 -- Wed Feb 27 09:26:47 2019 mtime: 0x5c75e72b:c6a80080 -- Wed Feb 27 09:26:03 2019 crtime: 0x5c75e72b:c6a80080 -- Wed Feb 27 09:26:03 2019 dtime: 0x5c75e766 -- Wed Feb 27 09:27:02 2019 Size of extra inode fields: 28 EXTENTS:
如果对应的设备为VG,一用也可以使用这个命令。如下所示:
# debugfs -R 'stat <131075>' /dev/mapper/vg_gettestlnx02-datalv
debugfs 1.41.12 (17-May-2010)
Inode: 131075 Type: directory Mode: 0710 Flags: 0x80000
Generation: 2892073157 Version: 0x00000000:0000004c
User: 27 Group: 27 Size: 4096
File ACL: 0 Directory ACL: 0
Links: 2 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x5b778fdf:2276fe98 -- Sat Aug 18 11:17:51 2018
atime: 0x5bc83c23:eb973518 -- Thu Oct 18 15:54:11 2018
mtime: 0x5aab2921:49ff497c -- Fri Mar 16 10:17:05 2018
crtime: 0x5aab3b03:b31acdd0 -- Fri Mar 16 11:33:23 2018
Size of extra inode fields: 28
Extended attributes stored in inode body:
selinux = "unconfined_u:object_r:mysqld_db_t:s0\000" (37)
EXTENTS:
(0): 532514
另外对于xfs类型的文件系统,测试发现,这种方式无效的,如下所示:
# debugfs -R 'stat <73281772>' /dev/sda2
debugfs 1.42.9 (28-Dec-2013)
/dev/sda2: Bad magic number in super-block while opening filesystem
stat: Filesystem not open
因为 Linux 文件系统种类繁多,本文不可能测试各种文件系统,这个超出了我的技术能力范围。其实,总结这篇文章,只是一个网友在群里咨询了这样问题。后面发现只有ext4文件系统才能找到准确的文件创建时间(当然,不排除还有其它文件类型也可以。)
参考资料:
https://askubuntu.com/questions/470134/how-do-i-find-the-creation-time-of-a-file
https://unix.stackexchange.com/questions/24441/get-file-created-creation-time
http://www.answers.com/Q/Why_doesn%27t_Linux_store_file_creation_time
https://wiki.archlinux.org/index.php/File_systems_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
以上所述就是小编给大家介绍的《Linux如何查找文件的创建时间》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- PHP有序表查找之二分查找(折半查找)算法示例
- 查找--插值查找(Java)
- 查找算法(一):查找
- 二叉查找树(查找、插入、删除)——C语言
- 数据结构和算法(Golang实现)(27)查找算法-二叉查找树
- 七大查找算法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。