P004 UNIX
Nějaké příklady
Úvod
Ve všech souborech v běžném adresáři, které mají příponu jména '.tex' nahraďte řetězec '\end{syntax}' řetězcem '\end{syntax}%'.


Zjistěte, zda existuje adresář zadaný prvním pozičním parametrem. Pokud ne, vytvořte jej a tento stav oznamte uživateli hlášením na stnd. chybový výstup.


Vytvořte skript, který smaže všechny soubory zadané jako poziční parametry. Před mazáním každého souboru nechť se zeptá, zda se tento soubor má smazat. Uživatel musí odpovědět 'y' nebo 'n'. Pokud odpoví 'y', soubor smažte, pokud odpoví cokoli jiného, soubor ponechte. Použijte jiné řešení než 'rm -i'.


Předejte na standardní výstup poslední poziční parametr.


Zjistěte, zda existuje proveditelný soubor zadaný prvním pozičním parametrem. Pokud ano, spusťte jej a předejte mu další poziční parametry.


Následující posloupností příkazů přejmenujte všechny soubory.txt na soubory.TXT v běžném adresáři. Doplňte příkaz ?????

ls *.txt > pom
ed pom <<EOF
?????
w
q
EOF
sh pom
rm pom


Máte v běžném adresáři soubory jmen např.:

1 10 11 2 20 21 22 3 4 5 55 6 70 71
Hromadně přejmenujte všechny soubory pojmenované pouze jednou číslicí na 01 02 03 ... Ostatní ponechte bez přejmenování.


Napište skript, který zkontroluje, zda je zadán právě jeden poziční parametr a tento jeden poziční parametr je jméno existujícího neprázdného souboru. Pokud není, pak o tom vypište hlášení.


Na standardní chybový výstup vypište hlášení '*Stala se chyba*'.


Napište příkaz, který smaže všechny normální soubory v běžném adresáři a všech jeho podadresářích, které byly naposledy změněny před více než dvěma dny.


Napište příkaz, který smaže všechny normální soubory v běžném adresáři a všech jeho podadresářích, které neobsahují řetězec 'nemaz'.


Napište příkaz, který smaže všechny soubory (nikoli adresáře) v běžném adresáři a všech jeho podadresářích, které mají nulovou velikost.


Napište příkaz, který smaže všechny soubory (nikoli adresáře) v běžném adresáři a všech jeho podadresářích, které obsahují řetězec 'malý pivo'.


Na standardní výstup předejte počet normálních souborů umístěných v adresářovém podstromu od běžného adresáře, které obsahují alespoň jeden řetězec 'velký pivo'.


Napište příkaz, který v běžném adresáři a všech jeho podadresářích přidá normálním souborům a podadresářům právo zápisu pro skupinu.


Napište příkaz, který v běžném adresáři a všech jeho podadresářích spočítá počet souborů a adresářů, které buď vlastní uživatel 'novak', nebo kdekoli ve jméně obsahují řetězec 'novak'.


Michal Brandejs <brandejs>
Soubor obsahuje pouze záznamy tohoto typu. Každý záznam na jednom řádku. Pole na řádku jsou oddělena mezerou. Všechny záznamy souboru změňte do tvaru:
<brandejs> Brandejs Michal
Napište příslušný příkaz pro editor ed nebo řádkový režim editoru vi. Realizujte jedním příkazem.


Michal Brandejs <brandejs>
Soubor obsahuje pouze záznamy tohoto typu. Každý záznam na jednom řádku. Pole na řádku jsou oddělena mezerou. Všechny záznamy souboru změňte do tvaru:
Jmeno: Michal Prijmeni: Brandejs e-mail: brandejs
Napište příslušný příkaz pro editor ed nebo řádkový režim editoru vi. Realizujte jedním příkazem.


Napište příkaz pro editor ed nebo řádkový režim editoru vi, který všechny řádky v souboru nahradí z tvaru:

brandejs:*:11000:100:Michal Brandejs:/home/brandejs:/bin/ksh
do tvaru:
Michal Brandejs <brandejs>
Realizujte jedním příkazem.


