[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就比較難以變更。
- 變更檔案的 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表上的位置值,
# stat test.txt
or
# ls -i test.txt
再來是確認檔案所在的裝置位子,如果不確定檔案在哪個裝置上,可以用以下指令,
# df -t test.txt
再把查到的inode值和位置資料輸入到以下的指令中,假設查到的inode值是54692346
debugfs -R 'stat' debugfs -R 'stat <54692346>' /dev/xvda1
就可以找到檔案的crtime了,
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容易多了呢。
# 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