Unix je víceuživatelský a víceúlohový OS Mezi základní úkoly každého OS patří: - Správa hardwareových prostředků - Správa souborového systému - Správa procesů - U víceuživatelských systémů rovněž řízení přístupu uživatelů k elementům systému Začátek práce Unix podporuje terminálovou komunikaci. Uživatel se hlásí z terminálu - zařízení, které má obrazovku a klávesnici (nemusí mít paměť, disk, univerzální procesor atp.). Unixový počítač zpracovává veškeré vstupy z klávesnice, výsledky zobrazuje na obrazovku. Některé operační systémy (např. Novell Netware) tento typ služby neposkytují. K unixovému počítači je možné se přihlásit jedním z následujících způsobů: • z terminálu, který je fyzicky připojen k unixovému počítači přes seriové rozhraní (multiplexor) • prostřednictvím počítačové sítě z jiného počítače. Na tomto počítači musí být spuštěn program, který umí emulovat terminál na počítačové síti. Unix podporuje terminálový přístup přes síť prostřednictvím protokolu TELNET ze skupiny protokolů TCP/IP. Po spuštění OS Unix v textovém módu projeví OS ochotu komunikovat s uživatelem vypsáním výzvy – PROMPTU. Standardní promptem je znak $(obdoba DOSovského c:\), liší se podle konfigurace systému. Všechny znaky, respektive příkazy, zadané uživatelem za výzvou promptu se OS pokusí zpracovat, interpretovat. K tomu slouží INTERPRET PRIKAZU – SHELL. Shell je obdobou command.com v MS DOS. Posloupnost činností při vyhodnocení uživatelem zadaného příkazu může být zhruba následující: • přihlášení k systému (pomocí telnetu) • systém vypíše prompt – systém je připraven komunikovat • uživatel může zadávat příkazy (např. ls, date, mkdir, atd. ) • SHELL přečte znaky z příkazové řádky a provede je dle typu příkazu • výsledkem je vykonání zadaného příkazu SHELL rovněž poskytuje podporu pro pohodlnější manipulaci s příkazovou řádkou a historií příkazů. historie příkazů: zpět Ctrl-p, dopředu Ctrl-n editace příkazové řádky: úplné smazání: Ctrl-u pohyb doleva: Ctrl-b pohyb doprav: Ctrl-f na konec: Ctrl-e na začátek: Ctrl-a mazání znaku: Ctrl-d
Pokud se chcete dozvědět více o některém z programů, použijte manuálové stránky. Vyvoláte je příkazem man, např. man ls vám podá informace o příkazu ls. (pohyb dolů – Space, ukončení - q) Definice proměnných V SHELLu lze definovat uživatelské proměnné, které nemají typ, zachází se s nimi podle potřeby. Rovněž existují předdefinované(systémové) proměnné. Předdefinované (systémové) HOME, PATH, TERM, LOGNAME, PS1, ... env - výpis speciálních proměnných Definované uživatelem a=123 Přiřazení hodnoty proměnné a (bez mezer). b=$a Přiřazení obsahu proměnné a do proměnné b (bez mezer). echo $b Zjištění obsahu proměnné b. Přímo v SHELLu lze rovněž vytvářet všechny obvyklé programové konstrukce. Úkol 1.: 1. Vyvolejte nápovědu k příkazu ls 2. Nadefinujte proměnnou xjmeno, přiřaďte do ní svoje přihlašovacíjméno. Vypište obsah proměnné xjmeno (příkaz echo). Práce se soubory v OS Unix Logická struktura uspořádání souborů je stejná jako v MS DOS - stromová struktura V Unixu existují tři typy souborů: • Běžné soubory (posloupnost bytu) • Adresářové soubory (adresáře) • Specielní soubory (tiskárna, disk…) Ve jméně souboru nepoužíváme znak / a obvykle ani speciální znaky shellu (#,$,%, atd.) POZOR !!! oddělovač adresářů je /, v MS DOS \ Příkazy související se soubory a adresáři pwd - výpis jména pracovního adresáře cd - změna pracovního adresáře ls - výpis obsahu adresáře ls -l úplný výpis ls -a vypíše i skryté soubory ls -R vypíše rekurzívně i obsahy podadresářů mkdir - vytvoření adresáře rmdir - zrušení prázdného adresáře rm - smazání souborů cp - kopírování souborů mv - přemístění či přejmenování souboru cat - výpis obsahu souboru cat file1 výpis obsahu souboru file1 cat file1 file2 file3 výpis obsahu souborů
cut - výběr určitých polí (sloupců) souboru cut -f2 file1 vypiš druhý sloupec implicitním oddělovačem je tab cut -f1,3 -d" " file1 vypiš první a třetí sloupec oddělovačem je mezera head - zobrazení prvních několika řádků souboru head -n 2 file1 první dva řádky souboru file1 tail - zobrazení několika posledních řádků souboru tail -n 2 file1 poslední dva řádky souboru file1 tail -n +2 file1 od druhého řádku do konce souboru more - výpis po obrazovkách more file1 grep - hledání řetězce v souboru grep xnovak00 seznam vypíše řádky souboru seznam, které obsahují řetězec xnovak00 wc - (word count) počítá slabiky, slova nebo řádky souboru wc -l file1 spočítá řádky souboru file1 wc file1 spočítá všechno I v Unixu existují zástupné znaky - Wildcarts znak * - libovolná skupina znaků znak ? – jeden libovolný znak Příklad: příkaz ls a* vypíše všechny soubory začínající znakem a v aktuálním adresáři. Vstup, výstup, přesměrování Jakmile spustíme jakýkoliv program automaticky se nám otevírají tyto tři základní soubory: stdin (0), stdout (1) a stderr (2), které představují standardní vstup, standardní výstup a standardní chybový výstup. Standardní vstupy a výstupy jsou nějak nastaveny, výstupem bývá zpravidla monitor PC, vstupem pak klávesnice. Nicméně je možné provést přesměrování vstupů/výstupů tak, aby odpovídaly našim požadavkům. Často bývá například vhodné přesměrovat výstup nějakého procesu do souboru. Přesměrování: stdin < cat file1 = cat
cat file2 = file2 cat stderr 2> rm neex_file 2>err Přklady: 1) cat file1 >file2 2>error Pokud file1 existuje, vypíše se do file2, pokud neexistuje, chybová hláška se zapíše do souboru error. 2) cat file1 >file2 2>&1 Standardní i chybový výstup do stejného souboru file2.
Vytvoření prázdného souboru: >file Zahození výstupu: program > /dev/null Úkol: 1.Přesměrujte výstup příkazu man ls do souboru ls.txt 2.Přečtěte si jej pomocí příkazu cat. Atributy souboru a přístupová práva Atributy zjistíme příkazem ls –l 1. Přístupová práva (d rwx rwx rwx) znak 1: b = blokové zařízení (např. disk, viz. /dev) c = znakové zařízení (např. terminál, viz. /dev) d = adresář l = symbolický link - = obyčejný soubor 1. trojice rwx - práva vlastníka 2. trojice rwx - práva skupiny 3. trojice rwx - práva všech ostatních uživatelů obyčejný soubor právo rčtení wzápis (mazání) xspustit jako příkaz
adresář vypisování obsahu vytváření a mazání souborů procházení do podadresářů
2. Počet jmen (linků) obyčejného souboru. Počet podadresářů + 2 (./ ../) u adresáře. 3. Vlastník 4. Skupina do níž vlastník patří 5. Velikost souboru adresáře: 96, 1024 6. Datum poslední modifikace 7. Jméno souboru Příkazy chown - změna vlastníka chown nový_vlastník jméno_souboru chmod - změna přístupových práv Komu práva přiřadit: u - user (vlastník) g - group (skupina) o - others (ostatní) a - all (nastavit pro vlastnika, skupinu a ostatní stejně)
Která práva přiřadit: r - read (čtení) w- write (zápis) x - execute (spouštění) Jakou operaci použít: = nastavit + přidat - odebrat Příklady postupné změny přístupových práv souboru beta, který má práva rwx--x--x: chmod o-x beta ==> práva rwx--x--chmod a+r beta ==> práva rwxr-xr-chmod u-x,g-x,o=x ==> práva rw-r----x Úkol: Vyzkoušejte použití příkazu chmod. Roury (kolony, pipe) Podobně jako lze přesměrovat například standardní výstup do souboru, lze výstup příkazu přesměrovat (předat) okamžitě ke zpracování dalšímu příkazu. k tomuto úkonu slouží tzv. roura(pipe). Lze si ji opravdu představit jako potrubí. Příklad: Zjistíme, zda je přihlášen uživatel xnovak00. 1) Bez použití roury je třeba použít dočasný soubor. who > tmp grep xnovak00 tmp rm tmp 2) Pomocí roury. who | grep xnovak00 Úkol: Vypište na monitor soubor ls.txt po jednotlivých stránkách(příkaz more) Procesy ps - výpis procesů, běžící děj v systému (např. prováděný program) $ ps -u xnovak00 vypiš všechny procesy uživatele xnovak00 kill - zaslání signálu procesu $ kill -s KILL 14397 = $ kill -9 14397 zabije proces 14397. $ man 5 signal seznam signálů Práce na pozadí Příkazy, které trvají dlouho, nebo grafické aplikace spouštěné z příkazové řádky spouštíme na pozadí. Shell pak bude opět schopen přijímat příkazy. Výstupy programu spuštěného na pozadí je vhodné přesměrovat do souborů, aby se nevypisovaly na terminál. Příklad: find / -name bin >vysl 2>/dev/null &
Vyhledá všechny soubory (adresáře) bin v systému souborů. Výsledek hledání zapíše do souboru vysl a chybová hlášení se zahodí (/dev/null). Proces se spustí na pozadí (&), takže je shell schopen přijímat další příkazy. Na obrazovku se vypíše číslo jobu a PID posledního procesu v případné rouře. [1] 14071 Job na popředí se dá pozastavit Ctrl-Z. jobs - výpis jobů bg - přenese pozastavený job na pozadí fg - přenese pozastavený job na popředí kill - ukončí job Spouštění více příkazů z jedné příkazové řádky ; - odděluje příkazy stejně jako Enter $ date; ls; who & - spustí všechny příkazy paralelně na pozadí $ xterm & xterm & xterm & && - druhý příkaz se spustí, pokud první příkaz skončil úspěšně || - druhý příkaz se spustí, pokud první příkaz skončil neúspěšně $ gcc -o myprog myprog.c && myprog Pokud skončí překlad programu myprog.c úspěšně, je spuštěn. $ gcc -o myprog myprog.c || vi myprog.c Pokud skončí neúspěšně, spusť editor. Příkazy se mohou sdružovat pomocí závorek. Př.: $ date; ls >file1 $ (date; ls) >file1 Př.: $ (sleep 5; date) & date Úkol: Vypište obsah proměnné xjmeno po uplynuti prodlevy 5 vteřin od spuštění Vámi vytvořeného příkazu. Zajistěte, aby během doby prodlevy bylo možné nadále používat příkazovou řádku(spusťte proces na pozadí).
Použitá “literatura”: http://www.volny.cz/hodza/ODKAZY/manualy.htm http://www.fit.vutbr.cz/study/courses/OS1/public/Lab/os1-cv-uvod.txt