[Linux] DEBUGFS查看檔案的建立時間 & [Mac] GetFileInfo
Posted On 2018-05-17
一般來說用 ls 就可以查到檔案的建立時間,或是使用 stat 指令也可以查到,那到底為什麼還要特地使用別的指令來檢查呢?
有個小原因就是這兩個指令查到的時間都不一定是完全正確的,因為可以修改,
在Linux的環境中,時間大概有下面4種類型
- ctime: Shows file change time.
ctime會根據檔案的內容、所有權、屬性被變更時而改變。
-
atime: Shows file access time.
- mtime: Shows file modification time.
- crtime: Shows file creation time.
這4種分別就是代表建立(Create/Birth)、修改(Modify/mtime)、存取(Access/atime)及變更(Change/ctime),但建立日期在Linux上並沒有被儲存起來(應該說在檔案系統上沒有辦法很直觀的看到),因此,可以查到和修改的,就只有後面的三種類型,這三種中的修改(mtime)和存取(atime)日期可以用 touch 指令來改變,而crtime就比較難以變更。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
- 變更檔案的 atime/mtime 為目前的日期和時間 # touch test.txt - 變更檔案的 atime 為目前的日期和時間 # touch -a test.txt - 變更檔案的 mtime 為目前的日期和時間 # touch -m test.txt - 變更檔案的 atime/mtime 為指定日期,只指定日期,時間會變成000000 # touch -d 20150101 test.txt - 變更檔案的 atime/mtime 為指定日期和時間(2018/1/1 01:11:22) # touch -t 201801010111.22 atd.txt - 將 test.txt 檔案的日期和時間套到 test2.txt 檔案,但 ctime 不會被套用 # touch -r test.txt test2.txt - 檢視檔案的各種日期和時間 # stat test.txt - 用 ls 指令查看檔案的 mtime # ls -l - 用 ls 指令查看檔案的 ctime # ls -lc - 用 ls 指令查看檔案的 atime # ls -lu |
使用DEBUGFS來查檔案的正確建立時間:
可以用 stat 指令來查出該檔案在inode表上的位置值,
1 2 3 4 |
# stat test.txt or # ls -i test.txt |
再來是確認檔案所在的裝置位子,如果不確定檔案在哪個裝置上,可以用以下指令,
1 2 |
# df -t test.txt |
再把查到的inode值和位置資料輸入到以下的指令中,假設查到的inode值是54692346
1 2 |
debugfs -R 'stat <i_Node_Value>' <the file's location on device> debugfs -R 'stat <54692346>' /dev/xvda1 |
就可以找到檔案的crtime了,
1 2 3 4 5 |
ctime: 0x579ed684:8fd54a34 -- Mon Jan 1 10:26:36 2018 atime: 0x58aea120:3ec8dc30 -- Thu Feb 23 14:15:20 2018 mtime: 0x5628ae91:38568be0 -- Thu Jan 22 15:08:25 2018 crtime: 0x579ed684:8fd54a34 -- Mon May 1 10:26:36 2018 |
另外DEBUGFS是Linux上用來查看 Ext File System 用的指令,所以在Mac上就沒有這樣的指令可以用,反倒是Mac上的 GetFileInfo 可以使用而且比Linux容易多了呢。
1 2 3 4 |
# GetFileInfo test.txt created: 08/10/2017 12:05:20 modified: 08/10/2017 12:05:20 |
Reference
DEBUGFS Command – Show File Creation Times in Linux
OSX – How to get the creation & modification time of a file from the command line