Skonfigurowałem rsyslog
rejestrowanie niektórych zdarzeń dziennika w /dev/xconsole
:
*.*;cron.!=info;mail.!=info |/dev/xconsole
/dev/xconsole
to nazwany potok ( fifo
). Jeśli chcę zobaczyć, co jest rejestrowane, mogę to zrobić cat /dev/xconsole
. Jestem zaskoczony, widząc, że polecenie cat /dev/xconsole
nie kończy się po odczytaniu pliku, ale działa jak tail -f
. innymi słowy, oba polecenia zachowują się tak samo:
cat /dev/xconsole
tail -f /dev/xconsole
Czy ktoś może wyjaśnić, dlaczego tak jest?
Czy jest jakaś różnica między nimi?
world
, a oto „świat” pojawia się w drugim terminalu.Istnieje również różnica w buforowaniu między
cat
itail -f
. Możesz to sprawdzić:Utwórz potok:
mkfifo pipe
Rozpocznij czytanie potoku, używając
cat
w tle:cat pipe &
Otwórz potok i pisz do niego co sekundę:
perl -MFcntl -we 'sysopen(my $fh, "pipe", O_WRONLY | O_NONBLOCK); while() {warn "written: " . syswrite($fh, "hello\n"); sleep 1}'
Teraz spróbuj tego z
tail -f pipe &
zamiastcat
. Możesz więc zobaczyć, żecat
drukuje linie, jak tylko zostaną zapisane do potoku za pomocą skryptu perl, atail -f
buforuje je do 4 KB przed drukowaniem na standardowe wyjście.źródło
cat
pokazuje cały plik, gdytail -f
pokazuje tylko ostatnie wiersze i następuje. Więc jeśli plik jest krótki, zachowują się tak samo, ale jeśli plik jest duży (ponad 100 wierszy), widać wyraźną różnicę między nimi dwoma.Dodatkowe informacje o tych poleceniach:
tail
http://www.computerhope.com/unix/utail.htmcat
http://www.computerhope.com/unix/ucat.htmźródło