เวลาเปลี่ยนไปอย่างไร


8

ฉันพยายามเข้าใจอย่างถ่องแท้เมื่อเปลี่ยนเวลาบันทึกของไฟล์ ในหลาย ๆ ที่ (เช่นในคำตอบที่ยอมรับได้ที่นี่ ) ขอแนะนำว่าการเปลี่ยนแปลงใด ๆ ในแอตทริบิวต์ของไฟล์จะเปลี่ยนเวลา อย่างไรก็ตามดูเหมือนว่าจะไม่เป็นจริงอย่างน้อยใน Ubuntu 12.04 ของฉัน (ใช่ฉันรู้ว่ามันค่อนข้างเก่า ... ):

cat file.txt > /dev/null

เปลี่ยน atime ดังนั้นจึงเปลี่ยนแอตทริบิวต์ของไฟล์ (ใน inode ไฟล์) แต่ไม่เปลี่ยน ctime

แหล่งข้อมูลอื่น ๆ (เช่นที่นี่และที่นี่ ) แนะนำว่ามีการดำเนินการบางอย่างกับแอตทริบิวต์ของไฟล์เท่านั้นที่เปลี่ยน ctime แต่ไม่มีการระบุรายการที่แม่นยำ

ฉันจะหาข้อมูลอ้างอิงที่แม่นยำสำหรับการดำเนินการใดที่เปลี่ยนเวลา


บางทีปัญหาเกี่ยวข้องกับcatคุณตรวจสอบด้วยtouchหรือไม่
มาห์ดี

คำตอบ:


8

มีการประทับเวลาสามครั้งในระบบ Unix:

  • atime: เวลาในการเข้าถึง

    การประทับเวลานี้จะบอกคุณเมื่อไฟล์ถูกเข้าถึงครั้งล่าสุดรวมถึงการเข้าถึงเพื่ออ่านเท่านั้น

  • ctime: เปลี่ยนเวลา

    การประทับเวลานี้จะบอกคุณว่าเมื่อใดที่แอตทริบิวต์ไฟล์(ข้อมูล inode) เปลี่ยนแปลงครั้งสุดท้าย ซึ่งรวมถึงการเป็นเจ้าของและการอนุญาตเช่นกัน แต่การเปลี่ยนแปลงเนื้อหายังทำให้เกิดการอัปเดตการประทับเวลานี้

    โปรดทราบว่าการเปลี่ยนแปลงในatime นั้นดูเหมือนจะเป็นข้อยกเว้นเนื่องจากไม่ทำให้เกิดการอัพเดตเวลา อาจเป็นเพราะการเข้าถึงแบบอ่านอย่างง่ายซึ่งเพียงพอที่จะทริกเกอร์การอัพเดต atime ไม่ได้ทำการเปลี่ยนแปลงใด ๆ ที่เกี่ยวข้องกับแอตทริบิวต์ของไฟล์ และหนึ่งในวัตถุประสงค์หลักของเวลาคือการช่วยเครื่องมือสำรองเพื่อตรวจสอบว่ามีการเปลี่ยนแปลงไฟล์หรือไม่ atime เป็นข้อมูลที่ไม่เกี่ยวข้องสำหรับเครื่องมือดังกล่าวและอัปเดตการสำรองข้อมูลเพียงเพื่ออัปเดต atime ที่มีการเปลี่ยนแปลงเนื่องจากมีคนอ่านไฟล์จะไร้ประโยชน์

    ฉันไม่แน่ใจ แต่บางคนคิดว่าพฤติกรรมนี้ (การเปลี่ยนแปลง atime ไม่อัปเดตเวลา) เป็นเพราะตัวเลือกการเมาท์ (เช่นrelatime) ของระบบไฟล์ที่สำคัญซึ่งแคชและหน่วงเวลาอัปเดต atime ใน inode ด้วยเหตุผลด้านประสิทธิภาพในหน่วยความจำ และนำไปใช้กับไอโหนดจริงเท่านั้นบนดิสก์ (เรียกใช้การปรับปรุงเวลา) ภายใต้เงื่อนไขบางประการ
    @kos ลองใช้งานและเห็นได้ชัดว่าเมื่อติดตั้ง FS ด้วยตัวเลือก "เข้มงวด" เวลาจะดูเหมือนว่าจะไม่อัปเดตหากมีการเปลี่ยนแปลงของเวลา

  • mtime: เวลาแก้ไข

    การประทับเวลานี้จะบอกคุณเมื่อเนื้อหาของไฟล์ถูกแก้ไขในครั้งสุดท้าย


ดังนั้นการเข้าถึงการอ่านอย่างง่ายโดยใช้cat FILENAMEเพียงแค่เปลี่ยนatimeแต่ไม่ใช่ctimeเนื่องจากไม่มีการแก้ไขไฟล์คุณลักษณะ Atime ที่เปลี่ยนแปลงจะไม่นับรวม


นั่นเป็นประเด็น: ทำไมการเปลี่ยนแปลงที่เกิดขึ้นจึงไม่นับ? ไม่ใช่แอตทริบิวต์ของไฟล์ใช่ไหม
VeryHardCoder

@VeryHardCoder ฉันพยายามอธิบายคำตอบของฉันอย่างละเอียดในจุดนั้นและเพิ่มคำอธิบายบางอย่าง
ผู้บัญชาการไบต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.