Linux中查看文件的創建時間

一、簡介

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}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章