Linux如何查找文件的创建时间
Linux的文件能否找到文件的创建时间取决于文件系统类型,在ext4之前的早期文件系统中(ext、ext2、ext3),文件的元数据不会记录文件的创建时间,它只会记录访问时间、修改时间、更改时间(状态更改时间)。
Access 是访问时间,文件数据的最后访问时间。例如读文件内容
Modify 是修改时间,文件数据的最后修改时间。例如使用VIM修改文件内容
Change 是状态更改时间,这个跟Modify时间很容易混淆,change time:更改文件的属性便会更新该时间,比如使用chmod命令更改文件属性,例如chmod、chown命令。或者执行其他命令时隐式的附带更改了文件的属性若文件大小等。
所以,对于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) |
hfsprogsAUR |
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) |
reiser4progsAUR |
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-linuxAUR |
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如何查找文件的创建时间的更多相关文章
- Linux 如何用命令查看binlog文件的创建时间
目录 背景 分析 方法 注意 背景 MySQL在26日 16:23:49产生了大量的慢查询,在这段时间内,binlog文件刷新的很快(查看慢日志是mysql DML并发比较多),想知道写完一个binl ...
- Linux如何查看文件的创建、修改时间?
Linux如何查看文件的创建.修改时间? 利用stat指令查看文件信息 三种时间的介绍 ATime --文件的最近访问时间 只要读取时间,ATime就会更新 MTime --文件的内容最近修改的时间 ...
- 目录和文件 按创建时间排序du -h --time --max-depth=1 . |sort -r -t $'\t' -k 2 Linux查看文件夹大小,并按文件夹创建时间排序
目录和文件 按创建时间排序 # du -h --time --max-depth=1 . |sort -r -t $'\t' -k 230M 2020-04-01 14:54 .28K 2020-04 ...
- Python 获取文件的创建时间,修改时间和访问时间
# 用到的知识# os.path.getatime(file) 输出文件访问时间# os.path.getctime(file) 输出文件的创建时间# os.path.getmtime(file) 输 ...
- linux命令---查找文件中的内容
linux命令---查找文件中的内容 [yang@localhost ~]$ cat 1.txt |egrep '123456789|second'-------匹配123456789或者seco ...
- C#/.NET 读取或修改文件的创建时间和修改时间
手工在博客中添加 Front Matter 文件头可是个相当费事儿的做法,这种事情就应该自动完成. .NET 中提供了非常方便的修改文件创建时间的方法,使用这种方法,能够帮助自动完成一部分文件头的编写 ...
- 在Linux下查找文件内容包含某个特定字符串的文件
如何在Linux下查找文件内容包含某个特定字符串的文件? 我的目录下面有test1和test2两个文件夹,里面都含有很多文件,其中test2里面还包含一个test文件夹 我想请问的是,如何通过查找关键 ...
- linux中查找文件属于那个软件包的方法
一.linux中查找文件属于那个软件包的方法 [root@salt prod]# whereis htpasswdhtpasswd: /usr/bin/htpasswd /usr/share/man/ ...
- Linux下的文件夹创建命令使用实践
[文章摘要] 本文以实际的C源程序为样例,介绍了Linux下的文件夹创建命令(mkdir)的用法.为相关开发工作的开展提供了故意的參考. [关键词] C语言 Linux 文件夹创建 makefi ...
随机推荐
- Android版数据结构与算法(五):LinkedHashMap核心源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 上一篇基于哈希表实现HashMap核心源码彻底分析 分析了HashMap的源码,主要分析了扩容机制,如果感兴趣的可以去看看,扩容机制那几行最难懂的 ...
- MySQL 四种隔离级别
什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...
- Hystrix源码解析
1. Hystrix源码解析 1.1. @HystrixCommand原理 直接通过Aspect切面来做的 1.2. feign hystrix原理 它的本质原理就是对HystrixCommand的动 ...
- 002-如何理解Java的平台独立性
本文首发于公众号:javaadu Java有句非常有名的口号--"一次编写,到处运行",依靠的就是JVM提供的平台独立性,本质上来讲,就是通过虚拟机技术,通过限制一些功能,达到屏蔽 ...
- Sql server数据库定时任务,数据库作业,数据库定时任务
当需要周期性的去执行一个方法时,我们可以先写好方法,然后交给数据库去完成就可以的. 步骤:首先打开SQL数据库中SQLServer代理-->右键作业-->新建作业: 如果SQL Serve ...
- mysql 表结构转excel表格
最近需要写文档,由于开发模式是先开发后写文档(不想吐槽...),数据库表结构什么的都搞好了,然后写文档的时候需要贴表结构,什么字段,类型,相关说明需要一一对应起来,数据库表10多张,字段又多,手动复制 ...
- CMake安装grpc生成gRPCTargets.cmake文件
以下是安装语句: cd grpc_folder git submodule update --init cmake .. make -j 4 sudo make install 然而编写依赖gRPC的 ...
- javascript 实现数据结构 - 栈
栈是一种遵从后进先出(LIFO)原则的有序集合.新添加的或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底.栈就好像是一个底部密封的盒子,我们往里面 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)
缘起 时间真快,现在已经是这个系列教程的下半部 Vue 第 12 篇了,昨天我也简单思考了下,可能明天再来一篇,Vue 就基本告一段落了,因为什么呢,这里给大家说个题外话,当时写博文的时候,只是想给大 ...
- string类的几种方法
string str="123abc456";int i=3;1 取字符串的前i个字符 str=str.Substring(0,i); // or str=str.Remov ...