ฉันจะดูไฟล์ทั้งหมดและรอให้มีการเพิ่มข้อมูลเพิ่มเติมลงในไฟล์นั้นได้อย่างไร


21

ฉันต้องการอ่านไฟล์ทั้งหมดและทำให้รอการป้อนข้อมูลเหมือนtail -f แต่แสดงไฟล์ที่สมบูรณ์

ความยาวของไฟล์นี้จะเปลี่ยนแปลงเสมอเนื่องจากเป็น.logไฟล์

ฉันจะทำอย่างไรถ้าฉันไม่ทราบความยาวของไฟล์


2
คุณรู้อยู่แล้วว่าหางอยู่ใกล้กับสิ่งที่คุณต้องการ คุณอ่าน man page สำหรับมันหรือไม่?
njzk2

1
lessมีคีย์ "F" มีประโยชน์ถ้าคุณต้องการการโต้ตอบ
Thorbjørn Ravn Andersen

คำตอบ:


33

tailช่วยให้คุณเพิ่มเพื่อระบุจำนวนของเส้นที่จะแสดงผลจากปลายซึ่งสามารถใช้ร่วมกับ-n -fหากอาร์กิวเมนต์สำหรับการ-nเริ่มต้นด้วย+นั่นคือการนับบรรทัดจากจุดเริ่มต้น ( 0และการ1แสดงไฟล์ทั้งหมด2ระบุข้ามบรรทัดแรกตามที่ระบุโดย @Ben) ดังนั้นเพียงทำ:

tail -f -n +0 filename

ถ้าล็อกไฟล์ของคุณได้รับการหมุนคุณสามารถเพิ่ม--retry(หรือรวม-f and --retryเข้า-Fเป็น @Hagen แนะนำ)

นอกจากนี้ยังทราบว่าในขั้วกราฟิกคุณสามารถใช้เมาส์และPageUp/ PageDownเพื่อเลื่อนกลับเข้ามาในประวัติศาสตร์ (สมมติว่าบัฟเฟอร์ของคุณก็พอขนาดใหญ่) ข้อมูลนี้มีการเข้าพักแม้ว่าคุณจะใช้Ctrl+ เพื่อออกC tailถ้าคุณใช้lessนี้อยู่ไกลที่สะดวกสบายและ AFAIK น้อยกว่าที่คุณจะต้องใช้แป้นพิมพ์สำหรับการเลื่อนและผมไม่ทราบวิธีการที่จะทำให้lessจาก deinitialising termcap -Xหากคุณลืมที่จะเริ่มต้นด้วย


1
+1 คำตอบของคุณปรากฏขึ้นทันทีที่ฉันโพสต์ของฉันและถึงแม้ว่างานของฉันจะดีกว่า
Julie Pelletier

1
ฉันได้รับข้อความขณะที่ฉันยังพิมพ์ว่ามีคำตอบอื่นอยู่ที่นั่นและฉันควรคลิกเพื่อรีเฟรช คำตอบของคุณจะได้งานทำ แต่ผมจะไม่แปลกใจนับจากจุดเริ่มต้น (บังคับกับที่+) จะดำเนินการได้อย่างมีประสิทธิภาพมากขึ้น
Anthon

1
+1+0สำหรับการเรียนการสอนเกี่ยวกับฉัน คุณอาจต้องการ-Fแทนที่จะ-fใช้ logfiles แบบหมุน
Hagen von Eitzen

ฉันคิดว่ามีแบบออฟไลน์อยู่ที่นี่ tail -n +1แสดงจุดเริ่มต้นของไฟล์ให้ฉันและtail -n +2ข้ามหนึ่งบรรทัด ฉันคิดว่าหมายเลขนั้นเป็นหมายเลขบรรทัดของบรรทัดแรกที่แสดง
Ben Millwood

1
@ ขอบคุณมาก! นี่คือสิ่งที่ฉันต้องการ!
malworm

37

มีวิธีที่ดีกว่าในการบรรลุเป้าหมายนี้:

less +F <file>

มันจะแสดงไฟล์ทั้งหมดให้คุณมีพลังเต็มที่lessและจะรออินพุตใหม่ หากคุณต้องการหยุดรออินพุตและอ่านชิ้นส่วนเฉพาะคุณสามารถหยุดมันด้วย^Cและกลับมาทำงานต่อFได้

Fคำสั่งอยู่เสมอในlessถ้าคุณตัดสินใจที่จะดูการเปลี่ยนแปลงในขณะที่มีไฟล์ที่เปิดlessตีFจะเปิด ขอบคุณhiergiltdiestfuและwildcard ที่ชี้ให้เห็น


2
tailนี้เป็นจริงดีกว่า ขอบคุณสำหรับทิป; ฉันไม่เคยคิดที่จะใช้lessสิ่งนี้ หมายเหตุสำหรับคนอื่น ๆ : คุณยังสามารถเพียงแค่เรียกใช้และจากนั้นประเภทless <file> F
Wildcard

3

นอกจากคำตอบ / u / Anthon คุณสามารถทำสิ่งต่อไปนี้:

{ cat filename; tail -0f filename; }

ที่-0ตัวเลือกในการหางเทียบเท่ากับ-n 0ความหมาย: 0 สายโชว์ แต่-fจะแสดงบรรทัดใหม่

{ }คุณไม่จำเป็นต้องวงเล็บ ฉันใช้พวกเขาเพราะบางครั้งคุณต้องการเปลี่ยนเส้นทางตัวจัดเก็บไฟล์ในบางวิธี ตัวอย่างเช่น

{ cat ; tail -0f -; } < /var/log/messages

ตั้งข้อสังเกตโดย Ben Milwood: คุณอาจมีสภาวะการแข่งขันที่ไฟล์จะเติบโตขึ้นระหว่างการสิ้นสุดของการcatดำเนินการและการเริ่มต้นของtailการดำเนินการ แต่อีกครั้งนี่เป็นปัญหา "วิชาการ" เพื่อแก้ปัญหาการศึกษา


3
หากไฟล์เติบโตระหว่างเมื่อcatเสร็จสิ้นและtailเริ่มต้นคุณจะไม่เห็นบรรทัดเหล่านั้น ไม่น่าจะเป็นเรื่องใหญ่ แต่เป็นเหตุผลที่ชอบtailโซลูชันที่บริสุทธิ์
Ben Millwood

ฉันคิดว่า{ cat; tail -n +0 -f; } < fileจะแก้ไขการแข่งขันเพราะหางจะพิมพ์ข้อมูลใหม่ใด ๆ ที่ปรากฏขึ้นระหว่างการcatออกและการtailเริ่มต้นของ แน่นอนมันทำให้catซ้ำซ้อน การเปลี่ยนเส้นทางจะเกิดขึ้นเพียงครั้งเดียวและtailstdin เป็นตัวอธิบายไฟล์ที่catอ่านไปยัง EOF แล้วดังนั้นตำแหน่งปัจจุบันของตำแหน่งจึงcatหยุด คุณสามารถทดสอบได้โดยการใส่echo foo >> fileข้างใน{}เพื่อสร้างการแข่งขันทุกครั้ง
Peter Cordes

2

watch คำสั่งควรทำเพื่อคุณ

คุณยังสามารถลอง

less +FG 

คุณจะมีตัวเลือกเพิ่มเติมพร้อมlessคำสั่งเพื่อเลื่อนดูไฟล์ตามที่คุณบอกว่าเป็นไฟล์ขนาดใหญ่


น้อยกว่าไม่ติดตามไฟล์ที่กำลังเติบโต
Shadur

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