欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Linux中如何查看文件的创建时间详解

程序员文章站 2022-05-12 18:04:58
一、简介 linux的文件能否找到文件的创建时间取决于文件系统类型,在ext4之前的早期文件系统中(ext、ext2、ext3),文件的元数据不会记录文件的创建时间,它只会记录访...

一、简介

linux的文件能否找到文件的创建时间取决于文件系统类型,在ext4之前的早期文件系统中(ext、ext2、ext3),文件的元数据不会记录文件的创建时间,它只会记录访问时间、修改时间、更改时间(状态更改时间)。典型的文件的基础信息如下所示:

[root@bugwz ~]# stat test.file
 file: ‘test.file'
 size: 2  blocks: 8  io block: 4096 regular file
device: 807h/2055d inode: 5255117 links: 1
access: (0755/-rwxr-xr-x) uid: ( 0/ root) gid: ( 0/ root)
access: 2019-12-12 19:11:33.175841399 +0800
modify: 2019-12-12 19:11:37.564970487 +0800
change: 2019-12-12 19:11:43.079132663 +0800
 birth: -
  • access:访问时间,文件数据的最后访问时间(例如:读文件内容);
  • modify:修改时间,文件数据的最后修改时间。(例如:修改文件内容);
  • change:状态更改时间,这个跟 modify 时间很容易混淆,文件的属性(权限,大小等)的变更时间;

二、实践

2.1、获取文件的创建时间

获取文件inode号,如下所示,拿到inode号为:5255117;

[root@bugwz data]# stat /data/test.file
 file: ‘/data/test.file'
 size: 2  blocks: 8  io block: 4096 regular file
device: 807h/2055d inode: 5255117 links: 1
access: (0755/-rwxr-xr-x) uid: ( 0/ root) gid: ( 0/ root)
access: 2019-12-12 19:11:33.175841399 +0800
modify: 2019-12-12 19:11:37.564970487 +0800
change: 2019-12-12 19:11:43.079132663 +0800
 birth: -

查找文件所在的磁盘路径,如下所示,拿到磁盘路径为:/dev/sda7

[root@bugwz data]# df -h
filesystem size used avail use% mounted on
/dev/sda3 3.9g 2.5g 1.2g 70% /
devtmpfs  16g 0 16g 0% /dev
tmpfs  16g 0 16g 0% /dev/shm
tmpfs  16g 1.7g 14g 11% /run
tmpfs  16g 0 16g 0% /sys/fs/cgroup
/dev/sda1 12g 11g 787m 94% /usr
/dev/sda5 7.8g 4.2g 3.2g 57% /tmp
/dev/sda7 235g 180g 44g 81% /data
/dev/sda6 7.8g 2.1g 5.3g 29% /var

使用debugfs查看文件的创建时间,发现创建时间crtime为:thu dec 12 19:05:23 2019

[root@bugwz data1]# debugfs -r 'stat <5255117>' /dev/sda7
debugfs 1.42.9 (28-dec-2013)
inode: 5255117 type: regular mode: 0755 flags: 0x80000
generation: 758605841 version: 0x00000000:00000001
user: 0 group: 0 size: 2
file acl: 0 directory acl: 0
links: 1 blockcount: 8
fragment: address: 0 number: 0 size: 0
 ctime: 0x5df2206f:12dddfdc -- thu dec 12 19:11:43 2019
 atime: 0x5df22065:29ec81dc -- thu dec 12 19:11:33 2019
 mtime: 0x5df22069:86b30fdc -- thu dec 12 19:11:37 2019
crtime: 0x5df21ef3:d586ca44 -- thu dec 12 19:05:23 2019
size of extra inode fields: 28
extents:
(0):16949121

2.2、集成脚本:

#!/bin/sh
[ $# -ne 1 ] && echo "usage: $0 {filename}" && exit 1

inode=`ls -i $1 |awk '{print $1}'`
filename=$1

# 如果传入参数带/,则获取这个传入参数的目录路径并进入目录
`echo $filename | grep / 1> /dev/null` && { fpwd=${filename%/*};fpwd=${fpwd:=/};cd ${fpwd};fpwd=`pwd`; } || fpwd=`pwd`

array=(`echo ${fpwd} | sed 's@/@ @g'`)
array_length=${#array[@]}

for ((i=${array_length};i>=0;i--)); do
 unset array[$i]
 subpwd=`echo " "${array[@]} | sed 's@ @/@g'`
 disk=`df -h |grep ${subpwd}$ |awk '{print $1}'`
 [[ -n $disk ]] && break
done

# 文件系统非ext4则退出
[[ "`df -t | grep ${disk} |awk '{print $2}'`" != "ext4" ]] && { echo ${disk} is not mount on type ext4! only ext4 file system support!;exit 2; }

debugfs -r "stat <${inode}>" ${disk}

参考地址:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。