He configurado rsyslog
para registrar ciertos eventos de registro en /dev/xconsole
:
*.*;cron.!=info;mail.!=info |/dev/xconsole
/dev/xconsole
es una tubería con nombre ( fifo
). Si quiero ver lo que se está registrando, puedo hacerlo cat /dev/xconsole
. Me sorprende ver que el comando cat /dev/xconsole
no termina después de leer el archivo, sino que actúa como tail -f
. en otras palabras, los dos comandos se comportan igual:
cat /dev/xconsole
tail -f /dev/xconsole
¿Alguien puede explicar por qué es eso?
¿Hay alguna diferencia entre los dos?
world
, y, he aquí, "mundo" aparece en la otra terminal.También hay una diferencia en el almacenamiento intermedio entre
cat
ytail -f
. Puedes ver esto:Crear tubería:
mkfifo pipe
Comience a leer la tubería usando
cat
en segundo plano:cat pipe &
Abra la tubería y escríbala cada segundo:
perl -MFcntl -we 'sysopen(my $fh, "pipe", O_WRONLY | O_NONBLOCK); while() {warn "written: " . syswrite($fh, "hello\n"); sleep 1}'
Ahora intente esto con en
tail -f pipe &
lugar decat
. Por lo tanto, puede ver quecat
imprime líneas tan pronto como se escriben en la tubería mediante un script perl, mientras lastail -f
almacena hasta 4kb antes de imprimirlas en stdout.fuente
cat
muestra todo el archivo cuandotail -f
Muestra solo las últimas filas y sigue. Entonces, si el archivo es corto, se comportan igual, pero si el archivo es grande (más de 100 filas) puede ver una clara diferencia entre ellos dos.Información adicional sobre esos comandos:
tail
http://www.computerhope.com/unix/utail.htmcat
http://www.computerhope.com/unix/ucat.htmfuente