GNU/Linux >> Znalost Linux >  >> Linux

Odstraňte prvních N řádků z aktivního souboru protokolu

Myslím, že tohoto úkolu lze dosáhnout pomocí sed

sed -i '1,10d' myfile

by ze souboru odstranil řádky od 1 do 10.

Myslím, že každý by se měl alespoň podívat na tyto vložky sed 1.

Všimněte si, že to nefunguje pro soubory protokolů, které jsou aktivně připojovány aplikací (jak je uvedeno v otázce).

sed -i vytvoří nový soubor a 'smaže' soubor, do kterého se zapisuje. Většina aplikací bude nadále zapisovat záznamy protokolu do odstraněného souboru protokolu a bude nadále zaplňovat místo na disku. Nový, zkrácený soubor protokolu nebude připojen. To se zastaví pouze tehdy, když je aplikace restartována nebo je jinak signalizováno zavření a opětovné otevření souborů protokolu. V tomto okamžiku bude v novém souboru protokolu mezera (chybějící záznamy protokolu), pokud mezi použitím sed a restartem aplikace došlo k nějaké činnosti, kterou lze protokolovat.

Bezpečným způsobem, jak toho dosáhnout, by bylo zastavit aplikaci, použít sed ke zkrácení protokolu a potom restartovat aplikaci. Tento přístup může být pro některé služby nepřijatelný (např. webový server s vysokou propustností a vysokými požadavky na kontinuitu služeb)


Ne, operační systémy jako Linux a jeho souborové systémy neumožňují odstranění dat od začátku souboru. Jinými slovy, počáteční bod ukládání souboru je pevný.

Odstranění řádků ze začátku souboru se obvykle provádí zapsáním zbývajících dat do nového souboru a smazáním starého. Pokud má program starý soubor otevřený pro zápis, bude smazání tohoto souboru odloženo, dokud aplikace soubor nezavře.

Jak poznamenali komentátoři, z důvodů uvedených v mé předchozí větě obvykle potřebujete koordinovat prořezávání souborů protokolu s programy, které protokoly zapisují. Jak to přesně uděláte, závisí na programech. Některé programy se zavřou a znovu otevřou své soubory protokolu, když jim pošlete signál (např. HUP), což lze použít k zabránění zápisu záznamů protokolu do „smazaného“ souboru protokolu, aniž by došlo k přerušení služby.

Pro správu velikosti souborů protokolu je k dispozici mnoho nástrojů, například logrotate

Některé programy mají své vlastní nástroje. Například webový server Apache obsahuje nástroj rotationlogs.


Ne. Řešením tohoto obecného problému růstu souboru protokolu je rotace protokolu. To zahrnuje pravidelné (typicky noční nebo týdenní) přesunutí existujícího souboru protokolu na jiný název souboru a začátek nového souboru s prázdným souborem protokolu. Po určité době se staré soubory protokolu zahodí.

Viz:http://www-uxsup.csx.cam.ac.uk/~jw35/courses/apache/html/x1670.htm


Linux
  1. Jak odstranit duplicitní řádky uvnitř textového souboru?

  2. Jak odstranit prázdné řádky ze souboru (včetně tabulátoru a mezer)?

  3. Zřetězit čáry na základě prvního znaku dalšího řádku?

  1. Bash skript k odstranění nejstaršího souboru ze složky?

  2. Jak odstranit Bom ze souboru UTF-8?

  3. Odebrat další řádky záhlaví ze souboru, kromě prvního řádku?

  1. Awk z různých řádků?

  2. Počítat řádky v souboru?

  3. Náhodně nakreslit určitý počet řádků z datového souboru?