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 ...
随机推荐
- 【学习笔记Part 2● MySQL】
数据库 为什么要用数据库 如何去存放数据?生活中有各种各样的数据.比如说人的姓名.年龄.成绩等.平时我们记录这些信息都是记在大脑中.人的记忆力有限,不可能什么都记住.所以后来人们把数据记录在石头上–& ...
- MVC、MVP、MVVM 模式对比
MVC.MVP和MVVM这些开发模式为了分离视图(View)和模型(Model)而提出来的,直白说就是为了前后端分离. 1. MVC(Model View Controller)模式 MVC是比较直观 ...
- 土旦:关于display:flex碰上white-space nowrap 影响布局的问题
背景,做一个前面图片宽度固定,后面宽度自适应,使用到了flex布局,但是想让后面div里文字不换行,超出以点点表示时,这时布局就乱了,查了下,原来flex布局与white-space:nowrap有影 ...
- 前端笔记之CSS(上)
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可以静态 ...
- Git使用详细教程(8):Git分支
目录 创建分支 查看分支 切换分支 删除分支 分支合并 探寻分支本质 创建分支 当我们使用git init projectName命令的时候,Git就会默认帮我们创建一个分支,名字叫做master. ...
- kubernetes 客户端KubeClient使用及常用api
KubeClient是kubernetes 的C#语言客户端简单易用,KubeClient是.NET Core(目标netstandard1.4)的可扩展Kubernetes API客户端, gith ...
- 华为云.NET Core支持情况调查
各大公有云都提供了开发者开发的SDK,今天我们来看看华为云对.NET Core的支持情况怎么样? .NET SDK地址 https://developer.huaweicloud.com/sdk#.N ...
- 一句话HTML编辑器
一句话HTML编辑器 data:text/html,<body oninput="i.srcdoc=h.value"><style>#i{width:70% ...
- 最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备
在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面 ...
- RecyclerViewLoadMoreDemo【封装上拉加载功能的RecyclerView,搭配SwipeRefreshLayout实现下拉刷新】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装含有上拉加载功能的RecyclerView,然后搭配SwipeRefreshLayout实现下拉刷新.上拉加载功能. 在项目中将 ...