เหตุใดการเรียงลำดับไฟล์ตามเวลาเข้าถึงจึงไม่ทำงาน


12

ฉันพยายามใช้คำสั่ง ls --time=atime

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

เมื่อฉันพิมพ์touch file.txtเวลาเข้าถึงจะเปลี่ยนไป แต่เมื่อฉันพิมพ์vim file.txtเวลาเข้าถึงจะไม่เปลี่ยนแปลง

เกิดอะไรขึ้นที่นี่?


คุณใช้ระบบปฏิบัติการอะไร ลีนุกซ์รุ่นใหม่หลายรุ่นปิดตัวเอง มันเป็นค่าเริ่มต้นในเมล็ดลีนุกซ์ล่าสุด
Gilles 'หยุดความชั่วร้าย'

ฉันใช้ Ubuntu 10.04
xralf

คุณจะทำอย่างไรหลังจากทำงานvim file.txt? คุณออกเป็นกลุ่มโดย:qหรือ:wq? หากคุณไม่ได้เขียนvimอย่าแก้ไขเวลาเข้าถึงไฟล์ - นี่คือการออกแบบ
rozcietrzewiacz

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

คำตอบ:


14

ด้วยตัวเลือกเมาท์เริ่มต้นเวลาเข้าถึงจะได้รับการจัดการในลักษณะพิเศษบน linux:

relatime- การเมานต์ระบบไฟล์พร้อมตัวเลือกนี้จะทำให้เวลาในการเข้าถึงได้รับการอัปเดตหากเป็น (ก่อนการอัพเดตจะเกิดขึ้น) เร็วกว่าเวลาแก้ไข สิ่งนี้จะลดการเขียนที่เกิดจากการปรับปรุง atime อย่างมาก

relatimeตัวเลือกติดตั้งได้ถูกทำให้ตัวเลือกเริ่มต้นตั้งแต่ลินุกซ์เคอร์เนล 2.6.30 นั่นคือเหตุผลที่ls --time=atimeไม่แสดงรายการสิ่งที่คุณคาดหวัง

วิธีแก้ปัญหา:เมื่อต้องการใช้ลักษณะการทำงานแบบเข้มงวด (ดั้งเดิม) สำหรับ atime ใช้strictatimeตัวเลือกการเมาท์ (เช่นใน/etc/fstab)

หมายเหตุ:เพื่อการปรับปรุงปิดการใช้งานอย่างสมบูรณ์ atime noatimeหนึ่งสามารถใช้


สิ่งนี้ช่วยได้ ขอบคุณ. เท่าไหร่ช้าลงระบบจะมีstrictatime?
xralf

การอัปเกรด atime ค่อนข้างค่าใช้จ่าย (การเข้าถึงดิสก์ตามกำหนดเวลาหนึ่งครั้งเพื่ออัปเดต inodes ทุกครั้งที่เข้าถึงเนื้อหาไฟล์) โดยเฉพาะอย่างยิ่งหากไฟล์ขนาดเล็กจำนวนมากมีส่วนเกี่ยวข้องการปรับปรุง atime อาจทำให้โหลดดิสก์เพิ่มเป็นสองเท่า ส่วนใหญ่โปรแกรมที่ใช้เวลาเข้าถึงจะต้องการตรวจสอบว่าatime> mtimeหรือไม่เท่านั้น ดังนั้นตัวเลือกเริ่มต้นใหม่จะrelatimeรักษาความเข้ากันได้สำหรับโปรแกรมเหล่านั้น noatimeในความเป็นจริงโปรแกรมน้อยมากยังคงพึ่งพานี้และก็มักจะปลอดภัยในการใช้งาน
Stéphane Gimenez

ฉันชอบstrictatimeคุณสมบัติที่ฉันลองวันนี้ แต่ถ้ามันจะทำให้ระบบช้าฉันต้องการตั้งค่าstrictatimeเฉพาะในบางไดเรกทอรีถ้ามันจะเป็นไปได้
xralf

1
ในทางปฏิบัติแล้วมันจะช้ากว่ามากที่สุด 1% หรือ 2% อาจสูงถึง 5% บนเซิร์ฟเวอร์ที่มีโหลดดิสก์สูง ถ้าคุณสนใจเกี่ยวกับประสิทธิภาพเป็นไปได้ที่จะ จำกัด การอัปเดต atime ให้กับไดเร็กทอรีเฉพาะโดยใช้ fs เฉพาะที่เมาท์ด้วยstrictatimeซึ่งจะใช้ไดเรกทอรีนี้เป็นจุดเมานท์
Stéphane Gimenez

2

คุณสามารถปิดการบันทึกเวลาการเข้าถึงไฟล์ระบบบางส่วน (มองหาnoatimeใน/etc/fstab) เพื่อทดสอบสิ่งนี้คุณสามารถลองtouch -a file; ls -l --time=atime fileแล้วทำซ้ำtouch -a file; ls -l --time=atime fileเพื่อดูว่ามีการเปลี่ยนแปลงหรือไม่

lsพฤติกรรมจะอธิบายโดยman ls: ls -l --time=atimeแสดงเข้าถึงเวลาในวันที่คอลัมน์ที่ / เวลา เพื่อจัดเรียงตามคีย์นี้คุณต้องใช้--sort=timeเช่นกัน

หากคุณโดย "เวลาไม่เปลี่ยนแปลง" หมายความว่ามันแสดงผลลัพธ์เดียวกันนั่นอาจเป็นเพราะ atime ถูกปิดใช้งานสำหรับระบบไฟล์ (ดู/etc/fstab) หรือเพราะเวลาในการเข้าถึงนั้นเหมือนกับเวลาแก้ไข (โดยทั่วไป)

โปรดทราบว่าการแสดงรายการไฟล์ไม่เปลี่ยนเวลาในการเข้าถึง - ไฟล์ไม่สามารถเข้าถึงได้โดยlsใช้แคชไอโหนดเท่านั้น


เมื่อฉันพิมพ์ls -l --time=atimeเวลาจะไม่เปลี่ยนแปลง (ฉันถือว่าคอลัมน์ที่มีเวลาเป็น atime) และลำดับการเรียงจะไม่เปลี่ยนแปลงไฟล์ที่มี atime ล่าสุดควรอยู่ที่จุดเริ่มต้นหรือท้ายรายการ (ถ้ามีการเข้าถึงครั้งล่าสุด )
xralf

@xralf คุณทำซ้ำทั้งสอง touchและls? ฉันแก้ไขคำตอบเพื่อให้ชัดเจนยิ่งขึ้น
rozcietrzewiacz

เมื่อฉันพิมพ์ touch file.txt เวลาเข้าถึงจะเปลี่ยนไป แต่เมื่อฉันพิมพ์ vim file.txt เวลาในการเข้าถึงจะไม่เปลี่ยนแปลง
xralf

1

อาจเป็นประโยชน์เมื่อทำการทดสอบเช่นนี้เพื่อเพิ่มการ--full-timeตั้งค่าสถานะเพื่อlsให้คุณได้เห็นวินาทีและวินาทีย่อยเพื่อให้คุณสามารถเห็นผลโดยไม่ถูก จำกัด โดยขอบเขตนาที

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