ฉันจะลดชื่อไฟล์ให้น้อยลงแทนที่จะใช้หมายเลขไอโหนดได้อย่างไร


11

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

ถ้าฉันเริ่มlessตามปกติแล้วless program.logกดShift+ fเพื่อท้ายเมื่อล็อกไฟล์หมุนฉันจะทำการตรวจสอบไฟล์บันทึกเก่าต่อไป ฉันถือว่านี่เป็นเพราะหมายเลข inode ยังคงเหมือนเดิมและlessมีการจัดการไฟล์ที่เปิดไปยัง inode นั้น

เป็นไปได้หรือไม่ที่จะตรวจสอบกิจกรรมล่าสุดในไฟล์บันทึกใด ๆ ที่ถูกเรียกในปัจจุบันprogram.log?

โดยเฉพาะฉันกำลังทำงานกับ Sun OS ดังนั้นทางออกที่ใช้งานได้ดีที่สุด


อาจtail -F program.log | lessจะใช้งานได้
sendmoreinfo

tail -f program.log คุณเคยลองไหม
ราหุลปาติล

คำตอบ:


17

ใช้less --follow-nameถ้ารุ่นของคุณlessรองรับ ตัวเลือกนั้นได้รับการแนะนำในรุ่น 416


คำตอบที่ดีเลิศ ทั้ง Solaris 10 และ Solaris 11 ใช้เวอร์ชันน้อยกว่า 436 ดังนั้นตัวเลือกนี้จึงใช้ได้จริง
unixhacker2010

5

lessตัวเลือกที่--follow-nameเป็นเพียงส่วนหนึ่งของการแก้ปัญหา;
ในการแทนที่tail -Fจำเป็นต้องมีอาร์กิวเมนต์อื่น:

less --follow-name +F file.log

ตัวเลือกอย่างเดียวเช่นless --follow-name file.logไม่เริ่มติดตามการอัพเดทไฟล์จริง ๆ ShiftFคุณจำเป็นต้องเข้าสู่โหมดการติดตามจะกด
(ออกจากโหมดเพื่อนำทางโดยControlC)

แทนที่จะติดตามไฟล์ให้--follow-name แก้ไขพฤติกรรมที่น้อยลง
มันทำให้คีย์คำสั่งShiftFด้านในของการlessติดตามตามชื่อไฟล์ไม่ใช่ตัวอธิบายไฟล์

นอกจากนี้ยังไม่มีตัวเลือกปกติที่จะเริ่มlessในโหมดติดตาม
แต่คุณสามารถใช้บรรทัดคำสั่งเพื่อให้การกดแป้นพิมพ์ในการดำเนินการหลังจากที่เริ่มต้นโดย prefixing +พวกเขาด้วย
การรวมตัวเลือกปรับแต่งด้วย+F, lessจริงจะเริ่มต้นใน (แก้ไข) โหมดการติดตาม

ใช้+Fคนเดียวเพื่อเทียบเท่าธรรมดาtail -f:

less +F file.log

1

ฉันเพิ่งพบคำตอบในคำถาม & คำตอบ U & L นี้: วิธีทำtail -fไฟล์ที่หมุนได้อย่างไร .

การใช้tail:

(หากติดตั้ง GNU tail บนระบบของคุณเป็นตัวเลือก)

tail -F program.log

จากหน้าคนหาง :

   -f,      --follow[={name|descriptor}]
            output appended data as the file grows; -f, 
            --follow, and --follow=descriptor are equivalent

   -F       same as --follow=name --retry

   --retry  keep  trying  to  open  a  file even when it is or becomes
            inaccessible; useful when following by name, i.e., with
            --follow=name

กุญแจสำคัญคือ--retryสวิตช์ tailคำสั่งนี้บอกให้พยายามลองติดตามไฟล์ตามชื่อ -Fสวิทช์ไม่ทั้งสองและ-f--retry

การใช้ less

ในฐานะที่เป็น @StephaneChazela ชี้ให้เห็นในความคิดเห็นต่อไปนี้จะไม่ทำงาน

tail -F program.log | less

ตัวเลือกอื่น ๆ ที่คุณมีคือการใช้งานน้อยลงโดยสมมติว่ามันรองรับ--follow-nameสวิตช์และlessไฟล์โดยตรงโดยใช้tailอย่างสมบูรณ์

less --follow-name program.log

ฉันไม่ชอบ Sun OS เป็นอย่างมากบางครั้ง ...
อเล็กซ์แชมเบอร์เลน

ฉันเห็นด้วยฉันทำงานเป็นเวลาหลายปีมันผลักดันให้คุณรู้ว่าเครื่องมือมีอายุประมาณ 10 ปีสำหรับแอพบางตัว ทำให้รู้สึกไม่ ไซต์นี้มีค่าสำหรับการรักษาสติของคุณบน Solaris: sunfreeware.com/introduction.html
slm

ถ้าคุณต้องการมีสติมากขึ้นลองดู pkgsrc.org :)
sendmoreinfo

มันไม่ได้ผล เพราะlessจะแฮงค์ถ้าคุณทำ "G" pr "F" ซึ่งคุณสามารถขัดจังหวะโดยการทำ "Ctrl-C" แต่แล้วมันก็ฆ่าหาง คุณสามารถภูมิคุ้มกันจากหางถึง Ctrl-C ได้ แต่ก็ยังใช้งานไม่ได้
Stéphane Chazelas

เกี่ยวกับ GNU tail: ลองดูสิ่งนี้สำหรับข้อมูลเกี่ยวกับเครื่องมือที่ควรมีอยู่ในโฮสต์ Solaris ใด ๆ (ตามจริงแล้ว GNU tail จะมีตามค่าเริ่มต้นใน Solaris 11) Solaris sysadmins มักจะทำให้ผู้ใช้ของพวกเขายากขึ้นเพราะพวกเขาออกจากการติดตั้งที่การติดตั้งที่เปลือยเปล่าในขณะที่เครื่องมือ GNU สำหรับ Solaris เป็นจริงวันนี้พร้อมใช้งานโดยตรงจาก Oracle หรือในบางกรณีส่วนหนึ่งของการติดตั้งเริ่มต้น ไม่มีเหตุผลที่จะไม่ทำให้มันเป็นส่วนหนึ่งของการติดตั้งของคุณ ไม่มีเหตุผลที่จะไปที่ repos 'ไม่เป็นทางการ' ดูลิงค์
unixhacker2010
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.