pengembangan-web-mp.com

Perintah Shell untuk memantau perubahan dalam file

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?

167
Sebastian Hoitz

Maksud kamu

tail -f logfile.log

?

( Halaman manual untuk ekor )

220
Jon Skeet

Anda mungkin berarti buntut, sesuai jawaban Jon Skeet.

Satu lagi yang berguna adalah tonton ; ini memungkinkan Anda untuk menjalankan perintah secara berkala dan melihat output layar penuh. Sebagai contoh:

 tonton -n 10 -d ls -l /var/adm/messages

Akan menjalankan perintah ls -l /var/adm/messages setiap 10 detik, dan sorot perbedaan dalam output antara proses selanjutnya. (Berguna untuk mengawasi seberapa cepat logfile tumbuh, misalnya).

128
Murali Suriar

inotifywait from 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
42
richvdh

Saya lebih suka menggunakan less +FG1 lebih tail -f karena saya merasa perlu mencari file log untuk kesalahan atau ID tertentu. Jika saya perlu mencari sesuatu, saya mengetik ^C untuk berhenti mengikuti file dan ? untuk mulai mencari mundur.

Binding utama hampir sama seperti di vi. Perintah apa pun dapat diinisialisasi pada startup menggunakan + pilihan:

+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 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 to rgmarcha untuk menunjukkan ini di komentar.

37
Jon Ericson

Ekornya bagus ... kurang juga bisa digunakan mulai lebih sedikit pada file mis. Kurang myfile lalu tekan Shift+F. Ini kurang bertindak sebagai ekor.

21
trent

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 aktual terjadi, Anda dapat menggunakan `md5sum "$FILE"` dari pada `ls -l "$FILE"`.

16
oliphaunt

anda dapat menggunakan perintah tailf perintahnya yang paling mudah

tailf logfile.log
8
reegan vijay

Anda juga dapat menggunakan inotifywatch/inotifywait yang menghubungkan ke subsistem inotify inotify. Dengan cara ini Anda juga dapat menonton hal-hal seperti "buka", "tutup" atau "akses".

Tetapi jika Anda hanya ingin mendapatkan baris ditambahkan ke stdout saya setuju.

6
Martin

Ekor adalah alat unix standar, tradisional, tersedia di mana-mana. Alat yang sedikit lebih canggih adalah multitail yang dapat memonitor beberapa file secara bersamaan dan melakukan penyorotan sintaksis.

3
hlovdal

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: 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.

3
deinspanjer

Lupakan tailf, diff adalah perintah yang Anda inginkan. Berikut ini adalah trik yang baik untuk menonton 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:

  1. salin file

    cp file file2
    
  2. tulis skrip bash untuk menemukan perbedaannya, dan perbarui file2

    touch check-differences.sh
    nano check-differences.sh
    chmod 755 check-differences.sh
    
  3. Ini ide dasar untuk skrip. Buat itu menulis ke file jika Anda mau

    #!/bin/bash
    diff file file2
    cp file file2
    
  4. Selanjutnya Anda dapat menonton perbedaan di layar menggunakan arloji

    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 rutin jika Anda tidak perlu melihat hasilnya.

2
Mezmer

Sementara tail -f somefile.txt terus menggulir dengan data baru, I kadang-kadang lebih suka less +G somefile.txt juga untuk melihat tambalan data terbaru dalam file.

1
phantomastray