Time

修改日期和inode的修改日期有什麼區別?

  • July 6, 2021

我剛剛在以下位置找到了一些有趣的資訊man stat

a, m, c, B
The time file was last accessed or modified, of when the inode was last changed, or the birth time of the inode.

但是文件最後修改時間和inode的修改時間有什麼區別呢?我正在編寫一個 bakup-bash 腳本,它只允許從兩個幾乎相同的目錄複製最後修改的文件,所以我需要知道我更喜歡使用哪個值:)

Access: 2014-05-20 11:04:27.012146373 -0700
Modify: 2014-04-05 20:59:32.000000000 -0700
Change: 2014-05-20 11:04:22.405479507 -0700

訪問:上次檢查文件內容的時間。

Modify:上次更改文件內容的時間。

Change:上次更改文件的 inode 的時間。

更改時間包括修改權限和所有權等內容,而修改時間專門指文件內容。

或更準確地說(來自man 2 stat):

st_atime 欄位由文件訪問更改,例如,execve(2)、mknod(2)、pipe(2)、utime(2) 和 read(2)(大於零字節)。其他常式,如 mmap(2),可能會也可能不會更新 st_atime。

st_mtime 欄位會因文件修改而改變,例如 mknod(2)、truncate(2)、utime(2) 和 write(2)(大於零字節)。此外,目錄的 st_mtime 會隨著目錄中文件的創建或刪除而改變。st_mtime 欄位不會因所有者、組、硬連結計數或模式的更改而更改。

欄位 st_ctime 通過寫入或設置 inode 資訊(即所有者、組、連結計數、模式等)來更改。

有趣的是,直接操作文件時間算作對 inode 的修改,這會將 ctime 與目前時鐘時間相撞。因此,您可以將 ctime 設置為目前時間,但不能將其設置為任何其他時間,就像其他兩個時間一樣。這使得ctime成為一個有用的金絲雀,可以在文件的mtime可能被移回時發現。

此外,雖然您可以在不更改文件內容的情況下更改 inode(即ctime可以在mtime不更改的情況下更改),但反之則不然。每次您修改文件的內容時,您也必然會碰到ctime

引用自:https://unix.stackexchange.com/questions/132660