GNU/Linux >> Tutoriels Linux >  >> Linux

Lecture continue à partir d'un tube nommé (chat ou queue -f) ?

J'ai configuré rsyslog pour consigner certains événements du journal dans /dev/xconsole :

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

/dev/xconsole est un tube nommé (fifo ). Si je veux voir ce qui est enregistré, je peux faire cat /dev/xconsole . Je suis surpris de voir que la commande cat /dev/xconsole ne se termine pas après la lecture du fichier, mais agit plutôt comme tail -f . en d'autres termes, les deux commandes se comportent de la même manière :

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

Quelqu'un peut-il expliquer pourquoi ?

Y a-t-il une différence entre les deux ?

Réponse acceptée :

cat continue de lire jusqu'à ce qu'il obtienne EOF. Un tube produit EOF sur la sortie uniquement lorsqu'il obtient EOF sur l'entrée. Le démon de journalisation ouvre le fichier, y écrit, et le garde ouvert - tout comme pour un fichier normal - donc EOF n'est jamais généré sur la sortie. cat continue juste à lire, bloquant chaque fois qu'il épuise ce qui est actuellement dans le tuyau.

Vous pouvez essayer vous-même manuellement :

$ mkfifo test
$ cat test

Et dans un autre terminal :

$ cat > test
hello

Il y aura sortie dans l'autre terminal. Ensuite :

world

Il y en aura plus sortie dans l'autre terminal. Si vous maintenant Ctrl-D l'entrée puis l'autre cat se terminera également.

Dans ce cas, la seule différence observable entre cat et tail -f sera si le démon de journalisation est arrêté ou redémarré :cat s'arrêtera définitivement lorsque l'extrémité d'écriture du tube sera fermée, mais tail -f continuera (réouverture du fichier) lorsque le démon sera redémarré.


Linux
  1. Linux :Différence entre /dev/console , /dev/tty et /dev/tty0 ?

  2. Quelle est la portabilité de /dev/stdin, /dev/stdout et /dev/stderr ?

  3. RdRand de /dev/aléatoire

  4. noyau :désactiver /dev/kmem et /dev/mem

  5. Comment Linux utilise /dev/tty et /dev/tty0

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

DD de /dev/zero à /dev/null...ce qui se passe réellement

lecture depuis la série depuis la ligne de commande Linux

Linux :Différence entre /dev/console , /dev/tty et /dev/tty0

echo ou print /dev/stdin /dev/stdout /dev/stderr

Différences entre /dev/sda et /dev/sda1