Saya tahu ada perintah di Unix yang bisa saya gunakan untuk memonitor file dan melihat perubahan yang sedang ditulis. Ini cukup berguna terutama untuk memeriksa file log.
Apakah Anda tahu apa namanya?
Saya tahu ada perintah di Unix yang bisa saya gunakan untuk memonitor file dan melihat perubahan yang sedang ditulis. Ini cukup berguna terutama untuk memeriksa file log.
Apakah Anda tahu apa namanya?
Jawaban:
tail -F
akan mengikuti nama file daripada objek file, yang sangat berguna dalam kasus rotasi file log.
tailf
sekarang sudah usang dan tail -f
aman. (konfirmasikan ini pada sistem Anda dengan man tailf
.) Lihat dokumentasi: man7.org/linux/man-pages/man1/tailf.1.html
Anda mungkin berarti ekor, sesuai jawaban Jon Skeet.
Satu lagi yang bermanfaat adalah jam tangan ; ini memungkinkan Anda untuk menjalankan perintah secara berkala dan melihat output layar penuh. Sebagai contoh:
watch -n 10 -d ls -l / var / adm / messages
Akan menjalankan perintah ls -l /var/adm/messages
setiap 10 detik, dan menyoroti perbedaan dalam output antara proses selanjutnya. (Berguna untuk menonton seberapa cepat logfile tumbuh, misalnya).
inotifywait
dari inotify-tools berguna jika Anda ingin menjalankan perintah setiap kali file (atau file apa pun dalam direktori) berubah. Sebagai contoh:
inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
path
bukan pilihan terbaik untuk nama variabel. Pada zsh
, tampaknya vars lingkungan tidak peka terhadap huruf besar-kecil. Bagi saya, pengaturan path
penyebab PATH
juga bisa diatur, dan itu pada dasarnya berarti tidak ada yang akan dijalankan sampai Anda memperbaikinya. Aktif bash
, pengaturan path
tidak berpengaruh aktif PATH
.
Saya lebih suka menggunakan less +FG
1 lebih tail -f
karena saya merasa perlu mencari file log untuk kesalahan atau ID tertentu. Jika saya perlu mencari sesuatu, saya ketik ^C
untuk berhenti mengikuti file dan ?
mulai mencari mundur.
Binding kunci hampir sama dengan di vi
. Perintah apa pun dapat diinisialisasi pada startup menggunakan +
opsi:
+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.
Untuk log yang sangat panjang, saya merasa nyaman untuk menggunakan -n
opsi yang mematikan penomoran baris. Dari halaman manual:
-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 ke rgmarcha untuk menunjukkan ini di komentar.
alias
dengan opsi yang Anda inginkan, jadi Anda tidak perlu mengetiknya setiap saat.
Saya sedang mengedit file LaTeX dan ingin memonitornya juga untuk perubahan di suatu tempat di tengah. Saya membuat skrip shell kecil berikut yang terbukti bermanfaat bagi saya. Saya harap ini juga berguna bagi orang lain.
#!/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
Simpan sebagai watch.sh
dan lakukan chmod u+x watch.sh
. Kemudian saya jalankan sebagai berikut:
./watch.sh file.tex pdflatex
Jika Anda ingin perintah hanya dijalankan jika modifikasi yang sebenarnya terjadi, Anda dapat menggunakan `md5sum "$FILE"`
sebagai gantinya `ls -l "$FILE"`
.
NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
Anda dapat menggunakan perintah tailf yang paling mudah
tailf logfile.log
Jika saya ingin dapat mencari di sekitar file selain hanya tailing, saya menggunakan lebih sedikit dengan perintah "F".
Saat menggunakan tail, perlu diingat bahwa argumen tambahan diperlukan jika file mungkin berguling atau diganti dengan edit (mode default untuk vim's: w).
tail -f akan menyebabkan tail untuk menyimpan deskriptor file dan mengikutinya. Jika file diganti, deskriptor akan diubah. Manfaat mengikuti deskriptor file adalah jika file diubah namanya, Anda masih akan mengikutinya.
tail --follow = akan membuat ekor melacak file yang dinamai dengan membuka kembali secara berkala untuk melihat apakah telah diganti.
--retry adalah pilihan lain yang berguna jika Anda ingin mengekstrak file log tetapi file tersebut belum dibuat.
tail -F adalah jalan pintas untuk --follow = --retry.
Lupakan tailf, diff adalah perintah yang Anda inginkan. Berikut ini adalah trik yang bagus untuk melihat perbedaan yang terjadi secara real time (atau menutup) antara 2 file atau dalam satu file yang sedang ditulis.
Anda dapat menggunakan metode ini untuk mengubah perilaku dengan cara apa pun yang Anda inginkan, seperti menulis perubahan pada file untuk disimpan. Bermain-main dengan interval jam tangan atau opsi lain untuk perintah di bawah ini.
Anda memiliki 1 file dan Anda ingin menonton karena perubahan dibuat untuk itu:
Jadi, inilah yang harus dilakukan:
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
ini akan diperbarui setiap 2 detik secara default. Jadi jika Anda perlu kembali dan membacanya, maka tuliskan output diff ke file dalam skrip.
atau gunakan cron untuk menjalankan skrip Anda secara teratur jika Anda tidak perlu melihat hasilnya.
Sambil tail -f somefile.txt
terus menggulir dengan data baru, kadang-kadang saya lebih suka less +G somefile.txt
juga melihat tambalan data terbaru dalam file.