Soubor CONFIG obsahuje řádky ve tvaru:

starysemestr:1995zima
tedsemestr:1996leto
novysemestr:1996zima
Nastavte proměnnou SEMESTR na hodnotu klíče 'tedsemestr' ze souboru CONFIG (tj. v tomto případě nechť proměnná SEMESTR nabyde hodnoty 1996leto).


Napište filtr pomocí příkazu 'sed', který bude měnit záznamy z typu:

Michal Brandejs:brandejs:brandejs:odborný asistent
na typ:
Michal Brandejs:brandejs:odborný asistent
tj. vypustí se třetí pole. Čtvrté pole v originálním záznamu může obsahovat libovolný počet dvojteček.


Ze souboru /etc/passwd, který má záznamy ve tvaru:

brandejs:x:11000:100:Michal Brandejs:/home/brandejs:/bin/ksh
vytvořte seznam ve tvaru (je zaměněno pořadí příjmení a jména):
Brandejs, Michal
...


Všem položkám běžného adresáře nastavte přístupová práva tak, aby s nimi mohl jakkoli pracovat pouze vlastník. Pozor: neproveditelným souborům nenastavujte 'x'.


Všem adresářům a proveditelným souborům běžného adresáře nastavte přístupová práva tak, aby do nich mohli vstupovat a spouštět je i ostatní. Přístupová práva neproveditelných souborů ponechte beze změny.


Napište všechny potřebné příkazy, kterými vytvoříte adresář pom, v němž bude moci kdokoli vytvářet soubory, ale rušit je bude smět pouze jejich vlastník.


Jakým příkazem zruším všechny soubory a podadresáře (i neprázdné) běžného adresáře, jejichž jméno začíná tečkou (pozor - nesmějí se zrušit položky '.' a '..').


Provedeme-li posloupnost příkazů:

rm -rf /tmp/a
mkdir -p /tmp/a/b/c /tmp/a/b/d /tmp/a/b/d/e
touch /tmp/a/b/d/f /tmp/a/b/f
ls -ld /tmp/a/b
Kolik odkazů bude uvedeno na řádku, který vypíše příkaz ls?


Všem adresářům v běžném (pouze) adresáři přidejte právo čtení a vstupu pro ostatní.


Napište skript, který soubor zadaný prvním pozičním parametrem zkopíruje do souborů zadaných druhým až posledním pozičním parametrem.


Napište skript, kterému při spuštění zadáme na příkazovém řádku jména souborů. Pokud je zadáno více než 100 souborů, skript všechny soubory smaže.


Napište skript, který smaže všechny soubory zadané pozičními parametry. Pokud je však některý z pozičních parametrů '*', vypište dotaz, zda lze všechny soubory v běžném adresáři smazat. Pokud je odpověď 'y', potom je smažte.


Napište skript, který přečte všechny soubory zadané na příkazovém řádku a jejich obsah předá na standardní výstup (varianta příkazu cat) s tím, že opakující se řádky (ze všech) předá pouze jednou. Opakující se řádky nemusejí být bezprostředně za sebou. Pořadí řádků na výstupu nemusí odpovídat pořadí řádků na vstupu.


Napište skript, který v běžném adresáři ze všech souborů vyřadí řádky, které v prvním sloupci začínají znakem #.


Napište příkaz, který čte standardní vstup a na výstup předá pouze ty řádky, které v prvním sloupci nezačínají znakem #


Proměnná KDO obsahuje libovolně dlouhý seznam uživatelů oddělených mezerami. Vyřaďte vlastní jméno, které získáte z proměnné LOGNAME.


Napište skript, který ze všech souborů v běžném adresáři vyřadí řádky, které začínají řetězcem 'Jan Novák'.


Ze seznamu cest zadaných v proměnné PATH vyjměte cestu '.'.


Napište skript, který proměnným prom1, prom2, prom3, ... přiřadí postupně obsahy pozičních parametrů (první do prom1, druhý do prom2, ...). Počet pozičních parametrů není omezen.


Proměnné LAST přiřaďte poslední poziční parametr.

 
Michal Brandejs brandejs@informatics.muni.cz