GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kontinuierliches Lesen von Named Pipe (Katze oder Schwanz -f)?

Ich habe rsyslog konfiguriert um bestimmte Protokollereignisse in /dev/xconsole zu protokollieren :

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

/dev/xconsole ist eine benannte Pipe (fifo ). Wenn ich sehen möchte, was protokolliert wird, kann ich cat /dev/xconsole ausführen . Ich bin überrascht zu sehen, dass der Befehl cat /dev/xconsole wird nach dem Lesen der Datei nicht beendet, sondern fungiert stattdessen als tail -f . mit anderen Worten, die beiden Befehle verhalten sich gleich:

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

Kann bitte jemand erklären, warum das so ist?

Gibt es einen Unterschied zwischen den beiden?

Akzeptierte Antwort:

cat liest weiter, bis es EOF erhält. Eine Pipe erzeugt am Ausgang nur dann EOF, wenn sie am Eingang EOF erhält. Der Logging-Daemon öffnet die Datei, schreibt hinein und und hält sie geöffnet – genau wie bei einer normalen Datei –, sodass EOF niemals in der Ausgabe generiert wird. cat liest einfach weiter und blockiert, wann immer es erschöpft ist, was sich gerade in der Leitung befindet.

Sie können dies selbst manuell ausprobieren:

$ mkfifo test
$ cat test

Und in einem anderen Terminal:

$ cat > test
hello

Es wird im anderen Terminal ausgegeben. Dann:

world

Es wird mehr geben Ausgabe im anderen Terminal. Wenn Sie jetzt Strg-D eingeben, dann die andere cat wird auch beendet.

In diesem Fall ist der einzige beobachtbare Unterschied zwischen cat und tail -f wird sein, wenn der Logging-Daemon beendet oder neu gestartet wird:cat stoppt dauerhaft, wenn das Schreibende der Pipe geschlossen wird, aber tail -f wird weitermachen (die Datei erneut öffnen), wenn der Daemon neu gestartet wird.


Linux
  1. So generieren Sie ein zufälliges Passwort unter Linux mit /dev/random

  2. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

  3. Wie kann /dev/random oder /dev/urandom mit base64 codiert werden?

  4. Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

  5. RdRand von /dev/random

tty (/dev/tty ) vs. pts (/dev/pts) unter Linux

Wann sollte /dev/random vs. /dev/urandom verwendet werden?

So ordnen Sie /dev/sdX- und /dev/mapper/mpathY-Geräte vom /dev/dm-Z-Gerät zu

DD von /dev/zero nach /dev/null ... was eigentlich passiert

Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0

Kernel:/dev/kmem und /dev/mem deaktivieren