Úkol Vytvořit soubor – touch file Zpřístupnit ho ostatním studentům, ale ne mě (uživatel tupost) – lze to? Na čem to závisí? – závisí to na tom, zda jsou ostatní studenti ve stejné uživatelské skupině – chmod g+rwx file Vytvořit adresář a v něm soubory tak, že půjde číst pouze daný soubor (pro skupinu a ostatní uživatele) – mkdir dir; touch dir/file1; touch dir/file2; – chmod 711 dir; – nalogovat jako jiný uživatel – cat ~user/dir/file1; Přesvědčit se, že zkopírováním souboru se mění vlastník – cp ~jiny_user/file1 ~/file2 – ls –l file2 Nalézt příkaz, který vylistuje skupiny ve kterých jste (pouze a jenom skupiny) – apropos group – groups
Úkol vypište loginy všech uživatelů systému – cut /etc/passwd -d: -f1 vypište UID a domovské adresáře všech uživatelů – cut /etc/passwd -d: -f1,6 nahraďte oddělovače v /etc/passwd za tabulátory a uložte do nového souboru (použijte | pro přesměrování příkazu cat) – cat /etc/passwd | tr ":" "\t" vyberte soubor a změnte ho tak, aby obsahoval pouze velká písmena – cat /etc/passwd | tr “[:lower:]" " [:upper:] “ – cat /etc/passwd | tr “a-z" " A-Z" setřiďte /etc/passwd podle loginů – login je první – sort /etc/passwd Jak smazat zvolené soubory bez použití přepínače –delete v find? – find. –maxdepth 1 –name “*.c” –exec rm {} \;
Úkol 1.Jaký je rozdíl mezi: cat file >log 2>&1 cat file 2>&1 >log Nevíte-li – vyzkoušejte. 2.Vypište do souboru všechny uživatele systému setříděné podle abecedy odzadu a k nim jejich skupiny oddělené od sebe tabulátorem (asi budete potřebovat alespoň jeden mezisoubor) cat /etc/passwd | cut -d: -f1 > ~/p1; cat /etc/passwd | cut -d: -f4 | sort -r > ~/p2; paste ~/p1 ~/p2; rm ~/p1 ~/p2 3.Setřiďte na obrazovku soubory v /etc (ne v podadresářích) od souboru s největším počtem řádku k souboru s nejmenším počtem řádků a na výstup vydejte dvojici s informací o jméně a počtu řádek 4.Viz. předchozí, ale vypište pouze jména souborů 5.Viz. předchozí, ale vypište pouze první tři 1.find /etc –maxdepth 1 –name “*” –type f –exec wc –l {} \; 2>/dev/null | sort –n –r | cut –d\ -f2 | head –n 3 6.Vypište všechny uživatele systému velkými písmeny do souboru a obsahuje-li název písmena, tak je nahraďte za tečky a vypisujte pouze neduplicitní řádky (napověda – mrkněte do helpu k sortu) 1.cat /etc/passwd | cut –d: -f1 | tr “[:lower:][:digit:]” “[:upper:].” | sort –u > xxx
Úkol 1.vytvořte textový soubor kde v obsahu bude mimo jiné “x+y=(23*5)” a vytvořte regulární výraz, který najde právě tento výraz 1.x\+y=\(23\*5\) 2.Co je nalezeno výrazem [[]] ? 1.[], ale ne pouze jeden z nich 3.Vyhledejte všechny čísla v textu 1.\b\d+\b 4.Vyhledejte v textu všechna rodná čísla. 1.\d{6}/\d{3,4} 5.Vyhledejte v textu všechny výskyty IP adres. 1.\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
Úkol 1.Nahraďte všechný výskyty slova black za white 1.sed "s/black/white/g" file 2.Smažte první 2 řádky souboru 1.sed “1,2 d" file 3.Smažte jednořádkové C komentáře (začínají // a pokračují do konce řádku) 1. sed "s/\/\/.*//" tests 4.Viz. předchozí, ale pokud komentář začína na začátku řádky, tak také smazat danou řádku (tj. po minulém příkladě můžou zbýt prázdné řádky a tyto odstranit) 1. sed "s/\/\/.*//" tests | sed "/^$/ d" 5.Vypište do souboru even řádky souboru začínající na sudé číslo 1.sed -n "/^[0-9]*[02468][^0-9]/ p" file > even
Úkol 1.Vytvořte skript, který najde všechny céčkovské zdrojáky v aktuálním adresáři a jejich název uloží do proměnné definované jako argument skriptu. Zde by se mohlo zdát, že řešení spočívá ve vyexportování proměnné a její název předat do skriptu (bez vyexportování nebude v subshellu vidět!!!). Problémem je, že jediná komunikace od potomka k rodiči je přes návratovou hodnotu!!! Návratová hodnota je ovšem pouze číslo!!! Jediným řešením, které je přibližné zadání je napsat skript, který bude požadovanou informaci dávat na výstup a tuto informaci uložit do chtěné proměnné “zvenku”: script.sh: ls *.c x=`sh script.sh` echo $x 2.Spusťte najednou výpis dvou souborů (pomocí 2 příkazů cat) a výstup obou zapište do jednoho výstupního souboru. (cat file1; cat file2) > file12 3.Napište skript, který pro zadaného uživatele vypíše počet jeho procesů. ps -u $1 | wc -l
Úkol 1.Zkraťte následující kód na jednořádkový zápis (myslí se na 1 příkaz): if [ -n "$1" ] ; then param1=$1 ; else param1=20; fi param1=${1:-20} 2.Vytvořte skript, který dostane jako vstup soubor a na výstup dá pouze řádky s délkou vetší než konstanta. width=72 if [ ! -r "$1" ] ; then echo "Usage: $0 filename" >&2; exit 1 fi while read input; do if [ ${#input} -gt $width ] ; then echo "$input" | fmt else echo "$input" fi done < $1 exit 0
Úkol 3.Spočítejte průměr čísel, které jsou argumentem vstupu. for i in $* ; do temp_total=`expr $temp_total + $i` done avg=`expr $temp_total / $number_of_args` echo "Average of all number is $avg" 4.Spočítejte faktoriál čísla zadaného ze standardního vstupu n=0; nconst=0; fact=1 echo -n "Enter number to find factorial : " read n nconst=$n while [ $n -ge 1 ]; do fact=`expr $fact \* $n` n=`expr $n - 1` done echo "Factorial for $nconst is $fact" 5.Najděte způsob, jak zjistit, kolik instancí shellu běží pod daným uživatelem. ps | grep "bash" | wc –l