Pertanyaan Perintah shell untuk memantau perubahan dalam file - Apa namanya lagi?


Saya tahu ada perintah di Unix yang dapat saya gunakan untuk memantau file dan melihat perubahan yang ditulis untuk itu. Ini sangat berguna terutama untuk memeriksa file log.

Apakah Anda tahu apa namanya?


139
2018-04-30 21:00






Jawaban:


Maksudmu

tail -f logfile.log

?

(Halaman man untuk ekor)


188
2018-04-30 21:01



Ya, ini waktu nyata. - Adam Gibbins
Sidenote: Jika distribusi Anda memberikan perintah tailf, gunakan itu dalam preferensi untuk tail -f. tailf lebih efisien karena tidak perlu mengakses file yang diawasi jika tidak ditulis (akses polling menjengkelkan jika Anda memasang sistem file dengan pembaruan atime.) - Mihai Limbăşan
Di pengguna super saya menemukan jawaban merekomendasikan ekor -F dari pada -f juga - Rafa
tail -F akan mengikuti nama file daripada objek file, yang sangat berguna dalam kasus rotasi file log. - Amir Ali Akbari
Perbarui, beberapa tahun kemudian: tailf sekarang tidak lagi digunakan dan tail -f aman. (konfirmasikan ini di sistem Anda dengan man tailf.) Lihat dokumentasi: man7.org/linux/man-pages/man1/tailf.1.html - exp1orer


Anda mungkin berarti ekor, sesuai jawaban Jon Skeet.

Yang berguna lainnya adalah menonton; ini memungkinkan Anda menjalankan perintah secara berkala dan melihat layar penuh keluaran. Sebagai contoh:

perhatikan -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 operasi selanjutnya. (Berguna untuk mengamati seberapa cepat logfile tumbuh, misalnya).


114
2018-04-30 21:07





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

Binding kunci hampir sama dengan di vi. Perintah apa pun dapat diinisialisasi saat 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 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.


33
2018-04-30 23:44



Ingat untuk mengatur alias dengan opsi yang Anda inginkan, jadi Anda tidak perlu mengetiknya setiap saat. - Michael Hampton♦
Sebenarnya, Anda harus lebih menyukai fungsi shell daripada alias dalam banyak kasus. - tripleee


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

27
2018-06-02 12:13





Ekor hebat ... kurang juga bisa digunakan mulai kurang pada file yaitu kurang myfile lalu tekan F. Ini kurang bertindak sebagai ekor.


19
2018-04-30 21:04



less + F myfile akan membuatnya juga - rgmarcha


Saya sedang mengedit file LaTeX dan ingin memonitornya juga untuk perubahan di suatu tempat di tengah. Saya melecut skrip shell kecil berikut ini yang terbukti bermanfaat bagi saya. Saya harap itu juga akan 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. Lalu 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"` dari pada `ls -l "$FILE"`.


12
2017-10-10 09:32



untuk menonton direktori dan kontennya alih-alih satu file: NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'` - Andy


Anda bisa menggunakan tailf  perintah yang sangat mudah

tailf logfile.log

7
2017-10-15 13:26





Anda juga dapat menggunakan inotifywatch / inotifywait yang menghubungkan ke dalam kernel inotify subsystem. Dengan cara ini Anda juga dapat memperhatikan hal-hal seperti "terbuka", "dekat" atau "akses".

Tetapi jika Anda hanya ingin mendapatkan garis tambahan ke stdout saya setuju pada ekor.


5
2018-04-30 22:40





Tail 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 sintaks.


2
2018-04-30 22:58





Jika saya ingin dapat mencari di sekitar file dan hanya mengekornya, saya menggunakan lebih sedikit dengan perintah "F".

Saat menggunakan ekor, perlu diingat bahwa argumen tambahan diperlukan jika file mungkin berguling atau digantikan oleh pengeditan (mode default untuk vim: w).

ekor -f akan menyebabkan ekor untuk menyimpan deskriptor file dan mengikutinya. Jika file diganti deskriptor akan diubah. Manfaat dari mengikuti deskriptor file adalah bahwa jika file berganti nama, Anda masih akan mengikutinya.

tail --follow = akan membuat ekor melacak file yang bernama dengan membuka kembali secara berkala untuk melihat apakah itu telah diganti.

--retry adalah opsi lain yang berguna jika Anda ingin mengekor file log tetapi file belum dibuat.

tail -F adalah shortcut untuk --follow = --retry.


2
2018-05-27 15:47





Sementara tail -f somefile.txt terus bergulir dengan data baru, saya terkadang lebih suka less +G somefile.txt juga untuk melihat sepetak data terbaru dalam file.


0
2017-11-25 20:51



Saya pikir itu semua tertutup jawaban ini dari 7 tahun yang lalu. - kasperd