tail -f
Bir dosyada (veya benzerini) grep
aynı anda yapmak mümkün müdür ? Diğer tür komutları sadece bu tür davranışları aramaya aldırmazdım.
tail -f
Bir dosyada (veya benzerini) grep
aynı anda yapmak mümkün müdür ? Diğer tür komutları sadece bu tür davranışları aramaya aldırmazdım.
Yanıtlar:
İyi çalışacak; daha genel olarak, grep
bir programın çıktısı alınmadığında bekleyecek ve çıktının girişini okumaya devam edecektir, yani:
$ (echo foo; sleep 5; echo test; sleep 5) | grep test
5 saniye boyunca hiçbir şey olmayacak, sonra grep eşleştirilen "test" i verecek ve daha sonra beş saniye sonra borulama işlemi bittiğinde çıkacaktır
Ekle --line-buffered
için grep
, ve bu sizin için gecikmeyi azaltabilir. Bazı durumlarda çok yararlıdır.
tail -f foo | grep --line-buffered bar
grep
bir terminale gitmediğinde (başka bir dosya türüne yönlendirilir) faydalıdır . Çıktı bir terminale gittiğinde satır tamponlama varsayılandır, dolayısıyla orada herhangi bir fark yaratmaz. Bu seçeneğin GNU’ya özgü olduğunu unutmayın.
Sadece çıkış borugrep
içinetail -f
. tail -f
İşlevselliği filtreleme ve renklendirmeyle, özellikle de çoklu görevle birleştiren programlar da vardır ( örnekler ).
Bütün bu insanların kullanmaya başladığını söylüyor. tail -f
başladığını görüyorum, ancak bunun sınırlamalarını sevmiyorum! Yeni satırları izlerken bir dosyayı aramada en sevdiğim yöntem (örneğin, genellikle cron işleri aracılığıyla düzenli aralıklarla yürütülen işlemlerin yönlendirilmiş çıkışını ekleyen günlük dosyalarıyla çalışırım):
tail -Fn+0 /path/to/file|grep searchterm
Bu GNU kuyruğu ve grep varsayar. Kuyruk kılavuz sayfasındaki ayrıntıları destekleme (GNU coreutils, mine v8.22'dir) [ https://www.gnu.org/software/coreutils/manual/coreutils.html] :
-F same as --follow=name --retry -n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output starting with the Kth. If the first character of K (the number of bytes or lines) is a '+', print beginning with the Kth item from the start of each file, otherwise, print the last K items in the file. K may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail'ed file is renamed, tail will continue to track its end. This default behavior is not desirable when you really want to track the actual name of the file, not the file descriptor (e.g., log rotation). Use --follow=name in that case. That causes tail to track the named file in a way that accommodates renaming, removal and creation.
Bu nedenle, komutumun kuyruk kısmı tail --follow --retry --lines=+0
, son argümanın başlangıçta başlamasını, sıfır satırı atlamasını yönlendirdiği yere eşittir .
tail -f access | awk '/ADD/{print $0}'
Yukarıdakileri kullanın, genelde kullanırım.
Netcat'ı kuyruk sonuçlarını frezlemek için kullanabilirsiniz - yeni sonuçlar oldukça kolaydır.
sudo nc -s localhost -l -p 1337 | grep ssh
tail -f /var/log/file.log | nc 127.0.0.1 1337
Bu, grep'i, 1337 numaralı bağlantı noktasından gelen girişin sonuçlarını dinlemeye ayarlar
. İkinci komut, -f kuyruğunun çıkışını netcat'e gönderir ve bunu, yerel ana bilgisayar 1337'ye gönderir. veya ekran gibi bir şey kullanın.
İşe yarıyor. Ancak çıktının artık anlık olmamasına dikkat edin: borudan tamponlanır.
tail -f
tek bir pencerede ve tail -f logfile | grep pattern
diğer pencerede. pattern
Her iki pencerede de satırlar aynı anda görünmez. Nadir durumlarda 30 saniye aralıklarla ortaya çıkan çizgiler gördüm, bu can sıkıcıydı.
tee
ya da bir şey olur.