Operační systéme II
Transkript
Operační systéme II cvičení Přihlášení: student student mc – midnight commander Ctrl+Alt+F1 až F6 – z grafického rozhraní Alt+F1 až F6 – přepínání mezi nimi Alt+F7 – zpět ls adresář – zobrazí co je v daném adresáři ls -l adresář – zobrací co je v daném adresáři a více detaily ls -l adresář | more – zobazí po jednotlivých obrazovkách ls -la – vypíše i skryté soubory cd / - o úroveň výš cd – hodí mě do mého adresáře – označen vlnovkou cp „odkud“ „kam“- copy mkdir – make directory rm soubor – smaže soubor rmdir adresář – smaže adresář rm –r adresář – smaže vše v adresáři cat – vypíše obsah souboru man „příkaz“ – help příkazu (q - návrat z manuálu) wc –l – počítá řádky wc –m – počítá znaky wc –c – počítá byty root/ bin boot dev etc home lib media mnt opt proc root sbin srv sys tmp usr var d rwx rwx rwx „počet linků“ „vlastník“ „datum poslední modifikace“ „délka“ „název“ d – adresář - - soubor l – link r – právo číst w – zapisovat x – spustit ho - - právo není uděleno práva pro: vlastník skupina ostatní vlastník – každý adresář má svého vlastníka – individuálního i skupinového ls –l /etc |grep „^d“ |wc –l - spočítá jen adresáře -1- Christy Operační systéme II cvičení bez šedé části – vypíše adresáře cp /etc/passwd /home/student - musíme mít práva úplná cesta – začíná na začátku stromu (v rootu) /etc/passwd /home/student/data/data1 aktuální adresář – proměnná neúplná cesta – použivá se tak, že se před ní předřadí aktuální adresář cd /home/student/ – předřazení (umístění kde se nacházíme) data/data1 – neúplná cesta 1. vytvořit adresář počítač4 mkdir pocitac4 2. zkopírovat soubory passwd a group pod názvem hesla a skupiny cp /etc/passwd hesla cp /etc/group skupiny 3. vypsat obsah souboru passwd cat /etc/passwd 4. spočítat řádky souboru cat /etc/passwd |wc –l 5. spočítat znaky souboru cat /etc/passwd |wc –m příkazy – např. ls modifikátory – např. -la argumenty – obvykle označení adresářů a souborů se kterými se má pracovat Vi editor 1. v editoru vi napište následující program (jedná se o jednoduchou verzi programu cat) vi mycat.c /* cat: version 1 Print file on terminal */ #include <fcntl.h> #include <stdio.h> main(agrc,argv) int argc; char *argv[]; { int d,count; char buf[1024]; if(argc != 2); printf(„error: cat must have one parametr\n“); exit(1); } d = open(argv[1],O_RDONLY); if(d == -1) { printf(“cannot open file %s\n”, argv[1]); exit(1); } while(( count = read(d,buf,sizeof(buf))) > 0) write(1,buf,count); return 0; } ESC :w mycat.c - uložení souboru :q -vyskočení bez uložení -2- Christy Operační systéme II cvičení 2. Program přeložte a spusťte. Návod: Soubor se zdrojovým programem nazvěte mycat.c Překlad proveďte příkazem $cc mycat.c –o mycat - volání kompilátoru, musí se jmenovat *.c; -o definuje název, jinak by se jmenoval a.out Přeloženým programem vypište obsah souboru /etc/passwd $./mycat /etc/passwd - tečka znamená aktuální adresář 3. V některém z editorů X-windows (např. v xeditu) napište následující skript: #!/bin/bash echo „********************************************“ echo „pripojeni uzivatele:“ who echo „********************************************“ echo „Datum a cas:“ date echo „********************************************“ 4. Skript vyzkoušejte Návod: Soubor se skriptem nazvěte uvod. Skriptu přidělte přístupové právo spuštění $chod u+x uvod Skript spusťte $./uvod Cvičení 3 1. Vypište hodnoty proměnných TERM, USER a ?. Zadejte příkaz ls tak, aby proměnná ? měla hodnotu 1. echo $TERM xterm echo $USER student echo $? 0 ls -w echo $? 1 2. V systému existují systémové programy true a false. Program true nedělá nic ale skončí úspěšně (tj. s návratovovou hodnotou). Program false také nedělá nic , ale skončí neúspěšně (tj. s návratovou hodnotou 1). V jazyce C realizujte vlastní verze těchto programů. Nazvěte je mytrue a myfalse a odzkoušejte. main () main() { { exit(1); return 1; } } 3. Pomocí přesměrování standardního výstupu vytvořte programem cat soubor s názvem uzivatele a s jednořádkovým obsahem Tabulka uzivatelu: Potom pomocí programu cat doplňte tento soubor o tabulku uživatelů, která je uložena v souboru /etc/passwd. cat ctrl+D ctrl+C cat >a Tabulka uživatelů ctrl+D 4. Soubor lze hledat pomocí příkazu find / -name jméno_souboru -print Spusťte příkaz find s přesměrováním chybového výstupu do souboru ~/find_errors nebo /dev/null. find / -name jmeno_souboru 2>error 5. Příkazem nastavte proměnnou PATH tak, aby shell prohledával také aktuální a domácí adresář. Vyzkoušejte. echo $PATH 6. Nastavte prompt shellu bash tak, aby se v promptu vypisoval také čas. man bash PS1="\n:xt>" 7. Změňte následující program cat (viz cvičení 2) tak, aby mohl být spuštěn také A. bez parametrů (bude číst ze standardního vstupu) a -3- Christy Operační systéme II cvičení B. s libovolným počtem parametrů (vypíše všechny soubory jeden po druhém) /* cat: version 1 Print file on terminal */ #include <fcntl.h> #include <stdio.h> main(argc,argv) int argc; char *argv[]; { int d,count; char buf[1024]; if(argc != 2){ printf("error: cat must have one parametr\n"); exit(1); } d = open(argv[1],O_RDONLY); if(d == -1){ printf("cannot open file %s\n", argv[1]); exit(1); } while(( count = read(d,buf,sizeof(buf))) > 0) write(1,buf,count); return 0 ; } Pomocí vašeho programu cat spojte soubory /etc/passwd a /etc/group a spojený soubor uložte do passwd_group . cat /etc/passwd > spoj cat /etc/group >> spoj cat /tec/passwd /tec/group >spoj - jiná možnost zápisu kii.pef.czu.cz student student ssh kii.pef.czu.cz -l student -p 995 putty Cvičení 4 1. Použijte expansní výraz k výpisu informací o všech programech, které jsou v adresáři /bin a začínají na l nebo L. Dalším příkazem zjistěte zda některý z programů v /bin končí na číslici. ls /bin/[lL]* ls -l /bin/*[0-9] 2. Příkazem ls vypište z domácího adresáře všechny skryté soubory. ls ~/.* 3. Do proměnné X uložte aktuální datum a do proměnné Y uložte informaci o aktuálně připojených uživatelích (tj. výstup programu who). X=`date` Y=`who` 4. Do proměnné Z uložte pouze aktuální čas. (Návod: můžete buď použít modifikátor programu date který způsobí, že date vypíše pouze čas nebo můžete použít složený příkaz set ‘date‘ ; Z=$4 echo $4 set 100 200 300 echo $1 shift echo $1 100 - posune to 200 -4- Christy Operační systéme II cvičení 5. Sestavte tabulku z které bude patrné, jak následující znaky výluky ’ následujících znaků: $, *, \, ‘ ‘, > ? echo $USER echo `$USER` echo "$USER" ’ , ” ” a \ ruší speciální význam $ * \ `` > ? `` + + "" + \ + + 6. Napište script s nazvem nasob, který se bude spouštět se dvěma celočíselnými parametry a který vypíše jejich součin Návod: #!/bin/bash echo ‘expr $1 ’*’ $2‘ exit 0 Lze ve skriptu uzavřít znak * místo do jednoduchých uvozovek do dvojitých uvozovek? Vyzkoušejte a vysvětlete. Zjednodušte druhou řádku skriptu a znovu skript vyzkoušejte. expr 20 '*' 30 600 7. Vytvořte ve vašem domácím adresáři soubor který se bude jmenovat ?*!*. Potom jej přejmenujte na a_b.c touch "?*!*" 8. Prohlédněte si jaké v shellu existují aliasy. Vytvořte v systému alias lb, který provede dlouhý výpis adresáře /bin se zastavováním po naplnění obrazovky. Vyzkoušejte. (alias lb=’ ls –l /bin | more’ ) alias lb=' ls -l /bin | more' 9. Jaký bude výsledek následujících složených příkazů: test –w /etc/passwd ;echo $? [ -f /bin/ls ];echo $? [ -d /bin/ls ];echo $? [ -r /etc/group –a –s /etc/group ];echo $? Vyzkoušejte a vysvětlete. (operátor -a má význam and a operátor –s má význam nenulová délka souboru) 10. Jaký bude výsledek příkazů: HISTSIZE=500 [ $HISTSIZE –lt 1000 ] ; echo $? [ $HISTSIZE –ge 1000 ] ; echo $? #!/bin/bash if [ $# -eq 0 ] then dir="." else dir=$1 fi while : do if [ ! -d $dir ] then echo "$0 : $dir neni adresar" else echo "$dir :" fcount=0 dcount=0 scount=0 for file in $dir/* do if [ -f $file ] then if [ -L $file ] then scount=`expr $scount + 1` -5- Christy Operační systéme II cvičení else fcount=`expr $fcount + 1` fi elif [ -d $file ] then dcount=`expr $dcount + 1` fi done echo $dcount adresaru $fcount obycejnych souboru $scount linku fi if [ $# -le 1 ] then break else shift dir=$1 fi done Cvičení 5 1. Jaký bude výsledek příkazů zadaných za sebou v bash shellu? $echo $echo $!e $echo $[ -f $echo ".*" $? ’[ -f /etc/passwd ]’ /etc/passwd ] ; echo $? .* Echo $* Echo $? – vrati 0 !e – historie, posledni prikaz ktery zacina na retezec e 2. Vysvětlete a vyzkoušejte činnost následujícího skriptu. ( Proměnná # obsahuje počet parametrů spuštění) #!/bin/bash while [ $# -gt 0 ] do echo -n "$1 " shift done echo tento kód lze zaměnit za echo $* :))) Skript podstatně zjednodušte tak, že použijete proměnnou *, která obsahuje všechy parametry spuštění. 3. Napište a odzkoušejte skript který spočte kolik je v zadaných adresářích podadresářů a kolik normálních souborů. File: abc Col 0 582 bytes 100% #!/bin/bash #nums : script vypise pocet souboru a adresaru if [ $# -eq 0 ] then dir="." else dir=$1 fi while : do if [ ! -d $dir ] then echo "$0 : $dir neni adresar" else echo "$dir :" fcount=0 dcount=0 for file in $dir/* -6- Christy Operační systéme II cvičení do if [ -f $file ] then fcount=`expr $fcount + 1` elif [ -d $file ] then dcount=`expr $dcount + 1` fi done echo $dcount adresaru $fcount obycejnych souboru fi if [ $# -le 1 ] then break else shift dir=$1 fi done Skript upravte tak, aby se: 1. započítávaly i skryté soubory 2. zvlášť vypisoval počet souborů, které jsou symbolickými linky Cvičení 6 1. Ve svém domácím adresáři vytvořte kopie programů cp a cat s názvy kopie a vypis a dále podadresář programy. V adresáři programy vytvořte hard link na program kopie s názvem cp a soft link na program vypis s názvem cat, který bude obsahovat úplnou cestu k programu vypis. Kolik hard linků je na soubory kopie a vypis a na podadresář programy? Ověřte programem ls. / - kopie (cp) - výpis (cat) - programy - cat -> soft link na výpis - cp -> hard link na kopie – bude obsahovat úplnou cestu a pak tam bude hardlink, který se bude jmenovat cp na kopii Cp cat ~/student/cat Cp cp ~/student/cp Mv cp kopie Mv cat vypis Ln soubor link Ln –s soubor link Ln –s ~/vypis ~/programy/cat 2. Pomocí programu grep zjistěte kolik je v adresáři /bin a /etc symbolických linků. Návod : Pokud grep spustíte takto: grep ´^l´ , grep bude číst standardní vstup a propouštět pouze řádky, které začínají na l. Ls –l /bin | grep ‚*l‘ | wc -l 3. Nastavte přístupová práva k souboru kopie tak, aby výpis programem ls -l byl rwSr-sr—T a k souboru vypis tak, aby výpis programem ls byl rwsr—xrwt. Který z programů kopie nebo vypis můžete spustit? Vyzkoušejte. Ls –l /usr/bin/passwd – vypise prava pro passwd | wc -l Sbit uzivatele: Find /usr/bin –user root –perm +6000 (hledani souboru, kde hledat, co se hleda – vlastnictvi root a permission a +6000 je sbit uzivatele nebo sbit skupiny) Co udelat, kdyz se musi zmenit heslo rootu? Xvin971 (mozna xwin971) Jak nakopirovat bash pro sebe :)) (ale nejde to, prej, haha) Cp /bin/bash ~ -7- Christy Operační systéme II cvičení Chmod 7777 ~/bash Chown root bash 4. Zjistěte jak je v systému zajištěno, aby uživatel nemohl vytvořit kopii shellu s nastaveným s-bitem uživatele, který by vlastnil root. Návod : Vytvořte kopii shellu bash a nastavte mu všechna práva a s-bit uživatele. Potom zkuste předat jeho vlastnictví superuživateli. Vytvořili jste kopii shellu s nastaveným s-bitem ve vlastnictví superuživatele? 5. Vytvořte v domácím adresáři kopii systémového programu cat s názvem mycat. Vytvořte soubor data s libovolným obsahem. Nastavte přístupová práva k souborům mycat a data tak, aby ostatní uživatelé mohli zobrazit obsah souboru data pouze vaším programem mycat . Cesta povede takto, nikudy jinudy to jit nesmi: Cat -> mycat -> data Rwxr-xv-x +sbit uzivatele EVID Jak musi byt nastavena prava, aby uzivatel soubor nemohl editovat a aby mohl udelat zmenu sveho hesla? /etc/passwd /usr/bin/passwd 6. Programem find vytvořte soubor, který bude obsahovat výpis všech souborů, které jsou ve vlastnictví superuživatele a které mají nastavem s-bit uživatele nebo s-bit skupiny. Popis programu find najdete v on-line manuálu. Cvičení 7 1. a. Vypište všechny procesy, které v systému běží. (ps axl nebo ps –el) b. Vypište jen procesy s přiřazeným terminálem. (ps al ) c. Vypište procesy, které máte ve svém vlastnictví. (ps -lu username ) d. Vypište všechny procesy, které jste spustili z shellu, kterému zadáváte příkazy. (ps –l) (Ve všech příkazech můžete vynechat modifikátor l a dostanete zkrácený výpis. Pokud před modifikátory uvádíte – , používáte SYSTEM V syntax. Pokud – neuvádíte používáte BSD syntax.) 2. V jazyce C napište nekonečný cyklus. Program spusťte na popředí a sledujte jeho činnost z jiného terminálu. a. Program zrušte v okně, ve kterém běží. b. Program znovu spusťte a zjistěte PID jeho rodiče. c. Sledujte čas spotřebovaný procesem. b. Program zrušte z druhého okna zasláním signálu. 3. Program z příkladu 1 spusťte na pozadí a sledujte jeho činnost ze stejného okna. Nakonec program zrušte. 4. Program z příkladu 1 spusťte na pozadí. a. Program pozastavte zasláním signálu a přesvědčete se o jeho zablokování. (Signál, který způsobí pozastavení je SIGSTOP (19) ). b. Program odblokujte a přesvědčete se, že skutečně běží. (Signál, který způsobí odblokování je SIGCONT(18)). c. Nakonec běžící program zrušte. 5. Napište skript, který každých 10 sec do souboru ~/journal vypíše datum a čas a připojené uživatele. Skript vyzkoušejte. Skript pozměňte tak, aby časový interval výpisu bylo možné zadávat parametrem spuštění skriptu. 6. Analýzou programu stanovte kolik procesů v systému poběží a kolik jich zůstane zablokováno , pokud přeložíte a spustíte následující program. main() { fork(); if(fork()==0) -8- Christy Operační systéme II cvičení pause(); fork(); if(fork()==0) while(1); pause(); } Výsledek ověřte tak, že program napíšete a spustíte. Nakonec všechny procesy zrušte. Fork znamená kopie. Uložím jako něco.c Nastaveni přístupových práv: Chmod 777 neco.c Kompilace Cc neco.c Vytvoří a.out a ten jde spouštět pomoci ./a.out Ps –l Vypíše procesy systému ./a.out & Spuštění na pozadí Při ps –l zobrazí a.out s PID Kill PID – ukončí daný PID Kill -19 PID Pozastaví nebo dokončí prováděný PID Kill -18 PID Spuští daný PID Killall a.out Vypne najednou všechny vytvořené procesy programem a.out Cvičení 8 1. Které z následujících znakových řetězců 12? .cshrc abc.c !?cshrc obsahují instanci následujícího regulárního výrazu: a) \.c.* .c.* b) c) bc..* ?c bc 2. Výsledky z př. 1 ověřte pomocí programu grep. (Návod: Vytvoříte řádkový soubor, jehož řádky budou obsahovat jednotlivé řetězce. Tento soubor bude vstupem programu grep, který budete spouštět s jednotlivými regulárními výrazy.) 3. Pomocí programů ls, grep a wc spočtěte kolik je v /etc podadresářů a kolik je v /bin linkových souborů. 4. Pomocí programu grep vyhledejte všechny soubory s nastaveným s-bitem uživatele nebo s nastaveným s-bitem skupiny. (Výpis všech souborů získáte příkazem ls –R / ) 5. Přeložíte a spustíte následující program. #include <stdio.h> main() { if(fork()==0) -9- Christy Operační systéme II cvičení execl(”/bin/date”, ”date”, NULL); execl(”/bin/ls”, ”ls”,”-al”,”/etc”, NULL); pause(); } a) b) c) d) Který z programů ls a date je spuštěn rodičovským a který dětským procesem? Kolik zůstane v systému zablokovaných procesů? Vložte do programu tisky tak, aby bylo možné odpověď na otázku a) zkontrolovat. (Číslo procesu lze získat pomocí volání getpid()a číslo rodičovského procesu pomocí volání getppid(). Program pozměňte tak, aby vznikl ještě jeden potomek původního rodičovského procesu, který bude vypisovat obsah souboru /etc/passwd . Grep ‚\.c.*‘ http://www.josef-dvorak.webzdarma.cz/36unx/36unx.htm Ls –l /etc | grep ‚^d‘ | wc –l Výsledek je 57 :)))) Ls –l /etc | grep ‚^l‘ | wc –l Výsledek je 3 Cat ~/kopie | grep ‚^$‘ | wc -l Wc –l – vytiskne počet řádek Cat ~/kopie – vypíše na výstup obsah souboru kopie Cat /etc/passwd | grep bash Cat passwd udělá výpis souboru Grep bash vypíše každou řádku, která obsahuje slovo bash Cely příkaz vypíše soubor passwd, každou řádku, která obsahuje slovo bash Ls –Rl / 2>/dev/null | grep ‘^_..[sS]‘ ls -Rl / 2>/dev/null | egrep '^[-dlbc]..[sS]|^_.....[sS]' cc prog.c - 10 - Christy Operační systéme II cvičení Dalsi priklad – kazdych 10 vterin vypise datum a prihlaseneho uzivatele do souboru journal File Cv7 #!/bin/bash if [ -f ~/journal ] then rm ~/journal fi while : do date >>~/journal who >>~/journal echo '***********************' >>~/journal sleep 10 done chmod 777 cv7 ./cv7 vytvori se soubor journal, ktery obsahuje dane informace. Co dela program fork, jak ho resit co dela? Fork vytvori novy proces puvodniho, takze mam dva procesy. If fork==0 – pauza - 11 - Christy
Podobné dokumenty
Digitální kapesní videokamera „AIPTEK“
Tiskněte tlačítko přepínaní režimů záznamu (MODE) tak dlouho, dokud se na
displeji neobjeví symbol „hvězdy“ s písmenem „H“ (high = vysoká kvalita) nebo
Databázové systémy Tomáš Skopal
mapování „objektů do tabulek“ přináší režii, kterou uživatel
nevidí (což může být dobře i špatně)
Tohle je jenom provizorní řešení (z časových důvodů)
Jestli budu dělat opravky :) tak si s tím možná ještě pohraji.
Jana Richterová Půdní semenná banka a přežívání semenáčků v
často bývá, že pro populační dynamiku daného druhu je limitující nedostatek semen na
lokalitě, protože dosévané druhy často úspěšně klíčí i přežívají (review Turnbull et al.
Swim Spa Hydropool
4. Pokud nemáte továrně vyrobený cedrový obklad,
předpokládá se, že si stavíte vlastní na míru. Mějte proto
na paměti následující:
a) Váš bazén je samonosný. Cedrový obklad by měl být
pouze pro dek...
CPU RAM I/O BUS
verze je podstatně dražšı́
• pod Linux, soubory v /usr/doc obsahujı́ dokumentaci k jednotlivým komponentám OS a dalšı́m programům
– HOWTO - jak udělat
– FAQ (Frequently Asked Questions) - c...
Souborové operace
ne adresáře. Pro mazání musí mít uživatel právo zápisu
do adresáře, kde je soubor umístěn.
Programování v Unixu
• předmět UNIX je 2/1, cvičení bude jednou za dva týdny v laboratoři UNIX
• informace a materiály k přednášce na http://www.devnull.cz/mff
• zapsat se na cvičení na webu
• zápočet za zápočtový prog...