Linux的文件可否找到文件的建立時間取決於文件系統類型,在ext4以前的早期文件系統中(ext、ext二、ext3),文件的元數據不會記錄文件的建立時間,它只會記錄訪問時間、修改時間、更改時間(狀態更改時間)。php
Access 是訪問時間,文件數據的最後訪問時間。例如讀文件內容node
Modify 是修改時間,文件數據的最後修改時間。例如使用VIM修改文件內容mysql
Change 是狀態更改時間,這個跟Modify時間很容易混淆,change time:更改文件的屬性便會更新該時間,好比使用chmod命令更改文件屬性,例如chmod、chown命令。或者執行其餘命令時隱式的附帶更改了文件的屬性若文件大小等。 linux
因此,對於ext、ext二、ext3文件格式的文件, 文件建立時間實際上是不存在的,若文件從建立後未曾修改過則可認爲建立時間=修改時間,若文件建立後狀態也未曾改變過文件屬性,則可認爲建立時間=狀態更改時間,若文件建立後未曾被讀取過則可認爲建立時間=訪問時間。可是不多有文件自建立後,從不被訪問、修改。因此基本沒法找到一個準確的建立時間,可是在ext4文件格式中,文件的建立時間保存在ext4文件系統的inode中,因此咱們可使用debugfs &stat命令來獲取準確的文件建立時間。sql
注意:Linux文件系統繁多,通常較常見的有:ext二、ext三、ext四、jfs、ReiserFS、XFS、Btrfs 。這裏面,我的只用過ext三、ext四、XFS文件系統類型。維基百科上列出的文件系統類型有下面這些,不少文件系統都沒有使用過,本文測試環境爲ext三、ext四、XFS。ubuntu
文件系統app |
建立命令工具 |
工具測試 |
Archiso [1]spa |
內核文檔 [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)