Portál AbcLinuxu, 7. května 2025 20:02

Dotaz: Připisování do souboru a průběžné čtení

xkucf03 avatar 3.9.2020 13:52 xkucf03 | skóre: 49 | blog: xkucf03
Připisování do souboru a průběžné čtení
Přečteno: 518×
Odpovědět | Admin

Existuje příkaz, který by periodicky (nebo přes inotify) sledoval měnící se soubor a vypisoval pouze data, která přibyla?

Tzn. něco jako tail -f, ale vypsalo by to jen nová data, nikoli posledních N řádků či bajtů.

Ve výsledku by se to mělo chovat podobně jako pojmenovaná roura (mkfifo): jeden proces zapisuje do roury a druhý z ní čte. Akorát ta zapsaná data zároveň zůstanou v souboru.

V případě, který teď zrovna řeším, by se to asi dalo nějak ohackovat, aby první proces zapisoval do skutečné roury a zároveň se nějak data zapisovala na disk a průběžně zpracovávala druhým procesem. Ale přijde mi, že nástroj popsaný výše by mohl být obecně docela užitečný.

Jestli to neexistuje, tak si to napíšu sám, nebude to těžké, jen bych nerad vymýšlel kolo.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

Řešení dotazu:


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (xkucf03 (tazatel))
3.9.2020 14:30 kaaja | skóre: 24 | blog: Sem tam něco | Podbořany, Praha
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nestačilo by něco jako tail -f -n 0 ? To vypisuje jenom nová data a data v souboru přeskočí. Otázka je jestli je to, co potřebujete.
xkucf03 avatar 3.9.2020 14:57 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení

Díky. Tohle vypadá, že funguje přesně tak, jak potřebuji.

Zvláštní je, že v manuálové stránce ani dokumentaci jsem to nenašel.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Heron avatar 3.9.2020 15:14 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení
Copak to bylo za man? Dívám se do debu i freebsd a jak GNU tak BSD verze to mají popsané.
xkucf03 avatar 3.9.2020 16:09 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení

Koukal jsem na verzi GNU coreutils 8.28 a tam je jen:

       -n, --lines=[+]NUM
              output the last NUM lines, instead of the last 10; or use -n +NUM to output starting with line NUM

a v dokumentaci na webu jsem to taky neviděl.

Ale ani u FreeBSD to nemůžu najít.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
3.9.2020 16:20 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení
debian.plus@protonmail.com
xkucf03 avatar 3.9.2020 16:29 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení

Kde se tam píše, že -n 0 má zvláštní význam?

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
3.9.2020 16:38 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení
Heron avatar 3.9.2020 16:56 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení
Jaký zvláštní?

-n je parametr určující počet vypsaných řádků. No a 0 vypíše přesně 0 řádků. V normálním režimu to sice nemá žádný smysl ale udělá to přesně to, co se od toho očekává, tj vypíše to prázdný řádek. S follow režimem to vypíše nula stávajících řádků a začne to vypisovat další řádky. Tj chová se to podle očekávání.
3.9.2020 17:01 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení
Mysli to ako trik na take pouzitie. Moze to datdo sekcie example.
debian.plus@protonmail.com
Heron avatar 3.9.2020 17:05 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení
Jo, to by se asi dát mohlo.
xkucf03 avatar 3.9.2020 17:28 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení

To je vlastně pravda. :-) To -n se vztahuje jen k historii, na vypisování nových řádků nemá vliv.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
3.9.2020 17:35 jiwopene | skóre: 31 | blog: Od každého trochu…
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení
Pokud chcete ušetřit pár stisků klávesy, tak tail -0f funguje stejně.

tail -f (alespoň ten z GNU coreutils) umí detekovat a oznámit i smazání obsahu souboru nebo souboru samotného a potom pokračovat novým souborem ve stejné cestě. To je celkem praktické pro sledování logů v reálném čase.

tail (stejně jako head) má ještě jednu celkem praktickou funkci – když mu dáte víc názvů souborů, před každým vypíše hlavičku s názvem souboru. Pokud spustíte tail -f s více soubory, sleduje všechny soubory zároveň a před změnou každého souboru vypíše hlavičku.
.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
3.9.2020 14:47 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení
Odpovědět | | Sbalit | Link | Blokovat | Admin
https://cs.wikipedia.org/wiki/Filesystem_in_Userspace
debian.plus@protonmail.com
3.9.2020 21:14 PetebLazar | skóre: 34 | blog: l_eonardovo_odhodlani
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nestačí příkaz tee, který rozdvojí výstup do stdout a souboru?
xkucf03 avatar 3.9.2020 21:29 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Připisování do souboru a průběžné čtení

Konkrétně to potřebuji k tomuto: screen se připojí na sériový port a zobrazuje, co z něj přichází, případně umožňuje zadávat zařízení příkazy. Screen zároveň loguje do souboru – a z něj to chci číst (parsovat) průběžně jiným nástrojem. Zároveň se od toho screenu můžu odpojit a on zůstane běžet na pozadí a stále loguje.

Ten druhý nástroj si pustím, jen když to chci parsovat v reálném čase. A s tím dobře pomůže ten tail -f -n0.

Původně jsem chtěl ten nástroj napsat tak, aby se připojoval přímo na sériový port a zároveň logoval, ale vypadá to, že to nebude nutné a že to půjde poskládat z již hotových nástrojů (screentail).

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.