Hlavní navigace

Hrátky z řádky: pracujeme s logy

4. 2. 2008
Doba čtení: 4 minuty

Sdílet

Opět se setkáváme u pravidelné pondělní dávky tipů a triků z černé řádky. V dnešním díle se podíváme na čtení log souborů a hledání v nich, představíme si programy wc, sort, du a na závěr se vrátíme k programu screen, v něm si ukážeme, jak jednoduše rozdělit obrazovku na více pracovních částí.

Dlouho jsem nezmínil manuálové stránky. Je to důležitý zdroj informací. Mnou uváděné tipy využívají jeden nebo dva parametry, ale většina zde uváděných programů jich umí mnohem více. Rozhodně doporučuji si manuály někdy prohlédnout. Když zrovna nesedíte u nějakého Linuxu, můžete třeba využít stránky man.root.cz.

Práce s logy

Na čtení logů můžete používat mnoho programů – cat, more, less, tail, head,… O některých jsme už mluvili. Můj oblíbený less má mnoho funkcí, například umí snadno vyhledávat. Prohlížíme si třeba mailový log less /var/log/maillog. Chci v něm vyhledat například svou e-mailovou adresu. Stačí zadat znak /, napsat požadovaný text a zmáčknout enter. Less označí v celém souboru všechny výskyty hledaného textu a přesune nás na první z nich. Klávesou n se můžeme přesouvat na další výskyty, klávesou N pak můžeme na předchozí. Je to stejný systém, jaký má třeba editor vi. Další možností, jak v logu něco vyhledat, je využití utilitky grep, následující příklad nám vypíše všechny řádky obsahující hledaný text:

$ grep -i text /var/log/maillog

Zopakuji, že parametr -i nám zajistí, že u hledaného textu se nerozlišuje velikost znaků. Parametr -n nám na začátek napíše ještě číslo řádku.

Když chceme v logu jen očíslovat řádky, je pro to určen filtr nl. Zkuste si třeba
$ nl /etc/hosts
I nl má užitečné parametry. Můžete si třeba zvolit, zda číslovat i prázdné řádky, jestli mají být čísla doplněna nulami a podobně. Líbit by se vám mohlo třeba i toto:

$ nl /var/log/maillog | less

Když chcete prohledávat třeba log, který už je zaarchivovaný, není nutné jej nejprve rozbalovat a pak číst třeba lessem. K tomu je určený zless. Většinou to není binárka, například ve FreeBSD je řešen jednoduchým skriptem, který spouští klasický less, a díky tomu můžeme i v něm snadno vyhledávat výše popsanou kombinací. Ukázka:
  $ zless /var/log/maillog.0.bzip2

Za další tip musím poděkovat jednomu čtenáři, který utilitku ccze zmínil v diskuzi. Pokud se vám log zdá nepřehledný, existuje několik programů, které vám barevně rozliší text. My si ukážeme utilitku ccze. Nebývá součástí systému, většinou si ji budete muset přiinstalovat. Ale může se hodit, zkuste si třeba:

$ tail -n40 /var/log/maillog | ccze

Když máme log plný něčeho, co nás nezajímá, využijeme opět grep. Příkazem grep -v slovo /var/log/maillog zobrazíme všechny řádky neobsahující hledané slovo. Velkou funkcionalitu získáme spojením dvou grepů:

$ grep -i novak.cz /var/log/maillog | grep -v jarda

Tímto najdeme záznamy obsahující název domény novak.cz, ale vynecháme vše obsahující slovo jarda.

Lehce k programům wc, sort a du

Další program, který si ukážeme, je wc. Slouží nám k počítání všeho možného – znaků, slov, řádků. Pokud nás zajímá počet řádků v souborech, není nic snažšího než:

$ wc -l /etc/*

Tento příkaz nám vypíše názvy souborů v /etc  a u nich počet řádků. Parametrem -m můžeme spočíst znaky, zajímavý je ještě parametr -w, který zajistí počítání slov. Další informace naleznete v man wc.

Další utilitkou je sort. Je to filtr, který nám dle zadaného kritéria setřídí hodnoty. Pokud chcete třeba setřídit řádky souboru podle abecedy, zkuste:

$ sort /etc/rc.conf

Pro nás teď bude důležitý parametr -n díky němuž setřídíme data ne textově, ale numericky. Praktickým příkladem je třeba výpis podadresářů setříděný podle velikosti sestupně. Docílíme toho spojením příkazu du a sortu. Du nám samo o sobě říká údaje v počtu 512 bytových bloků. Ale pro hezčí výpis jde použít i -k  pro kilobajty a -m pro megabajty, já mám rád parametr -h (human readable). Malá ukázka:

root@minastirith pm # du -sk /var/* | sort -rn
41896   /var/db
37524   /var/log
16394   /var/mail
3472    /var/tmp
518     /var/spool
47      /var/named
44      /var/run
22      /var/yp
14      /var/backups
6       /var/cron

Screen – rozdělení obrazovky

O screenu  už se zde mluvilo a odkazoval jsem na náš starší článek, v kterém bylo zmíněna možnost rozdělení obrazovky.

cyber23

Rozdeleny screen

Rozdělíme si obrazovku na poloviny a v každé si pustíme nějaký monitorovací nástroj – iftop a top. Spustíme si screen, v něm třeba iftop na nějakou síťovou kartu:

$ screen
$ iftop -i fxp0

Zmáčkneme ctrl + a následované velkým písmenem S. Obrazovka se nám rozdělí. Kombinací ctrl + a následované klávesou tab. Tím se přepneme do zatím prázdného okna. Stiskem ctrl + a následovanou klávesou c spustíme nové okno. V něm už jen spustíme příkaz top. Přepínání mezi okny se provádí pomocictrl + a následované tab. Pomocí exit pak jednotlivá okna ukončujeme. Pro podobné rozdělení obrazu se dá použít i utilitka window.

Byl pro vás článek přínosný?

Autor článku

Petr Macek studoval aplikovanou informatiku na Jihočeské univerzitě, pracuje jako síťový specialista ve firmě Kostax, s. r. o. Baví ho především FreeBSD, sítě a monitoring Cacti.