เวลาประทับเวลาการแก้ไขและเวลาที่สร้างไฟล์


105

ฉันเพิ่งรู้ls -tและls -fให้เรียงลำดับที่แตกต่างกันของไฟล์และไดเรกทอรีย่อยภายใต้ไดเรกทอรี

  • อะไรคือความแตกต่างระหว่างการประทับเวลาเวลาการแก้ไขและเวลาที่สร้างไฟล์
  • วิธีรับและเปลี่ยนแปลงข้อมูลประเภทนี้โดยคำสั่ง?
  • ในแง่ของข้อมูลประเภทใดที่ผู้คนพูดว่าไฟล์นั้น "ใหม่กว่า" กว่าคนอื่น?
  • การเปลี่ยนแปลงข้อมูลประเภทใดจะไม่ทำให้ไฟล์แตกต่างกัน?

ตัวอย่างเช่นฉันเห็นบางคนเขียนว่า:

โดยค่าเริ่มต้นโปรแกรม rsync จะดูว่าไฟล์มีขนาดและเวลาต่างกันหรือไม่ มันไม่สนใจว่าไฟล์ใดจะใหม่กว่าหากมันแตกต่างกันมันจะถูกเขียนทับ คุณสามารถส่งผ่าน '--update' ตั้งค่าสถานะเป็น rsync ซึ่งจะทำให้ข้ามไฟล์ในปลายทางหากไฟล์นั้นใหม่กว่าไฟล์ในแหล่งที่มา แต่ตราบใดที่เป็นไฟล์ประเภทเดียวกัน สิ่งนี้หมายความว่าถ้าเช่นไฟล์ต้นฉบับเป็นไฟล์ปกติและปลายทางคือ symlink ไฟล์ปลายทางจะถูกเขียนทับโดยไม่คำนึงถึงการประทับเวลา

ในหมายเหตุด้านข้างชนิดของไฟล์ที่นี่มีความหมายเฉพาะไฟล์ปกติและ simlink ไม่ใช่ประเภทเช่น pdf, jpg, htm, txt และอื่น ๆ ?


ดูเพิ่มเติมได้ที่askubuntu.com/questions/62492/…
rogerdpack

คำตอบ:


138

มี "timestamps" 3 ประเภท:

  • การเข้าถึง - ครั้งสุดท้ายที่อ่านไฟล์
  • แก้ไข - ครั้งล่าสุดที่ไฟล์ถูกแก้ไข (แก้ไขเนื้อหา)
  • เปลี่ยน - ข้อมูลเมตาครั้งล่าสุดของไฟล์มีการเปลี่ยนแปลง (เช่นการอนุญาต)

เพื่อแสดงข้อมูลนี้คุณสามารถใช้statซึ่งเป็นส่วนหนึ่งของ coreutils

stat จะแสดงข้อมูลเพิ่มเติมเช่นอุปกรณ์ inodes ลิงก์ ฯลฯ

จำไว้ว่าข้อมูลประเภทนี้ขึ้นอยู่กับระบบไฟล์และตัวเลือกการติดตั้ง ตัวอย่างเช่นหากคุณติดตั้งพาร์ติชันพร้อมnoatimeตัวเลือกจะไม่มีการเขียนข้อมูลการเข้าถึง

touchยูทิลิตี้ที่จะเปลี่ยนการประทับเวลาจะเป็น มีข้อโต้แย้งบางอย่างในการตัดสินใจว่าการประทับเวลาที่จะเปลี่ยนแปลง (เช่น -a สำหรับเวลาเข้าถึง, -m สำหรับเวลาแก้ไข) และมีอิทธิพลต่อการแยกวิเคราะห์ของการประทับเวลาที่กำหนดใหม่ ดูman touchรายละเอียดเพิ่มเติมได้ที่

touchสามารถใช้ร่วมกับcp -u( "คัดลอกเฉพาะเมื่อไฟล์ SOURCE ใหม่กว่าไฟล์ปลายทางหรือเมื่อไฟล์ปลายทางหายไป" ) หรือสำหรับการสร้างไฟล์มาร์กเกอร์ที่ว่างเปล่า


1
ขอบคุณ! สำหรับคำสั่ง rsync ใน "มันไม่สนใจว่าไฟล์ใดจะใหม่กว่า" ในแง่ของการประทับเวลาชนิดใดที่มันหมายความว่า "ใหม่กว่า" นอกจากนี้ในไฟล์บันทึกด้านข้างชนิดของไฟล์ที่ rsync ใส่ใจกับหมายถึงเฉพาะไฟล์ปกติและ simlink ไม่ใช่ประเภทเช่น pdf, jpg, htm, txt และอื่น ๆ ?
ทิม

2
โดยทั่วไปการอ้างอิงถึงเวลาของไฟล์คือการประทับเวลา "แก้ไข" ls -lตัวอย่างเช่นสิ่งที่คุณเห็นจาก และประเภทไฟล์หมายถึงไฟล์เทียบกับ symlink (หรือไฟล์ประเภทอื่นเช่นไดเรกทอรีหรืออุปกรณ์) ไม่ใช่ประเภทของข้อมูลในไฟล์ (text vs. jpeg เป็นต้น)
เซท L

