Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Software
Obcování s ďáblem 14: Vyšší škola hledání souborů
25. října 2001, 00.00 | Minule jsme dokončili přehled základních služeb vlastního shellu, dnešní a několik dalších dílů věnujeme ukázkám některých častěji používaných příkazů. Příkaz find si určitě oblíbíte, zvlášť pokuď už máte plné zuby Sherlocka.
Obcování s ďáblem 14: Vyšší škola hledání souborůMinule jsme dokončili přehled základních služeb vlastního shellu (později se k němu samozřejmě ještě vrátíme, a ukážeme si některé luxusnější možnosti). Dnešní a několik dalších dílů věnujeme ukázkám některých častěji používaných příkazů. Začneme příkazem find; ten rozhodně patří mezi nejšikovnější, a zvlášť šikovný je v Mac OS X, kde není standardně k dispozici žádná slušná aplikace na prohledávání disku (používejte chvíli Sherlocka, a dáte mi za pravdu).
Příkaz find
Úkolem příkazu find je prohledávání disků. Příkaz find to sice dělá mnohem pomaleji než příkaz locate, se kterým jsme se seznámili v sedmém dílu (protože nepoužívá žádné indexy, ale skutečně prohledává disk), zato nabízí nesrovnatelně bohatší paletu služeb.
Příkaz find prohledá všechny zadané složky do hloubky, tj. projde jak jejich soubory, tak i soubory ve vnořených složkách, a tak dále. Složek můžeme určit kolik chceme; prostě je napíšeme jako argumenty příkazového řádku. Následující příkaz by třeba vypsal složky a soubory s dokumentací:
find /*/Documentation
Kdybychom to ale opravdu zkusili a chtěli se tím pročíst, zjistíme, že těch souborů a složek je 22103: to by přeci jen bylo trochu moc. (Mimochodem, malý kvíz: jakpak jsem přišel na to, že jich je právě 22103? Měli byste to už vědět.) Proto find nabízí řadu přepínačů, které umožňují vybrat jen některé z nich:
Hledání podle jména
Asi nejběžnější je výběr souborů podle jména; k tomu slouží přepínač -name. Jeho argumentem může být jméno, nebo specifikace využívající stejných triků, jaká používáme pro zadání jména souboru v shellu. Pokud toho chceme využít, musíme se samozřejmě postarat o to, aby speciální znaky neinterpretoval sám shell — specifikaci musíme uzavřít do uvozovek či apostrofů, nebo musíme využít obrácené lomítko:
8 ~> find /Library/Documentation -name AirPort\*
/Library/Documentation/Help/AirPort.help
/Library/Documentation/Help/AirPort.help/Contents/Resources/English.lproj/AirPortHelp.htm
9 ~>
Hledání podle typu
Občas chceme jen soubory určitého typu: jen obyčejné soubory, nebo jen linky, nebo třeba jen adresáře — na to můžeme použít přepínač -type, mezi jehož argumenty patří 'd' (adresář), 'f' (obyčejný soubor) nebo 'l' (link). Zajímalo by nás třeba, které složky ve vývojářské dokumentaci jsou ve skutečnosti linky někam jinam — a kam? Odpověď na prvou otázku samozřejmě dá příkaz find s přepínačem -type, ale jak zjistit to druhé? Inu, víme přeci, že příkaz ls -l zobrazuje cíle linků; víme, že příkaz ls zobrazí soubory, jejichž seznam dostane na příkazovém řádku — a z minulého dílu také víme, jak dostat výstup příkazu find do příkazového řádku příkazu ls:
15 ~> ls -l `find /Developer/Documentation -type l`
lrwxrwxr-x 1 root admin 112 Sep 3 06:02 /Developer/Documentation/AdditionalTechnologies/PreferencePanes/Reference@ -> /System/Library/Frameworks/PreferencePanes.framework/Versions/A/Resources/English.lproj/Documentation/Reference/
lrwxrwxr-x 1 root admin 108 Sep 3 06:02 /Developer/Documentation/AdditionalTechnologies/ScreenSaver/Reference@ -> /System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/English.lproj/Documentation/Reference/
lrwxrwxr-x 1 root admin 102 Sep 3 05:32 /Developer/Documentation/Cocoa/Reference/ApplicationKit@ -> /System/Library/Frameworks/AppKit.framework/Versions/C/Resources/English.lproj/Documentation/Reference
lrwxrwxr-x 1 root admin 106 Sep 3 05:32 /Developer/Documentation/Cocoa/Reference/Foundation@ -> /System/Library/Frameworks/Foundation.framework/Versions/C/Resources/English.lproj/Documentation/Reference
lrwxrwxr-x 1 root admin 100 Sep 3 01:02 /Developer/Documentation/CoreFoundation@ -> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Resources/English.lproj/Documentation
lrwxrwxr-x 1 root admin 107 Sep 3 04:33 /Developer/Documentation/Darwin/Reference/IOKit@ -> /System/Library/Frameworks/IOKit.framework/Versions/A/Resources/English.lproj/Documentation/Reference/IOKit
...
A co dál...
Příkaz find rozumí mnoha dalším přepínačům: můžeme vyhledávat soubory podle vlastníka, podle času a data, podle přístupových práv... vlastně podle čehokoli, co jen chceme. A pokud bychom přeci jen chtěli vyhledávat podle něčeho, co find neumí, jde to také: stačí použít přepínač -exec. Na ten — a na další služby a možnosti příkazu find — se už ale podíváme až příště.
Obsah seriálu (více o seriálu):
- Obcování s ďáblem
- Obcování s ďáblem 2 - základy
- Obcování s ďáblem 3 - Práce se soubory
- Obcování s ďáblem 4 - Další práce se soubory
- Obcování s ďáblem 5 - Stále soubory, hlavně linky
- Obcování s ďáblem 6: Pár zbývajících drobností
- Obcování s ďáblem 7: Samá voda, přihořívá, hoří!
- Obcování s ďáblem 8: Jak se do shellu volá, tak se program ozývá
- Obcování s ďáblem 9: Nové finty na programy
- Obcování s ďáblem 10: Do fronty, pánové, do fronty!
- Obcování s ďáblem 11: Standardní vstup a výstup
- Obcování s ďáblem 13: Další triky
- Obcování s ďáblem 14: Vyšší škola hledání souborů
- Obcování s ďáblem 15: Příkaz find stokrát jinak
- Obcování s ďáblem 16: Co se ještě dá uvařit z příkazu find
- Obcování s ďáblem 17: Regulární výrazy
- Obcování s ďáblem 18: Speciální regulární výrazy
- Obcování s ďáblem 19: Skládání regulárních výrazů
- Obcování s ďáblem 20: Regulární výrazy se zpětnými odkazy
- Obcování s ďáblem 21:K čemu je dobrý grep...
- Zázraky ihned, nemožné na počkání: sed
- Obcování s ďáblem - další finty s příkazem sed
- Rozsáhlejší příklad se sedem
- Obcování s ďáblem: Další kouzla, aneb awk
- Awk a proměnné
- Obcování s ďáblem 27: Awk a výrazy
- Obcování s ďáblem: Awk a funkce
- Awk a příkazy
- Co je to vlastně "uživatel"?
- Vlastnictví objektů
- Přístupová práva
- Vlastník, skupina, ostatní...
- Jak je to se skupinami?
- Skupiny a uživatelé
- Scripty
- Komentáře, a volba shellu
- Pro skript může být shell cokoli!
- Shellové skripty a argumenty
- Skripty a proměnné: aritmetika
- Proměnné shellu, "dědění" hodnot
- Práce s proměnnými
- Práce se jmény souborů
- Pole hodnot
- Další triky kolem polí...
- Standardní proměnné shellu
- Základní příkazy pro skripty
- Příkaz if
- Speciální podmínkové příkazy
- Podmínky pro práci se soubory
- Jednoduchý cyklus
- Příkaz for a pomocné příkazy break a continue
- Příkaz case
- Příkazy exit a select
- Rejstřík a přehled
- Procesy
- Informace o procesech
- Další klíčová slova pro příkaz ps
- Příkaz ps: několik praktických přepínačů
- A k čemu že je "ps" dobré?
- Copak procesor, s pamětí je to horší
- Virtuální paměť
- A ještě jednou virtuální paměť
- Zpět k příkazu ps
- Skutečný žrout paměti
- Ještě jednou top
- Doplněk k topu: vm_stat
- Co to tedy všechno znamená?
- Nevychází nám dal a má dáti?
- Kam se stránky ukládají?
- Změna odkládacího disku
- Změna odkládacího disku / fstab
- Poslední poznámka k fstab
- A jak to je se soubory?
- Co vlastně příkaz lsof vypisuje?
- Příkaz lsof a obsah sloupce NAME
- SIPS - Terminál není jen pro nadšence UNIXu
- Tak nám zabili NetInfo, paní Müllerová