linux系统下如何获取文件的创建时间

news2024/10/5 21:25:44

linux 获取文件的创建时间

提到获取文件的创建时间,写Java的小伙伴可能会说,那太简单了,java.nio.file.attribute.BasicFileAttributes下这个类不就记录了文件的相关信息吗,比如下面这段代码不就得到文件的创建时间了嘛!

@Test
public void getCreateTime () {
    File file = new File("d://aaa.txt");
    BasicFileAttributes attr = null;
    long fileCreateTime = 0L;
    try {
        Path path =  file.toPath();
        attr = Files.readAttributes(path, BasicFileAttributes.class);
        fileCreateTime = attr.creationTime().toMillis();
    } catch (Exception e) {
        logger.info("", e);
    }
    org.joda.time.DateTime dateTime = new DateTime(fileCreateTime);
    String createTimeStr = dateTime.toString("yyy-MM-dd HH:mm:ss");
    System.out.println(createTimeStr);
}
2022-12-20 13:12:15

在这里插入图片描述

但是查看这个问题的小伙伴可能也已经发现了,该方法在windows系统下可以精准获取到文件的创建时间,但是在linux系统下就获取不到了,拿到的时间不再是文件创建的时间了。

这里先贴出答案,亲测有效。

前置条件:文件存储的文件系统类型必须为 ext4

查看文件系统的类型:df -T

root@firefly:/data# df -T
Filesystem     Type     1K-blocks     Used Available Use% Mounted on
udev           devtmpfs   1962992        0   1962992   0% /dev
tmpfs          tmpfs      1969212    12056   1957156   1% /dev/shm
tmpfs          tmpfs         5120        4      5116   1% /run/lock
tmpfs          tmpfs      1969212        0   1969212   0% /sys/fs/cgroup
/dev/nvme0n1p1 ext4     983456156 20055680 913373932   3% /data

可以到 /data 目录(你要查看的文件所在的文件系统,这里我的文件是在这个下面的)对应的文件系统类型是ext4
/dev/nvme0n1p1 ext4 983456156 20055680 913373932 3% /data

命令行:

debugfs -R "stat <$(ls -i %s | awk '{print $1}')>" %s | grep crtime
  • 第一个参数: 文件的路径
  • 第二个参数:文件所对应的文件系统
root@firefly:/data# debugfs -R "stat <$(ls -i /data/forensics/763a802c-9549-11ed-aee9-a3f2e5f5fe79/mvzbnrg6_20230116105707900_006.ts | awk '{print $1}')>" /dev/nvme0n1p1 | grep crtime
debugfs 1.44.1 (24-Mar-2018)
crtime: 0x63c5143c:28d1b940 -- Mon Jan 16 17:09:16 2023

这里简单说一下这个命令:

首先看下里面的命令 ls -i /data/forensics/ls -i /data/forensics/763a802c-9549-11ed-aee9-a3f2e5f5fe79/mvzbnrg6_20230116105707900_006.ts | awk '{print $1}'

查看当前文件的inode节点:

root@firefly:/data/forensics/763a802c-9549-11ed-aee9-a3f2e5f5fe79# ls -i /data/forensics/763a802c-9549-11ed-aee9-a3f2e5f5fe79/mvzbnrg6_20230116105707900_006.ts  | awk '{print $1}'
55312393

外部的命令,获取该文件的属性信息:

root@firefly:/data/forensics/763a802c-9549-11ed-aee9-a3f2e5f5fe79# debugfs -R "stat <55312393>" /dev/nvme0n1p1 |grep crtime
debugfs 1.44.1 (24-Mar-2018)
crtime: 0x63c5143c:28d1b940 -- Mon Jan 16 17:09:16 2023

可以看到获取到的是标准日期格式,然后我们将标准日期格式转换为我们自己的日期格式就行了。(只获取答案的话,那么到这里就可以结束了)

linux中的文件系统

