คุณอธิบายtail
ยูทิลิตี้GNU ความแตกต่างระหว่างการตั้งค่าสถานะทั้งสองนี้คือถ้าฉันเปิดไฟล์ล็อกไฟล์เช่นนี้:
$ tail -f /var/log/messages
... และถ้าหากสิ่งอำนวยความสะดวกในการหมุนบันทึกในเครื่องของฉันตัดสินใจที่จะหมุนไฟล์บันทึกนั้นในขณะที่ฉันกำลังดูข้อความที่กำลังเขียน ("หมุน" หมายถึงลบหรือย้ายไปยังตำแหน่งอื่น ฯลฯ ) ผลลัพธ์ที่ฉันเห็นจะ หยุด.
ถ้าฉันเปิดไฟล์tail
แบบนี้:
$ tail -F /var/log/messages
... และอีกครั้งไฟล์จะถูกหมุน, การส่งออกจะยังคงไหลในคอนโซลของฉันเพราะtail
จะเปิดแฟ้มเร็วที่สุดเท่าที่มันจะกลายเป็นใช้ได้อีกครั้งคือเมื่อโปรแกรม (s) เขียนเพื่อบันทึกเริ่มเขียนไปใหม่ /var/log/messages
ในระบบ BSD ฟรีไม่มี-F
ตัวเลือก แต่tail -f
จะทำงานเหมือนtail -F
ในระบบ GNU โดยมีความแตกต่างที่คุณได้รับข้อความ
tail: file has been replaced, reopening.
ในเอาต์พุตเมื่อไฟล์ที่คุณกำลังตรวจสอบหายไปและปรากฏขึ้นอีกครั้ง
คุณสามารถทดสอบสิ่งนี้ได้
ในหนึ่งเซสชั่นเปลือกทำ
$ cat >myfile
ตอนนี้จะรอให้คุณพิมพ์รายการ เพียงไปข้างหน้าและพิมพ์ซึ่งพูดพล่อยๆไม่กี่บรรทัด มันจะถูกบันทึกลงในไฟล์myfile
ทั้งหมด
ในเชลล์เซสชั่นอื่น (อาจอยู่ในเทอร์มินัลอื่นโดยไม่ขัดจังหวะcat
):
$ tail -f myfile
สิ่งนี้จะแสดงเนื้อหา (จุดสิ้นสุด) ของmyfile
ในคอนโซล หากคุณกลับไปที่เซสชันแรกของเชลล์และพิมพ์อะไรเพิ่มเติมออกผลลัพธ์นั้นจะปรากฏทันทีtail
ในเซสชันเชลล์ที่สอง
ตอนนี้เลิกcat
ได้โดยการกดCtrl+Dและลบmyfile
ไฟล์:
$ rm myfile
จากนั้นเรียกใช้แมวอีกครั้ง:
$ cat >myfile
... และพิมพ์บางอย่างไม่กี่บรรทัด
ด้วย GNU tail
บรรทัดเหล่านี้จะไม่ปรากฏขึ้นในเซสชั่นเปลือกที่สอง (ซึ่งtail -f
ยังคงทำงานอยู่)
ทำซ้ำการออกกำลังกายด้วยtail -F
และสังเกตความแตกต่าง