# Úvod do UNIXu (SWI095x1h), 7. cvičení, 2005-04-06
# SU1, Malá Strana, MFF UK
#
# Řešení jsou odladěná na FreeBSD 4.11-RELEASE, případné konkrétní
# situace se týkají stroje mail.kolej.
#
# $DevNullCZ: cviceni-07.reseni.txt,v 1.3 2005/04/11 23:03:12 jp Exp $
#

#---------------------------------------------------------------------
# signály, procesy
#---------------------------------------------------------------------

(sp0) skripty, spouštění skriptů, použití "#!/bin/sh", ...

(sp1) příkaz ps, signály, návratová hodnota příkazů, $?, $$, ...

(sp2) vytvořte si skript, který si pojmenujte tak, aby nekolidoval se
jmény skriptů ostatních, nechte ho čekat a z druhé konzole ho
sestřelte. Na konzoli, kde jste skript spustili, ověřte návratovou
hodnotu skriptu pomocí promenné "?".


Dále zkuste killnout proces někoho jiného (ps -ax), killnout si $$
pomocí signálu 15 a 9, vyberte sloupec výstupu příkazu ps.


(sp3) napište skript, který po zaslání interrupt signálu (tj.
stisknutí ^C na konzoli, kde jste skript spustili) vypíše řetězec
"signal caught" a skončí. Čekání skriptu emulujte například pomocí
"sleep 999".

Hint: trap


(sp4) vypište seznam všech běžících procesů v systému tak, že
vypíšete pouze jejich PID a pak jméno příkazu, kterým byl proces
spuštěn

Hint: option '-o'


#---------------------------------------------------------------------
# emulace existujicích příkazů/voleb pomocí příkazů jiných
#---------------------------------------------------------------------

(e1) částečně emulujte "ls -lL" pouze pomocí "ls -l" a jiných
příkazů, které znáte; pořadí vypisovaných řádků nemusí být
zachováno, stejně jako nemusí být zachováno zarovnání sloupců a u
symlinků nemusí být ve výstupu jméno symlinku jako tomu je u "ls
-lL", ale může tam být celé jméno souboru, na který symlink ukazuje.


(e2) jako (e1), ale zachovejte pořadí řádků; různé zarovnání sloupců
opět ignorujte

Hint: sed '=', sort -n, paste


(e3) jako (e1) nebo (e2), ale výstup musí obsahovat jméno symlinku.


#---------------------------------------------------------------------
# různé
#---------------------------------------------------------------------

(r1) napiště skript, který v aktuálním adresáři přejmenuje všechny
adresáře typu "_XXX" na "xxx"; například adresář "_INFO" změní na
"info". Přejmenování se týká pouze adresářů, ostatní soubory byť
vyhovujícího jména musí zůstat zachovány.