linux中几种基本的文件系统:ext文件系统、ext2文件系统、ext3文件系统、ext4文件系统、Reiser文件系统、JFS文件系统、XFS文件系统、ZFS文件系统、Btrfs文件系统。

在ext4文件系统中添加了文件的创建时间。

Inode: 55312393   Type: regular    Mode:  0644   Flags: 0x80000
Generation: 607039320    Version: 0x00000000:00000001
User:     0   Group:     0   Project:     0   Size: 26929684
File ACL: 0
Links: 1   Blockcount: 52600
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x63c514f8:8c005aa8 -- Mon Jan 16 17:12:24 2023
 atime: 0x63c5143c:28d1b940 -- Mon Jan 16 17:09:16 2023
 mtime: 0x63c514f8:8c005aa8 -- Mon Jan 16 17:12:24 2023
crtime: 0x63c5143c:28d1b940 -- Mon Jan 16 17:09:16 2023
Size of extra inode fields: 32
Inode checksum: 0xce916ae6
EXTENTS:
(0-6574):11711488-11718062

可以看到一共有

  • ctime: 更改文件的属性会更新其时间,例如修改文件的权限,文件的大小发生变化等。
  • atime: 文件的访问时间,
  • mtime: 文件的修改时间,修改文件内容后该时间会发生改变。
  • crtime: 文件的创建时间,文件创建时的时间,该时间存储在inode节点中。

可能有小伙伴会说,我测试了,crtime是会发生改变的。

root@firefly:/data# touch abc.txt
root@firefly:/data# debugfs -R "stat <$(ls -i /data/abc.txt |awk '{print $1}')>" /dev/nvme0n1p1

Inode: 14   Type: regular    Mode:  0644   Flags: 0x80000
Generation: 607039787    Version: 0x00000000:00000001
User:     0   Group:     0   Project:     0   Size: 0
File ACL: 0
Links: 1   Blockcount: 0
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x63c520e6:2d597c68 -- Mon Jan 16 18:03:18 2023
 atime: 0x63c520e6:2d597c68 -- Mon Jan 16 18:03:18 2023
 mtime: 0x63c520e6:2d597c68 -- Mon Jan 16 18:03:18 2023
crtime: 0x63c520e6:2d1c7368 -- Mon Jan 16 18:03:18 2023
Size of extra inode fields: 32
Inode checksum: 0x15fa8f4c
EXTENTS:

root@firefly:/data# vi abc.txt  # 添加内容后,保存
root@firefly:/data# debugfs -R "stat <$(ls -i /data/abc.txt |awk '{print $1}')>" /dev/nvme0n1p1

Inode: 18   Type: regular    Mode:  0644   Flags: 0x80000
Generation: 607039792    Version: 0x00000000:00000001
User:     0   Group:     0   Project:     0   Size: 8
File ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x63c521e2:904b1548 -- Mon Jan 16 18:07:30 2023
 atime: 0x63c521e2:8f19e848 -- Mon Jan 16 18:07:30 2023
 mtime: 0x63c521e2:8f56f148 -- Mon Jan 16 18:07:30 2023
crtime: 0x63c521e2:8f19e848 -- Mon Jan 16 18:07:30 2023
Size of extra inode fields: 32
Inode checksum: 0x87f54b72
EXTENTS:
(0):38901761


时间都变了,还记得我们说过 crtime是存储在inode节点中的。

当我们使用vi 命令后其实默认会修改我们的inode节点号的。查看当前文件的inode号,vi后再次查看inode号。

root@firefly:/data# ls -i abc.txt
18 abc.txt
root@firefly:/data# vi abc.txt
root@firefly:/data# ls -i abc.txt
17 abc.txt

可以看到使用vi命令后会修改我们文件的唯一标识号 inode。实际上我们进行vi操作的时候,系统默认 backupcopy=no,此时会先将文件重命名为 abc.txt~,然后创建一个新的文件abc.txt,然后向里面写入内容。所以此时的文件已经发生了改变。

