Linux如何查找文件的建立時間

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
xfs-delayed-logging-design.txt
xfs-self-describing-metadata.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)

相關文章
相關標籤/搜索