Pre vyhľadávanie súborov v súborovom systéme, ktoré vyhovujú zadaným kritériám, slúži príkaz find. Pre vyhľadávanie v obsahu súborov slúži príkaz grep. Kombináciou týchto dvoch programov je možné vykonávať aj relatívne komplikované prehľadávanie súborového systému.
Príkaz find prehľadáva podstrom súborového systému,
ktorý sa začína na zadanej ceste, a na položkách,
ktoré vyhovujú zadaným filtrom vykoná určenú
alebo východziu akciu:
find [cesta] [prepinace] [filtre] [akcia]
Napríklad:
# výpis podstromu aktuálneho pracovného adresára $> find # výpis podstromu adresára /home $> find /home # výpis podstromu adresára /home (bez chybových správ) $> find /home 2> /dev/null
Prepínače menia správanie sa vyhľadávacieho algoritmu. Medzi najčastejšie používané patria:
-maxdepth N - Prehľadávanie sa vykonáva rekurzívna
maximálne do N-tej úrovne.
-mindepth N - Prehľadávanie sa vykonáva až
od N-tej úrovne.
$> find /etc -maxdepth 0 $> find /etc -maxdepth 1 $> find /etc -maxdepth 2
Filtre príkazu find sú jednoduché logické operácie,
ktoré sa postupne aplikujú na jednotlivé položky nájdené príkazom
find. Tie položky, pre ktoré filtre vrátia hodnotu true
sa spracúvajú ďalej a vykoná sa na nich akcia.
Medzi často používané filtre patria:
-type <typ> - Súbor musí byť zadaného
typu.
-name <vzor> - Názov súboru súboru musí
vyhovovať vzoru.
-user <uid> - Iba súbory so zadaným vlastníkom.
-group <gid> - Iba súbory so zadanou skupinou.
-readable - Iba čitateľné súbory.
-writable - Iba modofikovateľné súbory.
-executable - Iba spustiteľné súbory.
-empty - Iba prázdne súbory a adresáre.
$> find /etc -type f -readable $> find /tmp -user pouzivatel -empty
Akcie pracujú na nájdených položkách, ak nie je zadaná žiadna
akcia vykoná sa -print:
-print - Vypíše sa cesta položky.
-delete - Položka sa vymaže (ak má používateľ
príslušné práva).
-exec prikaz [parametre] ; - Na položke sa vykoná
zadaný príkaz. Ak má príkaz obsahovať cestu k nájdenému súboru,
je možné ju získať pomocou výrazu {}, príkaz
musí byť ukončený bodkočiarkou
(a keďže je bodkočiarka metaznak
je potrebné ho escapovať,
napr. pomocou opačného lomítka).
$> find /tmp -user pouzivatel -empty -delete $> find /home -user pouzivatel -readable -exec ls -l {} \;
Príkaz grep filtruje štandardný vstup alebo obsah
textových súborov zadaných ako parametre na príkazovom riadku podľa
zadaných kritérií. Napríklad vypisuje iba riadky ktoré obsahujú
alebo neobsahujú zadaný výraz. Podobne ako find,
má aj grep množstvo prepínačov, ktoré ovplyvňujú
jeho správanie, medzi najčastejšie používané prepínače patria:
-e <vyraz> - špecifikuje výraz alebo výrazy,
ktoré sa majú hľadať.
-i - nerozlišujú sa veľké a malé písmená.
-v - vypisuje riadky neobsahujúce
hľadaný výraz.
-c - nevypisuje riadky, iba ich počet.
-H - ak je to možné vypíše sa aj názov súboru
v ktorom sa našla zhoda.
$> grep -e "$USER" /etc/passwd $> grep -v -e "$USER" /etc/passwd $> grep -c -v -e "$USER" /etc/passwd $> grep -H -c -e "$USER" /etc/passwd /etc/shadow /etc/hosts
find a grep
Príkazy find a grep je pri vyhľadávaní
v súborovom systéme možné kombinovať napríklad pomocou akcie -exec:
$> find /etc -maxdepth 1 -type f -readable -exec grep -H -i -e "$USER" {} ';'
TODO