我们可以在进行vi的时候设置 backupcopy属性为yes,这时候系统会创建一个abc.txt~的副本,然后在abc.txt里面进行修改,此时文件没有发生改变。所以inode 也不会改变。这时我们可以看到文件crtime还是我们最初创建的时间。

dhfgddsfhjdshgf
~
~
:set backupcopy=yes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chrono_CLOCK(二)

chrono_CLOCK&#xff08;二&#xff09; 文章目录chrono_CLOCK&#xff08;二&#xff09;从测量C程序运行时间引入C风格C风格时钟的成员和源码分析成员函数成员变量Clock提供的操作例子三个clock区别例子三个clock的精度问题方式一方式二从测量C程序运行时间引入 C风格 在C…

数据库,计算机网络、操作系统刷题笔记33

数据库&#xff0c;计算机网络、操作系统刷题笔记33 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle…

自定义View的学习笔记1-1

这一系列主要是跟随扔物线的学习笔记。 自定义View主要是三个部分&#xff0c;绘制&#xff0c;布局&#xff0c;触摸反馈。 绘制是这三个部分中&#xff0c;最重要的一个。 先说绘制&#xff0c;所谓绘制&#xff0c;指的就是控件内容的显示。啥意思&#xff0c;比如我们作…

02 技术太卷我学Apex-级联值列表

02 技术太卷我学Apex-级联值列表 0 值列表概念 就是页面输入时从下拉列表中选择固定值。 值列表可以在APEX中【共享组件】-【其它组件】-【值列表】创建&#xff0c;也可以也页面上自己用sql语句&#xff08;一般需要级联值列表最好在页面上创建&#xff09;创建。 1 创建一…

Node版本锁定

Node版本锁定问题方案一、锁定Node版本二、自动切换Node版本问题 接手项目时&#xff0c;不知道项目所用的Node版本同一个项目&#xff0c;不同人用不同的Node版本&#xff0c;引起编译后的未知问题 方案 一、锁定Node版本 在package.json中配置 engines&#xff0c;限定项目…

【微电网】基于改进粒子群算法的微电网优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

云原生周刊 | 使用 ChatGPT 协助解决 Prometheus 告警

开源项目推荐 kubernetes-chatgpt-bot 这是一个适用于 Slack 的 ChatGPT 机器人&#xff0c;只要有监控告警发送到 Slack 频道中&#xff0c;你就可以通过机器人向 ChatGPT 咨询如何解决这个告警&#xff0c;ChatGPT 将会给出一个较为详细的解决方案。 Copacetic Copacetic …

WEB文件管理器和上传器:GleamTech FileUltimate 8.5.1.0

GleamTech FileUltimate适用于 ASP.NET Core、MVC 和 WebForms 的FileUltimate文件管理器和上传器 将文件管理器快速集成到您的 ASP.NET 应用程序或站点中。 使用访问控制浏览和管理文件。 接受具有高级上传功能的文件&#xff08;上传器也可作为独立组件使用&#xff09;。 提…

应用程序进程启动过程

1 应用程序进程简介 想要启动一个应用程序&#xff0c;首先要保证这个应用程序所需要的应用程序进程已经启动。 AMS 在启动应用程序时会检查这个应用程序所需要的应用程序进程是否已经存在&#xff0c;如果不存在就会请求 Zygote 进程启动需要的应用程序进程。 在 Zygote进程启…

2023牛客寒假算法基础集训营1--鸡玩炸蛋人(带权并查集) 诈骗题?

题目如下&#xff1a; 示例1 输入 6 4 1 2 2 3 1 3 4 6 0 0 0 0 0 0输出 14示例2 输入 6 4 1 2 2 3 1 3 4 6 0 0 0 0 2 0输出 1题目链接 题解 or 思路&#xff1a; 首先如果我们理解题意了&#xff0c;这个题是顶级诈骗。 因为是无向图&#xff0c;我们需要记录图中 环…

算法第十三期——BFS-双向广搜

