Osmé cvičení – grep, find, xargs, (základy sedu)
Opakování z minula:
- Příkaz
read seká vstup podle proměnné $IFS (podle jakéhokoliv znaku z ní).
- Při použití
read a b c spadne do proměnné c celý zbytek řádky tak, jak je.
Příkazy a plán:
- Příkaz
grep a regulární výrazy
- Hledání pomocí
find a jeho přepínače:
-name '*.txt'
-size [+-]...
- …
xargs
Názvosloví
- soubor – obecně jakýkoliv soubor včetně speciálních (složek, symlinků)
- normální soubor – obyčejný soubor (ve výpisu
ls má na začátku -)
- složka – speciální typ souboru
- symlink – speciální typ souboru
Příklady:
- Napište skript, který s vámi bude hrát hádání čísel – Vymyslí si náhodné číslo (to můžete získat třeba z proměnné
$RANDOM) a uživatel bude postupně zadávat své
tipy. Skončí, když se uživatel trefí, nebo vypíše, zda je hádané číslo menší, nebo větší. Bonus: Pokud zavoláte skript s jedním argumentem, tak si vybere náhodné číslo z rozsahu
0 až zadaná horní mez.
- Napište skript, který očekává řádky ve tvaru
a+b=c (bez mezer) a zkontroluje, že jsou správně (spočítá a + b a otestuje s c).
Pokud objeví chybu, vypíše číslo řádky, na které k ní došlo.
- Najděte všechny síťové uživatele (v labu pomocí
getent passwd), kteří mají křestní jméno stejné, jako to vaše
- Vypište ze souboru
/etc/apache2/httpd.conf všechny řádky, které nejsou zakomentované
- Příkaz
find hledá soubory (a složky) podle daných parametrů v zadaném umístění a provede s nimi akci (defaultní akce je vypsat jejich název)
find /cesta -name "*.txt" – najde ve složce (a podsložkách) /cesta všechny soubory s příponou .txt
- Filtrování:
-user, -
- Akce: print (default), delete, exec (dva druhy)
- Pokročilejší filtrování:
- Vypište všechny složky pod
/etc, které mají alespoň trojpísmenný název
- Vypište všechny symbolické linky v
/etc bez sestupování do podsložek (tedy už ne symlinky v /etc/neco/...)
- V adresáři
/etc najděte soubory, které jsou novější než /etc/passwd
- Vypište všechny normální soubory v
/etc, které nevlastní root
- Spočítejte velikost všech souborů v
/etc s příponou .sh
- Vypište všechny normální soubory v
/etc, které nevlastí root a pro každý z nich vypiště dlouhé informace pomocí ls -l
- Najděte všechny normální soubory v podstromě pod
/etc, jejich název má 4-7 znaků a začíná na "a"
*/?>
Příklady pro pokročilé:
- Napište skript na počítání největšího společného dělitele
$1 a $2 Euklidovým algoritmem
- Napište třídící skript – dostane jako argumenty libovolný počet čísel a na výstup je vypíše v utříděném pořadí (nápověda: šikovně použijte
sort)