ฉันรู้ว่ามีคำสั่งเกี่ยวกับ Unix ที่ฉันสามารถใช้เพื่อตรวจสอบไฟล์และดูการเปลี่ยนแปลงที่กำลังเขียนลงไป สิ่งนี้มีประโยชน์มากโดยเฉพาะการตรวจสอบไฟล์บันทึก
คุณรู้ไหมว่ามันเรียกว่าอะไร?
ฉันรู้ว่ามีคำสั่งเกี่ยวกับ Unix ที่ฉันสามารถใช้เพื่อตรวจสอบไฟล์และดูการเปลี่ยนแปลงที่กำลังเขียนลงไป สิ่งนี้มีประโยชน์มากโดยเฉพาะการตรวจสอบไฟล์บันทึก
คุณรู้ไหมว่ามันเรียกว่าอะไร?
คำตอบ:
tail -F
จะติดตามชื่อไฟล์แทนวัตถุไฟล์ซึ่งมีประโยชน์อย่างยิ่งในกรณีที่มีการหมุนไฟล์บันทึก
tailf
เลิกใช้แล้วและtail -f
ปลอดภัย (ยืนยันสิ่งนี้ในระบบของคุณด้วยman tailf
) ดูเอกสารประกอบ: man7.org/linux/man-pages/man1/tailf.1.html
คุณอาจหมายถึงหางตามคำตอบของ Jon Skeet
อีกคนหนึ่งที่มีประโยชน์เป็นนาฬิกา ; มันช่วยให้คุณสามารถเรียกใช้คำสั่งเป็นระยะและดูผลลัพธ์แบบเต็มหน้าจอ ตัวอย่างเช่น:
ดู -n 10 -d ls -l / var / adm / ข้อความ
จะรันคำสั่งls -l /var/adm/messages
ทุก 10 วินาทีและเน้นความแตกต่างในเอาต์พุตระหว่างการรันครั้งต่อไป (มีประโยชน์สำหรับการดูว่า logfile เติบโตเร็วแค่ไหน)
inotifywait
จากinotify-toolsมีประโยชน์ถ้าคุณต้องการเรียกใช้คำสั่งทุกครั้งที่มีการเปลี่ยนแปลงไฟล์ (หรือไฟล์ใด ๆ ในไดเรกทอรี) ตัวอย่างเช่น:
inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
path
ไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับชื่อตัวแปร บนzsh
ดูเหมือนว่าสภาพแวดล้อมไม่ได้เป็นแบบตรงตามตัวพิมพ์ใหญ่ - เล็ก สำหรับฉันแล้วการตั้งค่ายังpath
ทำให้เกิดPATH
การตั้งค่าและนั่นก็หมายความว่าไม่มีอะไรจะทำงานจนกว่าคุณจะแก้ไข เปิดbash
การตั้งค่าpath
ไม่มีผลใดPATH
ๆ
ฉันชอบใช้มากกว่าless +FG
1tail -f
เพราะฉันพบว่าตัวเองต้องการค้นหาไฟล์บันทึกสำหรับข้อผิดพลาดหรือรหัสเฉพาะ หากฉันต้องการค้นหาสิ่งใดฉันพิมพ์^C
เพื่อหยุดติดตามไฟล์และ?
เริ่มค้นหาย้อนหลัง
vi
ผูกที่สำคัญจะสวยมากเช่นเดียวกับใน คำสั่งใด ๆ สามารถเริ่มต้นเมื่อเริ่มต้นโดยใช้+
ตัวเลือก:
+cmd Causes the specified cmd to be executed each time a new file is
examined. For example, +G causes less to initially display each
file starting at the end rather than the beginning.
สำหรับบันทึกที่ยาวมากฉันคิดว่ามันสะดวกที่จะใช้-n
ตัวเลือกที่จะปิดหมายเลขบรรทัด จาก manpage:
-n or --line-numbers
Suppresses line numbers. The default (to use line numbers) may
cause less to run more slowly in some cases, especially with a
very large input file. Suppressing line numbers with the -n
option will avoid this problem. Using line numbers means: the
line number will be displayed in the verbose prompt and in the =
command, and the v command will pass the current line number to
the editor (see also the discussion of LESSEDIT in PROMPTS
below).
1. Hat-tip ถึงrgmarchaเพื่อชี้เรื่องนี้ในความคิดเห็น
alias
ด้วยตัวเลือกที่คุณต้องการดังนั้นคุณไม่จำเป็นต้องพิมพ์มันทุกครั้ง
หางเป็นที่ดี ... น้อยนอกจากนี้ยังสามารถนำมาใช้เริ่มน้อยลงในไฟล์เช่น myfile น้อยแล้วกด+Shift Fมันมีหางเล็กน้อย
ฉันกำลังแก้ไขไฟล์ LaTeX และต้องการตรวจสอบมันสำหรับการเปลี่ยนแปลงที่อยู่ตรงกลาง ฉันทำวิปเชลล์เชลล์ต่อไปนี้ซึ่งพิสูจน์แล้วว่ามีประโยชน์กับฉัน ฉันหวังว่ามันจะเป็นประโยชน์กับคนอื่นเช่นกัน
#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
sleep 1
NEW=`ls -l "$FILE"`
if [ "$NEW" != "$LAST" ]; then
"$CMD" "$FILE"
LAST="$NEW"
fi
done
บันทึกเป็นและทำwatch.sh
chmod u+x watch.sh
จากนั้นฉันก็รันมันดังนี้:
./watch.sh file.tex pdflatex
หากคุณต้องการคำสั่งเท่านั้นที่จะทำงานถ้าการเปลี่ยนแปลงที่เกิดขึ้นจริงที่เกิดขึ้นคุณสามารถใช้แทน`md5sum "$FILE"`
`ls -l "$FILE"`
NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
คุณสามารถใช้ คำสั่งtailf ได้ง่ายที่สุด
tailf logfile.log
คุณยังสามารถใช้ inotifywatch / inotifywait ซึ่งขอให้เข้าไปในระบบย่อยของเมล็ด วิธีนี้คุณสามารถดูสิ่งต่าง ๆ เช่น "เปิด", "ปิด" หรือ "เข้าถึง"
แต่ถ้าคุณเพียงแค่ต้องการได้รับบรรทัดต่อท้ายเพื่อ stdout ฉันเห็นด้วยกับหาง
Tail เป็นเครื่องมือมาตรฐานดั้งเดิมพร้อมใช้งานได้ทุกที่ เครื่องมือที่ซับซ้อนกว่านี้คือมัลติทาสก์ซึ่งสามารถตรวจสอบไฟล์หลายไฟล์พร้อมกันและเน้นไวยากรณ์
หากฉันต้องการค้นหาไฟล์เพิ่มเติมนอกเหนือจากการปรับแต่งมันฉันใช้คำสั่ง "F" น้อยลง
เมื่อใช้ tail โปรดจำไว้ว่าจำเป็นต้องมีอาร์กิวเมนต์เพิ่มเติมหากไฟล์นั้นอาจจะพลิกหรือแทนที่ด้วยการแก้ไข (โหมดเริ่มต้นสำหรับ vim's: w)
tail -f จะทำให้ tail จัดเก็บไฟล์ descriptor และติดตามมัน หากไฟล์ถูกแทนที่ descriptor จะถูกเปลี่ยน ประโยชน์ของการอธิบายไฟล์ต่อไปนี้คือถ้าหากไฟล์ถูกเปลี่ยนชื่อคุณจะยังคงติดตามมันอยู่
tail --follow = จะทำให้ tail ติดตามไฟล์ที่มีชื่อโดยเปิดใหม่เป็นระยะเพื่อดูว่ามันถูกแทนที่
--retry เป็นอีกตัวเลือกที่มีประโยชน์ถ้าคุณต้องการ tail log log แต่ยังไม่ได้สร้างไฟล์
tail -F เป็นทางลัดสำหรับ --follow = --retry
ลืม tailf, diff เป็นคำสั่งที่คุณต้องการ นี่คือเคล็ดลับที่ดีในการดูความแตกต่างที่เกิดขึ้นแบบเรียลไทม์ (หรือปิด) ระหว่าง 2 ไฟล์หรือในไฟล์เดียวที่ถูกเขียนไป
คุณสามารถใช้วิธีการเหล่านี้เพื่อปรับเปลี่ยนพฤติกรรมตามที่คุณต้องการเช่นการเขียนการเปลี่ยนแปลงไปยังไฟล์เพื่อเก็บบันทึก เล่นกับช่วงเวลาของการดูหรือตัวเลือกอื่น ๆ สำหรับคำสั่งด้านล่าง
คุณมี 1 ไฟล์และคุณต้องการดูเมื่อมีการเปลี่ยนแปลง:
ดังนั้นนี่คือสิ่งที่ต้องทำ:
cp file file2
touch check-differences.sh
nano check-differences.sh
chmod 755 check-differences.sh
#!/bin/bash
diff file file2
cp file file2
watch ./check-differences
สิ่งนี้จะอัปเดตทุก ๆ 2 วินาทีโดยค่าเริ่มต้น ดังนั้นหากคุณต้องการย้อนกลับไปอ่านแล้วเขียนผลลัพธ์ของ diff ไปยังไฟล์ในสคริปต์
หรือใช้ cron เพื่อเรียกใช้สคริปต์ของคุณเป็นประจำหากคุณไม่ต้องการเห็นผลลัพธ์
ในขณะที่tail -f somefile.txt
ยังคงเลื่อนไปพร้อมกับข้อมูลใหม่บางครั้งฉันก็ชอบless +G somefile.txt
ที่จะดูแพทช์ของข้อมูลล่าสุดในไฟล์