ว่าด้วยเรื่องเวลา atime, mtime, ctime ของไฟล์บน Unix

เวลาของไฟล์บน Unix มีประโยชน์อย่างมากสำหรับผู้ใช้ ไม่ว่าจะใช้ดูเพื่อหาว่า ไฟล์นี้ถูกเปลี่ยนแปลงไปเมื่อไร เก่าไป หรือใหม่กว่าอย่างไร

อีกประการ ยังถูกใช้โดยโปรแกรม Backup เพื่อเลือกไฟล์สำหรับการทำ Backup แบบ Incremental คือ เลือกเฉพาะไฟล์ที่เพิ่มขึ้นใหม่ หรือไฟล์ที่ถูกเปลี่ยนแปลงเท่านั้น

เวลาของไฟล์บน Unix มีอยู่ 3 ค่า คือ atime, ctime, mtime ในที่นี้จะอธิบายการเปลี่ยนแปลงของค่าเวลาต่างๆ ดังนี้

ใช้คำสั่ง date เพื่อดูเวลาที่ทดสอบ

[user1@devel time]$ date
Sat Jun  4 13:54:20 ICT 2011

สร้างไฟล์เปล่าๆ ด้วยคำสั่ง touch

[user1@devel time]$ touch test1.txt

ใช้คำสั่ง ls -l เพื่อดูข้อมูลไฟล์เบื้องต้น

[user1@devel time]$ ls -l test1.txt
-rw-rw-r-- 1 user1 user1 0 Jun  4 13:54 test1.txt

ใช้คำสั่ง stat เพื่อดูข้อมูลไฟล์โดยละเอียด

[user1@devel time]$ stat test1.txt
  File: `test1.txt'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 2749831     Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  500/   user1)   Gid: (  500/   user1)
Access: 2011-06-04 13:54:23.000000000 +0700
Modify: 2011-06-04 13:54:23.000000000 +0700
Change: 2011-06-04 13:54:23.000000000 +0700

หมายเหตุ เวลาที่แสดงจากคำสั่ง ls -l เป็นเวลา Modify (mtime)

เวลา Access (atime)

เมื่อไฟล์ถูก access หรือดูเนื้อหาภายในไฟล์  เวลา Access (atime) จะถูกปรับปรุงโดยอัตโนมัติ

เช่น ใช้คำสั่ง cat เพื่อเรียกดูไฟล์ เวลา Access (atime) ก็จะถูกเปลี่ยนไป ตามเวลาที่ access

[user1@devel time]$ date
Sat Jun  4 13:57:35 ICT 2011
[user1@devel time]$ cat test1.txt
[user1@devel time]$ ls -l test1.txt
-rw-rw-r-- 1 user1 user1 0 Jun  4 13:54 test1.txt
[user1@devel time]$ stat test1.txt
  File: `test1.txt'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 2749831     Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  500/   user1)   Gid: (  500/   user1)
Access: 2011-06-04 13:57:37.000000000 +0700
Modify: 2011-06-04 13:54:23.000000000 +0700
Change: 2011-06-04 13:54:23.000000000 +0700

สังเกตว่า เวลาของไฟล์ จากการรันคำสั่ง ls -l ไม่เปลี่ยนแปลง เพราะ mtime ไม่เปลี่ยน

เวลา Change (ctime)

เมื่อมีการเปลี่ยนแปลงข้อมูลเกี่ยวกับ Inode ของไฟล์ เช่นการเปลี่ยน Owner, Group, Permission เวลา ctime จะถูกปรับปรุง

ตัวอย่างการเปลี่ยน permission ทำให้เวลา ctime เปลี่ยนแปลง

[user1@devel time]$ date
Sat Jun  4 14:05:06 ICT 2011
[user1@devel time]$ chmod 600 test1.txt
[user1@devel time]$ ls -l test1.txt
-rw-rw-r-- 1 user1 user1 0 Jun  4 13:54 test1.txt
[user1@devel time]$ stat test1.txt
  File: `test1.txt'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 2749831     Links: 1
Access: (0600/-rw-------)  Uid: (  500/   user1)   Gid: (  500/   user1)
Access: 2011-06-04 13:57:37.000000000 +0700
Modify: 2011-06-04 13:54:23.000000000 +0700
Change: 2011-06-04 14:05:09.000000000 +0700

สังเกตว่า เวลา Access (atime), Modify (mtime) หรือเวลาจากคำสั่ง ls -l ไม่เปลี่ยนแปลงไป เพราะคำสั่ง chmod เปลี่ยนแค่ข้อมูลใน Inode

เวลา Modify (mtime)

เมื่อเนื้อหาในไฟล์ถูกแก้ไข เวลา Modify (mtime) จะถูกปรับปรุง ตัวอย่างเช่น 

[user1@devel time]$ date
Sat Jun  4 14:09:29 ICT 2011
ใช้คำสั่ง echo และ shell redirection ">" เพิ่มเนื้อหาเข้าไปในไฟล์
[user1@devel time]$ echo "add more content to file" >> test1.txt
[user1@devel time]$ ls -l test1.txt
-rw------- 1 user1 user1 25 Jun  4 14:09 test1.txt
[user1@devel time]$ stat test1.txt
  File: `test1.txt'
  Size: 25              Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 2749831     Links: 1
Access: (0600/-rw-------)  Uid: (  500/   user1)   Gid: (  500/   user1)
Access: 2011-06-04 13:57:37.000000000 +0700
Modify: 2011-06-04 14:09:38.000000000 +0700
Change: 2011-06-04 14:09:38.000000000 +0700

เมื่อเนื้อหาในไฟล์ถูกเปลี่ยน  เวลา Change (ctime) ก็จะถูกปรับไปด้วย

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.