2
@Tim ในบริบทดังกล่าวเป็นการแก้ไขเวลา rsync กำลังบอกว่าเมื่อมีการตัดสินใจว่าควรสำรองไฟล์หรือไม่จะไม่ตรวจสอบว่าไฟล์ต้นฉบับถูกแก้ไขเร็วกว่าการสำรองข้อมูลที่มีอยู่หรือไม่ (ซึ่งเป็นเรื่องปกติของโปรแกรมสำรองข้อมูล) มันแค่ตรวจสอบเพื่อดูว่าไฟล์มีขนาดแตกต่างกันหรือเวลาการปรับเปลี่ยนที่แตกต่างกันและสำรองถ้าเป็นเช่นนั้น
Michael Mrozek

1
และฉันจะรู้ได้อย่างไรว่าไฟล์ถูกสร้างขึ้นครั้งแรก? ข้อมูลนี้ถูกเก็บรักษาไว้ที่ใดที่หนึ่งหรือสูญหายในการอัพเดทหรือไม่? ดังนั้นจะบอกว่านานแค่ไหนที่ไฟล์มีอยู่ .. ?
xyz

1
หน้าสถิติ stat (2)อธิบายรายละเอียดเพิ่มเติมเมื่อมีการเปลี่ยนแปลงการประทับเวลา
Cristian Ciupitu

35

คำตอบของ echox นั้นถูกต้อง แต่ฉันต้องการเพิ่มข้อมูลเกี่ยวกับเวลาในการสร้างไฟล์

รองรับระบบไฟล์

บางระบบไฟล์สนับสนุนรายการเพิ่มเติมใน inode เกี่ยวกับเวลาการสร้าง (หรือเวลาเกิด) ฉันรู้ว่าext4 สนับสนุนคุณสมบัตินี้และยังJFS และ BTRFS

อย่างไรก็ตามเครื่องมือและ API ส่วนใหญ่ยังไม่ได้รับการอัปเดตเพื่ออ่านข้อมูลเพิ่มเติมนี้ ดังนั้นแม้ว่ามันจะอยู่ที่นั่น แต่ก็ไม่สามารถเข้าถึงได้

เช่นใน Ubuntu 12.04 LTS ฉันได้รับสิ่งต่อไปนี้สำหรับไฟล์ที่ฉันสร้างในวันนี้:

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

คุณสามารถเห็นได้ว่าฟังก์ชั่น stat ที่ใหม่กว่ามีฟิลด์เกิดแม้ว่าเอาต์พุตดูเหมือนจะไม่ถูกต้อง และผ่าน debugfs เราสามารถรับข้อมูล (crtime ขณะที่ฉันอยู่ในระบบไฟล์ ext4)

สนับสนุน statx

ขณะนี้มีตั้งแต่เคอร์เนล 4.11 การเรียกระบบ statx ใหม่นอกเหนือจากการสนับสนุนที่ดีขึ้นของ Y2038 หรือระบบไฟล์เครือข่ายก็ยังนำคุณสมบัติพิเศษบางอย่างเช่นการbtimeเข้าถึงเวลาหรือวันเกิด (เวลาสร้าง) การสนับสนุนสำหรับ ext4 ควรอยู่ในเคอร์เนลรีลีสเดียวกัน 4.11

มีแพตช์เพื่อเพิ่มการรองรับ syscall ใหม่นี้ในรุ่นเคอร์เนลในภายหลัง: เช่น BTRFS และ F2FS ในเคอร์เนล 4.13, SMB3 ใน 4.14, GFS2 ใน 4.15, NFS ใน 4.16 เป็นต้น

glibc ที่กำลังจะมาถึงจะให้การเรียกใช้ฟังก์ชันเพื่อสืบค้นอินเทอร์เฟซนี้ (ดูข่าว Phoronix เกี่ยวกับการสนับสนุน glibc statx ) ดังนั้นเราสามารถคาดหวังการสนับสนุนคุณลักษณะนี้ในพื้นที่ผู้ใช้ในไม่ช้า


คุณรู้หรือไม่ว่า btime ยังคงไม่เปลี่ยนแปลงเมื่อไฟล์จาก Windows (Creation time) ถูกย้ายไปยัง ext4 และในทางกลับกันเช่น mtime?
Paradroid

@paradroid ขอโทษฉันไม่ทราบคำตอบ หากคุณหมายถึงภายใต้ Linux เมื่อคัดลอกไฟล์จาก NTFS ไปยัง ext4 หนึ่งจะต้องดูในไดรเวอร์ NTFS หากมันสนับสนุนเวลาการสร้าง หากคุณหมายถึงภายใต้ Windows จะต้องดูในไดรเวอร์ ext4 สำหรับ Windows
Huygens
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.