ระบบปฏิบัติการลินุกซ์ติดตาม timestamp สามค่าสำหรับแต่ละไฟล์บนระบบของคุณ Timestamp เหล่านี้ช่วยให้คุณค้นพบว่าไฟล์ถูกอัปเดตครั้งสุดท้ายเมื่อไหร่ แต่มันหมายถึงอะไร? และคุณจะหาเวลาเหล่านี้สำหรับไฟล์ได้อย่างไร? มีความแตกต่างเมื่อมันมาถึง directories ไหม?
การเข้าใจ atime, ctime และ mtime สามารถตอบคำถามทั้งหมดนี้ได้ นี่คือ timestamp สามค่าที่ Unix filesystems ติดตาม หากคุณต้องการค้นหารายละเอียดเกี่ยวกับสิ่งที่เปลี่ยนและเมื่อไหร่ อ่านต่อไป
Timestamp Unix สามค่าคืออะไร?
แต่ละไฟล์มี timestamp สามค่าที่เกี่ยวข้องกับมัน ลินุกซ์จัดเก็บเหล่านี้ในรูปแบบ Unix time ซึ่งวินาทีนับจาก epoch Timestamp สามค่านี้มักถูกอ้างอิงว่า atime, ctime และ mtime
mtime เป็นที่พบบ่อยที่สุดและบ่อยครั้งที่มีประโยชน์ที่สุด มันย่อมาจาก modified time มันคือเวลาที่เนื้อหาของไฟล์ถูกเขียนลงดิสก์ครั้งสุดท้าย
แตกต่างออกไปเล็กน้อยคือ ctime ซึ่งย่อมาจาก change time Timestamp นี้ติดตามการเปลี่ยนแปลง metadata เช่น การเป็นเจ้าของและ permissions มันรวมการเปลี่ยนชื่อไฟล์ด้วย - อย่างน้อยบน Linux OS สมัยใหม่ทั่วไป แต่มันยังอัปเดตเมื่อเนื้อหาของไฟล์เปลี่ยน ดังนั้นมันจึงทันสมัยเท่ากับ mtime เสมอ
Timestamp ที่สามคือ atime ซึ่งจัดเก็บครั้งล่าสุดที่ใครเข้าถึงไฟล์
Timestamp ใช้กับ Directories อย่างไร?
Directory ลินุกซ์ในฐานะพื้นฐานคือรายการของไฟล์ใน directory นั้น ดังนั้น การสร้างไฟล์ภายใน directory จะอัปเดต mtime ของ directory นั้น การแสดงรายการไฟล์ใน directory โดยใช้คำสั่ง ls ตัวอย่างเช่น จะอัปเดต access time ของมัน และเหมือนกับไฟล์ การเปลี่ยน permissions หรือชื่อของ directory จะอัปเดต ctime ของมัน
Creation Time เป็นอย่างไร?
อาจทำให้คุณประหลาดใจที่จะรู้ว่าลินุกซ์เพียงแค่ไม่ติดตาม creation time คุณอาจสมมติเริ่มต้นว่า ctime ย่อมาจาก creation time เช่นกัน คุณอาจคิดว่ามันเป็นสิ่งที่มีประโยชน์มากที่จะค้นพบได้
แอปพลิเคชันหลายอย่างบันทึกไฟล์โดยการสร้างพวกเขาใหม่จากศูนย์ทุกครั้ง นี่จะทำให้การใช้ creation time ผิดทาง
วิธีดู Timestamp ต่างๆ
วิธีที่ง่ายที่สุดในการได้ข้อมูล timestamp คือด้วยคำสั่ง ls รูปแบบ long เริ่มต้นแสดงรายละเอียดสำหรับ mtime:
$ date
Sat Mar 6 16:57:01 GMT 2021
$ echo "hello, world" > tmp
$ ls -l tmp.txt
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp
คุณสามารถแสดง atime แทนได้โดยใช้ flag -u:
$ date
Sat Mar 6 16:59:33 GMT 2021
$ cat tmp
hello, world
$ ls -lu tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp
$ ls -l tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp
บรรทัดสุดท้ายยืนยันว่า mtime ของไฟล์นี้แตกต่างจาก atime สุดท้าย ใช้ flag -c เพื่อดู ctime:
$ date
Sat Mar 6 17:02:34 GMT 2021
$ mv tmp tmp2
$ ls -lc tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 17:02 tmp2
$ ls -l tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp2
$ ls -lu tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp2
ครั้งนี้ เรายืนยันว่าเวลาทั้งสามแตกต่างและถูกต้อง: เรา modify, แล้ว access, แล้ว change ไฟล์ ตามลำดับนั้น
ทางเลือกแทน ls คือคำสั่ง stat คำสั่งนี้แสดงรายละเอียด low-level จาก inode ของไฟล์ มันทำให้ตรวจสอบเวลาทั้งสามพร้อมกันง่ายขึ้น มันยังหลีกเลี่ยงปัญหาของ flag -u ที่ไม่直觀 นี่คือตัวอย่าง output สำหรับไฟล์เดียวกัน:
$ stat tmp2
File: `tmp2'
Size: 13 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 327688 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2021-03-06 16:59:45.000000000 +0000
Modify: 2021-03-06 16:57:59.000000000 +0000
Change: 2021-03-06 17:02:43.000000000 +0000
วิธีอัปเดต Timestamps
คำสั่ง touch เปลี่ยน modification และ access times ของไฟล์ มันยังเป็นวิธีสะดวกในการสร้างไฟล์ว่าง ซึ่งมันจะทำหากไฟล์ไม่มีอยู่แล้ว:
touch tmp
โดยค่าเริ่มต้น มันจะตั้งค่า mtime และ atime เป็นเวลาปัจจุบัน คุณสามารถตั้งค่าเวลาที่แตกต่างได้ด้วย flag -t:
touch -t 202103061200 tmp
คุณยังสามารถตั้งค่า mtime หรือ atime เพียงอย่างใดอย่างหนึ่งได้ด้วย flag -m และ -a ตามลำดับ:
touch -t 202103061300 -m tmp
โปรดทราบว่า ctime จะอัปเดตเสมอเมื่อเราตั้งค่า atime หรือ mtime
วิธีหาไฟล์โดยอิงจาก Timestamps
คำสั่ง find เป็นเครื่องมืออีกอย่างที่กระทำต่อ timestamps มันสามารถกรองไฟล์โดยอิงจาก atime, ctime หรือ mtime ตัวอย่างเช่น:
find . -amin 15
จะหาไฟล์ที่ถูกเข้าถึง 15 นาทีที่แล้วพอดี ในขณะที่:
find . -mtime -2
จะหาไฟล์ที่ถูกแก้ไขภายใน 2 วันที่ผ่านมา
ลินุกซ์ติดตามทุกไฟล์สามครั้ง
File timestamp ที่อ้างอิงบ่อยที่สุดคือ mtime นี่คือวันที่และเวลาที่การแสดงรายการไฟล์แสดง ตัวอย่างเช่น แต่วันที่สองอีกอันก็อาจมีประโยชน์เช่นกัน หากคุณเข้าใจว่าพวกเขาอ้างอิงถึงอะไร โดยเฉพาะ จำไว้เสมอว่า ctime แทน change time ไม่ใช่ creation time
คำสั่งอย่าง touch และ stat เป็นสมาชิกที่มีประโยชน์ของชุดเครื่องมือบรรทัดคำสั่งลินุกซ์ คำสั่งเหล่านี้จะเพิ่มประสิทธิภาพเวิร์กโฟลว์ลินุกซ์ของคุณโดยการอนุญาตให้คุณสร้างไฟล์ใหม่ได้อย่างรวดเร็ว