双向广搜 应用场景&#xff1a;有确定的起点s和终点t&#xff1b;把从起点到终点的单向搜索&#xff0c;变换为分别从起点出发和从终点出发的“相遇”问题。操作&#xff1a;从起点s(正向搜索&#xff09;和终点t(逆向搜索&#xff09;同时开始搜索&#xff0c;当两个搜索产生…

编程太难不适合女生学?来看 N 多小姐姐的回应!

某女程序员&#xff1a;我要去互联网公司做程序员&#xff1f;网友&#xff1a;你疯了&#xff1f;程序员很累的... 女生不适合做程序员&#xff0c;还是去做产品经理吧。画外音&#xff1a;我去&#xff0c;产品经理不累吗&#xff1f;并不是女生不适合写代码&#xff0c;也不…

python cairosvg 库专题博客,10分钟掌握 cairosvg

cairosvg 库用于将 SVG 图像转换为其他图片格式。它使用 Cairo 库来绘制 SVG 图像&#xff0c;并支持将 SVG 图像转换为 PNG、PDF、PS、SVG 和 GIF 格式。 python cairosvgPython cairosvg 上手案例cairosvg 直接将 svg 图像转换为二进制数据cairosvg 库函数清单总结Python cai…

趣味三角——第1章——角

平面角是平面内相交但不在一条直线上的两条直线之间的倾角(A plane angle is the inclination to one another of two lines in a plane which meet one another and do not lie in a straight line.)。 ——Euclid(欧几里得), 元素(The Elements)&#xff0c;定义8。 几何实体…

【C++】Hash开散列,unordered_set(map) 的封装以及迭代器的实现

上一篇博客我们使用闭散列的方式实现了 Hash&#xff0c;其实在STL库unordered_set、unordered_map中底层是开散列的方式实现的Hash&#xff0c;所以&#xff0c;本篇博客就再使用开散列的方式实现Hash&#xff0c;并将unordered_set、unordered_map进行封装。 目录 一、开散…

C 数据结构1 —— 线性表-顺序表\单链表\双链表

文章目录1. 线性表1.1 定义1.2 特点2. 顺序表(顺序存储结构)2.1 定义(存储结构代码描述)2.2 插入元素2.2.1 图形演示2.2.2 代码表示2.3 删除元素2.3.1 图形演示2.3.2 代码表示2.4 完整代码2.5 动态分配数组3. 单链表(链式存储结构)3.1 定义(存储结构代码描述)3.2 单链表的读取3…

COCO_04 展示COCO格式数据集 目标框与分割mask

文章目录1 前言2 绘制GT2.1 绘制目标框与类别2.2 绘制分割mask3 AppendixA. mask polygon格式转化为图片格式参考1 前言 上篇文章介绍了如何制作COCO个数数据集的Dataset与Dataloader&#xff0c;并绘制了dataloader->batch的返回的信息&#xff0c;https://blog.csdn.net/…

【打卡】医学搜索Query相关性判断学习赛

入坑传送门 赛事介绍 文本匹配拥有广泛的应用场景&#xff0c;可以用于去除重复问题和文本相似度中。在本次学习中我们将学习&#xff1a; 如何计算文本之间的统计距离如何训练词向量 & 无监督句子编码BERT模型搭建和训练 上述步骤都是一个NLP算法工程师必备的基础&…

【GD32F427开发板试用】02-ADC规则组连续采样

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;Stark_GS ADC 简介及特点 器件中集成了一个 12 位 2.6 MSPS 多通道 ADC。 一共有19个多路复用通道&#xff1a;16个外部通道&#xff0c;1个…

office365删除错误发送的邮件

微软喜欢变&#xff0c;office365删个邮件真是不容易。 --管理员登录 Connect-IPPSSession -UserPrincipalName adminmydomain.onmicrosoft.com --创建一个 "deleteemail"的搜索项目&#xff0c;项目名可以任意起&#xff0c;这个名称后面在office365安全合规门户里…