2009年11月17日 星期二

ctime, atime與mtime釋疑

每個檔案都有屬性及內容。除了檔案內容很重要外,時間標記也非常重要--系統管理員可以藉由時間標記進行備份、例行性檢查;使用者可以從時間標記找出重要的檔案,硬碟的I/O也依靠時間標記(time flag)來進行處理。

UNIX系統將時間標記分成三種:

  1. atime(Access time):檔案上次被讀取的時間。
  2. ctime(status Change time):檔案的屬性或內容上次被修改的時間。
  3. mtime(Modified time):檔案的內容上次被修改的時間。

我們可以用一個很簡單的script來印證這些東西。

姑且把他命名為showTime.sh

1. 假設我們建立一個新檔:

touch newFile
執行showTime.sh,你會發現三種時間是相同的:
ctime: Nov 17 23:14
atime: Nov 17 23:14
mtime: Nov 17 23:14
2. 隔一分鐘後,寫入一些東西到檔案裡面:
echo "1st modified" > newFile
結果發現:
ctime: Nov 17 23:15
atime: Nov 17 23:14
mtime: Nov 17 23:15
3. 再隔一分鐘後,讀取這個檔案但不更動內容:
cat newFile
結果發現:
ctime: Nov 17 23:15
atime: Nov 17 23:16
mtime: Nov 17 23:15
4. 在隔一分鐘,僅修改屬性:
chmod g+wx newFile
結果發現:
ctime: Nov 17 23:17
atime: Nov 17 23:16
mtime: Nov 17 23:15

從這個lab裡我們可以得到以下結論:

  • ls -l所列出的長資訊,該時間是mtime。
  • 如果利用touch某檔案,則三種時間屬性均被更新。
  • 如果你修改了某一檔案內容,則ctime與mtime會更新。
  • 如果某檔案僅被讀取或另存新檔,則只有atime會被改變。
  • 如果你只改變檔案屬性(如權限、檔名、所有人或是suid、acl、chattr等),則只有ctime被更新。
  • atime相較之下是最常變動的時間標記,可以將之關閉以增進I/O,特別是多人多工,小檔案多以及laptop環境。filesystem設定裡可以增加noatime屬性,或是chattr +A固定住atime(chattr僅適用於ext2/3/4系列的filesystem)

沒有留言: