GNU/Linux >> Linux Esercitazione >  >> Linux

Lettura continua da Named Pipe (cat Or Tail -f)?

Ho configurato rsyslog per registrare determinati eventi di registro su /dev/xconsole :

*.*;cron.!=info;mail.!=info      |/dev/xconsole

/dev/xconsole è una named pipe (fifo ). Se voglio vedere cosa viene registrato, posso fare cat /dev/xconsole . Sono sorpreso di vedere che il comando cat /dev/xconsole non termina dopo aver letto il file, ma agisce invece come tail -f . in altre parole, i due comandi si comportano allo stesso modo:

cat /dev/xconsole
tail -f /dev/xconsole

Qualcuno può spiegare perché è così?

C'è qualche differenza tra i due?

Risposta accettata:

cat continua a leggere finché non ottiene EOF. Una pipe produce EOF sull'output solo quando ottiene EOF sull'input. Il demone di registrazione sta aprendo il file, scrivendo su di esso, e mantenendolo aperto — proprio come fa per un file normale — quindi EOF non viene mai generato sull'output. cat continua a leggere, bloccandosi ogni volta che esaurisce ciò che è attualmente nel tubo.

Puoi provarlo tu stesso manualmente:

$ mkfifo test
$ cat test

E in un altro terminale:

$ cat > test
hello

Ci sarà output nell'altro terminale. Quindi:

world

Ce ne saranno di più uscita nell'altro terminale. Se ora premi Ctrl-D l'input, poi l'altro cat terminerà anche lui.

In questo caso, l'unica differenza osservabile tra cat e tail -f sarà se il demone di registrazione viene terminato o riavviato:cat si fermerà in modo permanente quando l'estremità di scrittura della pipe è chiusa, ma tail -f continuerà (riaprendo il file) al riavvio del demone.


Linux
  1. Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

  2. DD da /dev/zero a /dev/null... cosa succede realmente

  3. RdRand da /dev/random

  4. lettura da seriale dalla riga di comando di Linux

  5. Linux:differenza tra /dev/console , /dev/tty e /dev/tty0

tty (/dev/tty ) vs pts (/dev/pts) in Linux

Come mappare il dispositivo /dev/sdX e /dev/mapper/mpathY dal dispositivo /dev/dm-Z

Come codificare in base64 /dev/random o /dev/urandom?

kernel:disabilitare /dev/kmem e /dev/mem

È sbagliato collegare /dev/random a /dev/urandom su Linux?

Differenze tra /dev/sda e /dev/sda1