Začínáme s Linuxem (6) Kdo hledá, najde Hledáte občas klíče, brýle, hlavu a podobně? Pak se vám určitě něco podobného stane i při práci s Linuxem. Prostě budete potřebovat najít soubor nebo text. Abyste nemuseli nazdařbůh procházet disk a prohlížet si každý soubor, stačí vám málo – přečíst si dnešní článek. Pro hledání informací, o kterých víte, že jsou na disku, ale nevíte přesně kde, slouží mimo jiné dva velice užitečné příkazy – find a grep. Hledání v souborech Find slouží k hledání souborů podle jména a je schopen soubory nejen najít, ale také spustit libovolnou akci a předat jí jméno nalezeného souboru jako parametr. Začneme nejjednodušším způsobem jeho použití: find . -name brejle Tento zápis vyvolá prohledání aktuálního adresáře (.) a jeho podadresářů a výpis cesty k souboru brejle. Hledané jméno souboru může obsahovat neúplně zadané jméno, kde některé znaky nahradíme "žolíky" – znaky *,?. V různých příkazových interpretech mají * nebo ? zvláštní význam. Proto je nutné zajistit, aby se znaky dostaly až k příkazu find, který s nimi má pracovat. Pak to může vypadat například takto: find . -name \*penguin.gif nebo find . -name "*penguin.gif" Pokud si nejsme jisti, zda se v názvu vyskytují malá nebo velká písmena, napíšeme místo -name -iname. Prohledávání všech podadresářů může trvat hodně dlouho, proto je možné použít některé z přepínačů pro upřesnění prohledávaného prostoru. find . -name soubor -mindepth 2 -maxdepth 4 Takto find pracuje až se soubory od úrovně vnoření 2 a nezajímá se o obsah adresářů na úrovní větší než 4. Soubory lze vyhledávat i podle jiných kritérií než jména, například podle skupiny, do které soubor patří (-group), času poslední změny (-ctime), přístupových práv (-perm) a mnoha dalších. S nalezenými soubory je možné dále pracovat pomocí parametrů příkazu find. Asi nejpoužívanější jsou tři z nich: -exec, -ok a různé varianty parametru -print. Pomocí -exec můžeme spustit libovolný jiný program a předat mu jméno nalezeného souboru jako parametr. find . -name "*.txt" -exec head \{\} \; Vypíše prvních 10 řádků každého nalezeného textového souboru (příkaz head). Předání jména nalezeného souboru je zprostředkováno zápisem {}, parametr exec se ukončuje středníkem. Zpětná lomítka zajišťují, že se je příkazový interpret nepokusí zpracovat a předá je přímo příkazu find. Některé akce vyvolávané pomocí parametru -exec mohou být destruktivní a budeme asi chtít, aby bylo možné u každého nalezeného souboru rozhodnout, má-li se příkaz vykonat. K tomu slouží parametr -ok. Před každou akcí se vás zeptá, jestli chcete příkaz pro nalezený soubor vykonat. find . -name "*.txt~" -ok rm \{\} \; Find toho umí ještě daleko víc. Doporučuji vám vyzkoušet si uvedené příklady, další inspiraci můžete hledat například v manuálové stránce. Při hledání se může hodit možnost prohledat nalezený soubor a zjistit, vyskytuje-li se v něm hledaný řetězec znaků. K tomu slouží příkaz grep, který je samozřejmě možné použít i samostatně. Hledá se jím výskyt řetězce znaků v souboru nebo více souborech. grep banán * Vypíše jména souborů, které obsahují slovo banán, a současně vypíše všechny řádky, které jej obsahují. Hledaný řetězec se zadává jako regulární výraz nebo jen jako řetězec znaků (přepínač -F). grep -F "hvězdička *" *.txt Výstup je možné různým způsobem formátovat. Nejběžnější jsou přepínače -A (after) a -B (before), pomocí kterých zvětšíte vypisovanou část souboru o několik řádků za, resp. před nalezeným výrazem. grep -B 2 -A 5 slova *.txt Vypíše 2 řádky před a 5 řádků za každým řádkem obsahujícím výraz slova. Grep se dá použít v kombinaci s find k prohledávání nalezených souborů. find . -name \*.txt -exec grep Linux \{\} \; -print Nalezne všechny textové soubory a vyhledá v nich slovo Linux. Za výpis řádků s nalezeným textem vytiskne jméno souboru (-print). Struktura adresářů Linuxu Jako každý operační systém má i Linux pravidla, která říkají, kam se mají umístit soubory, které tvoří systém. Konfigurační soubory platné pro celý systém patří například do adresáře /etc, speciální soubory do /dev a uživatelské adresáře do /home. Zatímco první dva případy jsou striktně vyžadovány, umisťování domovských adresářů uživatelů do /home už povinné není. Podobných nepovinných zvyklostí je hodně a jejich nepovinnost působí problémy při přenášení dat a aplikací mezi jednotlivými distribucemi. Aby se předešlo nedorozuměním, vznikl v rámci projektu LSB popis struktury adresářů souborového systému Linuxu, nazvaný Filesystem Hierarchy Standard (FHS). Dnes jej dodržují téměř všechny distribuce Linuxu a jeho znalost ušetří hodně času jinak stráveného pátráním po různých souborech. Výjimkou je bohužel také distribuce Red Hat, na kterou se v našem seriálu zaměřujeme. Základní rozložení souborů ale dodržuje. Bude jistě užitečné projít si základní strukturu adresářů a získat přehled o rozložení souborů na disku s Linuxem. Kořenový adresář neboli / je hlavním rozcestníkem ve všech Unixech. Někdy je přímo v / umístěno jádro operačního systému v souboru vmlinuz, častěji ale bude v adresáři /boot. V /boot jsou soubory určené pro startování operačního systému, tedy hlavně jádro. Důvodem pro vznik samostatného startovacího adresáře je výjimečnost startovacího procesu. Některé boot managery vyžadují speciální umístění startovacích souborů na disku, nebo dokonce nutí uživatele, aby měl startovací soubory na primárním master disku. Řešením je malý oddíl, který se připojuje do struktury systému souborů jako /boot. V /etc sídlí konfigurační soubory pro operační systém a všechny programy. Textové konfigurační soubory z /etc využívají i nadstavbové programy typu linuxconf, takže si můžete výsledky jejich práce na vlastní oči zkontrolovat. Velké systémy typu X Window nebo Corba vyžadují více konfiguračních souborů a zbytečně by vznikal chaos v hlavním adresáři /etc, proto mají většinou své vlastní podadresáře (/etc/X11 apod.) K uchovávání základních příkazů slouží /bin a /sbin. Zatímco příkazy z /bin slouží všem, /sbin je určen pro "nebezpečné" povely, které používá administrátor systému. Tento systémový diktátor je natolik důležitá persóna, že má přímo v kořenovém adresáři svůj vlastní adresář – /root. Ostatní smrtelníci se musejí spokojit s adresářem /home, kde jim root vytvoří podadresář. Důkazem platnosti jedné z klasických unixových pouček, že všechno je soubor, je adresář /dev. Sídlí zde speciální soubory, které systému zpřístupňují periferní zařízení, jako jsou disky, sériové a jiné porty, zvukové karty apod. V /lib naleznete základní sdílené knihovny a v /lib/modules linuxovou specialitu, moduly – části kódu jádra, které nejsou potřebné neustále, a proto mohou být uloženy na disku místo v paměti počítače. Poslední nadějí po zhroucení systému, přesněji havárii disku, je /lost+found. Sem se umisťují soubory, které katastrofu nepřežily v nejlepším stavu – často je to lepší než úplná ztráta dat. Adresář /mnt slouží k dočasnému připojování disků, typicky diskety (/mnt/floppy) a CD-ROM (/mnt/cdrom). Do /tmp si raději nic neodkládejte. Je to dočasný ukládací prostor, který se při startu systému často maže. Struktura /usr připomíná samotný / – používá se pro uživatelská data a aplikace. Často je /usr v rámci sítě sdílený, a proto by měl obsahovat jen statická data. Právě proto, že se často připojuje k více počítačům, musí obsahovat celou aplikaci včetně její konfigurace – proto tolik připomíná kořenový adresář. K ukládání proměnných dat používají programy adresář /var. Slouží též ke sdílení prostředků, například tiskárny (/var/spool/lpd) nebo mailu (/var/spool/mail). Je také místem, kam se budete dívat, když něco nebude fungovat tak, jak má. Adresář /var/log totiž používají aplikace pro archivaci údajů o svém běhu. Při práci systému můžete například příkazem tail -f /var/log/messages sledovat zápisy programů, které na počítači pracují (vypisování ukončíte stiskem Ctrl+C). Jakousi bránou do jádra Linuxu je /proc, který používají často i programy poskytující informace o zatížení systému. Při instalaci nových zařízení mohou být užitečné zejména soubory /proc/interrupts a /proc/ioports. To je pro dnešek vše. Doufám, že si po dnešním pokračování našeho seriálu nebudete v Linuxu připadat tak ztraceni. Lukáš Mikšíček lukas.miksicek@seznam.cz 6/00: 621-Linux6 (Au.L. Mikšíček - 4.93 n.str., 2 TS) Strana: 1 Chyba! Neznámý argument přepínače./4