Linux:Přehled základních příkazů: Porovnání verzí

m
 
=[[Linux:Vyhledávání|Vyhledávání]]=
 
Pro vyhledávání se v Linuxu používají především dvě důležité aplikace [[Linux:find|find]] a [[Linux:grep|grep]]. Každá z nich plní svou specifickou funkci a jejich vzájemnou kombinací lze dosáhnout opravdu efektivních výsledků.
 
Kromě nich lze také použít při hledání i některé pomocné utility jako jsou [[Linux:locate|locate]], [[Linux:whereis|whereis]] nebo [[Linux:which|which]]
 
{| border="1"
| <code>[[Linux:locate|locate]]</code> || vyhledává soubory pomocí vzorků v pomocné databázi || samostatný instalační balík '''locate'''
|}
 
==Hledání souborů podle vzorků a vlastností==
 
{{Příklad|1='''find''' vždy prochází celou větev adresářové struktury, která začíná udanou ''cestou''. Přitom hledá ty soubory (i adresář je souborem), které splňují zadané ''podmínky''. Najde-li takové, pak může nad těmito nalezenými soubory provádět různé operace - počínaje vypsáním informace o jejich umístění, po spouštění nejrůznějších skriptů. [[Linux:find|find]] má ohromné množství parametrů, proto doporučuji studovat pro náročnější nasazení jeho manuálovou stránku. Následujících příklady pouze demonstrují nejčastější možnosti použití a popisují jak vlastně [[Linux:find|find]] pracuje.
{{Výpis|1={{Linux:user}}[[Linux:find|find]]}}
Příkaz bez parametrů vypíše seznam všech souborů a adresářů v aktuálním adresáři, a to rekurzívně - tedy i vnořené adresáře a soubory.
{{Výpis|1={{Linux:user}}[[Linux:find|find]] /etc}}
Prvním, nepovinným parametrem je výchozí adresář pro prohledávání. V následujících příkladu, kdy má [[Linux:find|find]] za úkol najít soubor s názvem <code>soubor.txt</code> jej vynechám. Bude se tedy prohledávat pouze adresář ve kterém právě jsem. Pokud [[Linux:find|find]] soubor najde, pak k němu vypíše plnou cestu. Pokud ne, nevypíše nic.
{{Výpis|1={{Linux:user}}[[Linux:find|find]] -name soubor.txt}}
V následujícím příkladu má za úkol vypsat všechny soubory, jejichž název končí ''txt''. Povšimněte si, že hledaný vzorek je uzavřen do uvozovek, a znak hvězdičky ('''*''') umožňuje tzv. "globbing", tj. že vzorku vyhoví <u>všechny</u> názvy které na řetězec ''txt'' končí.
{{Výpis|1={{Linux:user}}[[Linux:find|find]] -name "*txt"}}
Vyhledání jen souborů typu adresář - ''directory''.
{{Výpis|1={{Linux:user}}[[Linux:find|find]] -type d}}
A nyní moje oblíbené použití. Jak už bylo zmíněno, s nalezenými soubory je možno pracovat dále tak, že jsou předhozeny nějakému jinému příkazu. V našem případě jsou všechny soubory typu soubor (''file'') s plnou cestou předány (přes dvojici složených závorek) k dalšímu zpracování příkazu [[Linux:chmod|chmod]], který jim nastaví práva na 664. Příkaz je nutné ukončit středníkem, který musí být "escapován" obráceným lomítkem (jinak by se jej pokoušel brát jako součást vloženého příkazu). A složené závorky je vhodné uzavřít do jednoduchých uvozovek, pro případ, že by se mezi nalezenými vzorky vyskytly některé s mezerou. Během akce se pak postupně nahrazují výsledky hledání.
{{Výpis|1={{Linux:user}}[[Linux:find|find]] f -exec [[Linux:chmod|chmod]] 664 '{}' \;}}
 
Na závěr ve stručnosti ještě několik nejčastějších příkladů použití:
{{Výpis|1={{Linux:user}}[[Linux:find|find]] -name "*~" -exec [[Linux:rm|rm]] -i '{}' \;}}
Smaže záložní kopie - soubory jejichž název končí vlnovkou. Pro sichr tam je parametr -i, který znamená, že každé mazání budeme muset potvrzovat zvlášť.
{{Výpis|1={{Linux:user}}[[Linux:find|find]] -type f -exec [[Linux:fgrep|fgrep]] -Hn kolo '{}' \;}}
Vyhledá "kolo" v obsahu všech souborů v aktualním adresáři a výsledek vytiskne ve formátu: cesta_k_souboru:cislo_radky:nalezeny_retezec
{{Výpis|1={{Linux:user}}[[Linux:find|find]] /moje/zalohy -type f -ctime +30 -exec [[Linux:rm|rm]] -f '{}' \;}}
Projede adresář ''zalohy'' a smaže tam všechny soubory (type -f), které jsou staré víc než 29 dní.
 
 
'''locate''' funguje podobně jako [[Linux:find|find]] ovšem pracuje mnohem rychleji, protože eprohledává souborový systém, ale databázi. Tu je ovšem třeba udržovat aktuální. Aktualizaci databáze pro [[Linux:locate|locate]] však smí spouštět pouze superuživatel - ''root''. Abyste ji nebylo nutné provádět ručně, lze využít [[Linux:cron|cron]], nebo - pokud vypínáte počítač - [[Linux:anacron|anacron]].
{{Výpis|1={{Linux:root}}[[Linux:updatedb|updatedb]]}}
{{Výpis|1={{Linux:user}}[[Linux:locate|locate]] mdadm.conf
/etc/mdadm/mdadm.conf
/usr/share/doc/mdadm/examples/mdadm.conf-example
/usr/share/man/man5/mdadm.conf.5.gz
/var/lib/dpkg/info/mdadm.conffiles
/var/lib/dpkg/info/mdadm.config
/var/lib/mdadm/mdadm.conf-generated}}
 
 
'''whereis''' prohledává cesty se spustitelnými soubory, zdrojové soubory a manuálové stránky. Viz příklad:
{{Výpis|1={{Linux:user}}[[Linux:whereis|whereis]] find
find: /usr/bin/find /usr/X11R6/bin/find /usr/bin/X11/find /usr/share/man/man1/find.1.gz}}
První tři údaje ve výpisu jsou odkazy spustitelné (binární) soubory, zatímco ten poslední je na manuálovou stránku.
 
 
'''which''' prohledává pouze cesty se spustitelnými soubory. Když zjistí, že příkaz volá samostatnou utilitu zobrazí její plnou cestu:
 
{{Výpis|1={{Linux:user}}[[Linux:which|which]] find
/usr/bin/find}}
 
Hodí se, když se nám zdá, že program nedělá to, na co jsme zvyklí. Takto můžeme zjistit, že se nám spouští něco jiného. Je to ale dost raritní situace. O něco výše u příkladu použití příkazu [[Linux:whereis|whereis]] jste si mohli povšimnout, že [[Linux:find|find]] ''bydlí'' ve třech různých lokacích, pochopitelně je pak pro nás docela zajímavé, <u>který</u> (angl. ''which'') z nich se vlastně spouští, pokud ho zavoláte bez plné cesty.
Příkaz [[Linux:which|which]] má volitelný parametr '''-a''', který vypíše všechna umístění zadaného příkazu.
 
{{Výpis|1={{Linux:user}}[[Linux:which|which]] -a whereis
/usr/bin/whereis
/usr/bin/X11/whereis}}
}}
 
==Vyhledávání vzorků v souborech==
 
{{Příklad|1='''grep''' - Na rozdíl od příkazu find neprochází adresářovou strukturu, ale ''obsah'' předaných souborů. Ty můžeme předat buď najednou, jako seznam na příkazovém řádku, nebo pomocí vzorku. Jenže při větším počtu souborů narazíme na omezení příkazové řádky. Pak je vhodnější jej použít v kombinaci s příkazem find, navíc tím získáme možnost sofistikovaněji předávat soubory podle dalších podmínek.
}}
 
==Vyhledávání uživatelů==
 
==Vyhledávání v instalačních balíčcích==
 
=Informativní příkazy=
1 002

editací