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
)