Saya telah mengkonfigurasi rsyslog
untuk mencatat peristiwa log tertentu ke /dev/xconsole
:
*.*;cron.!=info;mail.!=info |/dev/xconsole
/dev/xconsole
adalah pipa bernama ( fifo
). Jika saya ingin melihat apa yang sedang dicatat, saya bisa melakukannya cat /dev/xconsole
. Saya terkejut melihat, bahwa perintah cat /dev/xconsole
tidak selesai setelah membaca file, tetapi bertindak sebagai tail -f
. dengan kata lain, kedua perintah berperilaku sama:
cat /dev/xconsole
tail -f /dev/xconsole
Adakah yang bisa menjelaskan mengapa itu?
Apakah ada perbedaan di antara keduanya?
world
, dan, lihat, "dunia" muncul di terminal lain.Ada juga perbedaan dalam buffering antara
cat
dantail -f
. Anda dapat memeriksa ini:Buat pipa:
mkfifo pipe
Mulai membaca pipa menggunakan
cat
di latar belakang:cat pipe &
Buka pipa dan tulis padanya setiap detik:
perl -MFcntl -we 'sysopen(my $fh, "pipe", O_WRONLY | O_NONBLOCK); while() {warn "written: " . syswrite($fh, "hello\n"); sleep 1}'
Sekarang coba ini dengan
tail -f pipe &
alih alihcat
. Jadi, Anda dapat melihat bahwacat
mencetak garis segera setelah ditulis ke pipa dengan skrip perl, sementaratail -f
buffer hingga 4 kb sebelum mencetak ke stdout.sumber
cat
menampilkan seluruh file ketikatail -f
Menunjukkan hanya baris terakhir dan mengikuti. Jadi jika file pendek mereka berperilaku sama, tetapi jika file besar (100+ baris) Anda dapat melihat perbedaan yang jelas antara keduanya.Informasi tambahan tentang perintah-perintah itu:
tail
http://www.computerhope.com/unix/utail.htmcat
http://www.computerhope.com/unix/ucat.htmsumber