Úvod unx-predn_01-uvod.odt 25.02.2008 16:13:43 1
Operační systém UNIX Přednášky Jan Zajic, zajic@fel.cvut.cz, K226 Web service.felk.cvut.cz/courses Cíl předmětu pokročilý uživatel začínající administrátor Přednášky přehled z pohledu uživatele základní informace o administraci systému Cvičení praktické procvičování uživatelských příkazů programování v shellu unx-predn_01-uvod.odt 25.02.2008 16:13:43 2
Podmínky udělení zápočtu viz web Klasifikace zkoušky Body ze cvičení Písemka - 40 bodů je povolena libovolná literatura (ne v elektronické podobě) Klasifikace viz web [1] Přednášky (web) [2] Manuálové stránky Unixu [3] http://docs.sun.com [4] cokoliv o unixu, shellu... Literatura unx-predn_01-uvod.odt 25.02.2008 16:13:43 3
Historie konec 60. let AT&T + MIT + GE vyvíjí MULTICS (ultimate multi-userenv.) 1969 AT&T Bell Labs - začátek OS Unix (PDP7) Ken Thompson vytváří assembler, editor, shell a syst.soub. začátek 70. let kolem 1975 začátek 80. let konec 80. let AT&T vývoj OS Unix (PDP11/20). Ken Thompson vytváří interpret B, pak NB (NewB) Dunnis Ritchie vytváří C Kernel a shell přepsán do C University of California et Berkley (ucb) - BSD Unix Komerční zájem o OS Unix, DARPA Návrh standardů (POSIX, XPG, SVID), SVR4 Unix 1991 Linus B. Torvalds vytváří jádro OS Linux unx-predn_01-uvod.odt 25.02.2008 16:13:43 4
Vlastnosti (většinou nové myšlenky) víceúlohový běh více úloh ve sdílení času (timesharing), ochrana paměti, plánování procesů víceuživatelský možnost současné práce více uživatelů (každý má k dispozici virtuální počítač) identifikace a vzájemná ochrana uživatelů unifikované prostředí přenositelný mezi platformami (90% jádra v jazycec) interaktivní přístup s možností vytváření dávek příkazů shell jako rozhraní uživatele a interpret řídícího jazyka hierarchický systém souborů odpadá potřeba rezervovat místo pro vytvářené soubory přesměrování a řetězení vstupu a výstupu příkazů vše je soubor (i periferie, nyní iprocesy) unx-predn_01-uvod.odt 25.02.2008 16:13:43 5
Další rysy podpora práce v síti nejprve komunikace mezi dvěma počítači (uucp, mail) později protokoly TCP/IP a Internet grafické prostředí virtuální grafický terminál X-Window různá grafická uživatelská rozhraní (GUI) nad X - CDE, GNOME rozšíření pro práci v reálném čase jiné plánovací algoritmy, jiné třídy priorit, použití vláken v jádře (viz dále) podpora multiprocesorových systémů (SMP) přechod od plánování procesů na plánování vláken (thread) podpora vláken v jádře unx-predn_01-uvod.odt 25.02.2008 16:13:43 6
Architektura OS Unix programy interprety příkazů dávky příkazů (shells) (scripts) systémové procesy (daemons) knihovny Režim uživatelský jádro operačního systému (kernel) vrstva jádra závislá na HW (HAL) Režim jádra hardware unx-predn_01-uvod.odt 25.02.2008 16:13:43 7
Poprvé u terminálu Přihlášení do grafického prostředí necháme na cvičení Přihlášení do příkazové řádky (konzole, ssh) musíme znát uživatelské jméno a heslo jméno nesmí být napsáno velkými písmeny u hesla (podobně jako jinde v UNIXu) se rozlišují malá a velká písmena znaky hesla se nezobrazují pozor na používání numerické a české klávesnice login: zajic password: login incorrect login: zajic password: Last login: Sat Feb 24 21:31:36 from dilna Sun Microsystems Inc. SunOS 5.8 Generic February 2000 unx-predn_01-uvod.odt 25.02.2008 16:13:43 8
Změna hesla heslo se mění příkazem passwd z důvodů bezpečnosti nejméně 6 znaků, alespoň nějaký znak různý od písmen u standardního unixu se rozlišuje nejvíce 8 znaků heslo lze změnit pouze za podmínky, že známe původní heslo zapomenuté heslo nezjistí ani administrátor, může ho však změnit bez znalosti původního hesla $ passwd Old password: <zadat staré heslo> New password: <zadat nové heslo> Retype new password: <zopakovat nové heslo> Odhlášení současný stisk kláves Ctrl a D (značí se ^D) exit logout unx-predn_01-uvod.odt 25.02.2008 16:13:43 9
Jména souborů (adresářů) Maximální délka jména závisí na implementaci ( obvykle 255, s5-14 ) Jsou povoleny všechny znaky kromě lomítka (/) Nedoporučené znaky jsou: nezobrazitelné ( <Ctrl>A) znaky interpretované shellem ( *, #, $,mezery ) Poznámky: Malá a velká písmena se rozlišují. Tečka je platný znak. Jména souborů začínající tečkou se: nenahrazují na příkazové řádce při použití znaků * a? nevypisují příkazem ls (jen s přepínačem -a) proto jména konfiguračních souborů obvykle začínají tečkou:.profile,.kshrc,... Jména tečka (.) a dvě tečky (..) jsou rezervována pro:. - aktuální adresář.. - nadřazený adresář unx-predn_01-uvod.odt 25.02.2008 16:13:43 10
Adresářová struktura Absolutní (úplná) cesta (Absolute/Full Path) určení cesty k souboru úplným zápisem všech adresářů ( oddělených znaky / ) počínaje kořenovým adresářem (/) Aktuální (pracovní) adresář (Current/Working Directory) zobrazen příkazem pwd hodnota proměnné PWD mění se příkazem cd <nový pracovní adresář> je určen absolutní cestou v každém procesu může být jiný má synonymum (link) tečka (.) synonymum nadřazeného adresáře jsou dvě tečky (..) unx-predn_01-uvod.odt 25.02.2008 16:13:43 11
Relativní cesta (Relative Path) nezačíná / určuje cestu k souboru spolu s pracovním adresářem Cesta k adresáři (Path) + jméno souboru (Name) = cesta k souboru (Pathname) Domovský adresář (Home Directory) definován pro každého uživatele po přihlášení je pracovním adresářem jméno uloženo v eviroment proměnné HOME nastaví se jako pracovní příkazem cd bez parametrů obvykle /home/<username> nebo /home/<groupname>/<username> obvykle umožňuje uživateli zápis (vytváření souborů a podadresářů) unx-predn_01-uvod.odt 25.02.2008 16:13:43 12
Interpret příkazů Shell pouští se při přihlášení do příkazové řádky nebo startem emulátoruterminálu v GUI zajišťuje substituce na příkazové řádce a provedení příkazu: zabudovaný příkaz - provádí stejný shell dávka příkazů - provádí nový shell (nový proces) binární program - odstartován jakonový proces Interpret programovacího jazyka proměnné řídící struktury unx-predn_01-uvod.odt 25.02.2008 16:13:43 13
Co z toho plyne: příkaz díky substitucím může být ( a obvykle bývá) volán s jinými parametry, než je napsáno na příkazové řádce příkaz (obvykle) neanalyzuje řádku (spoléhá na shell). Parametry tedy musí být oddělovány mezerami nebo tabulátory. program nebo dávka příkazů běží v jiném procesu než původní shell. Uživatel může dále komunikovat s původním shellem (úloha běží na pozadí) nebo s úlohou (běží-li na popředí). unx-predn_01-uvod.odt 25.02.2008 16:13:43 14
Druhy shellů jméno jméno syntaxe vlastnosti Bourne sh Algol 68 základní C csh C opakování příkazů (history) práce s úlohami (jobs) přejmenovávání příkazů (alias) typované proměnné (set) Toronto C tcsh jako csh rozšířené csh opakování příkazů šipkami Korn ksh rozšířené sh Bourne Again bash rozšířené sh Posix sh rozšířené sh doplňování jmen tabulátorem rozšíření přibližně jako tcsh (jiná syntaxe) na historii nefungují šipky velice podobné ksh na historii fungují šipky drobná rozšíření proti ksh unx-predn_01-uvod.odt 25.02.2008 16:13:43 15
Příkazová řádka <výzva> <přiřazení hodnoty proměnné> nebo <výzva> <volání příkazu> kde: <výzva> je vypsána shellem před interaktivním čtením příkazu (u dávky ne) standardně # nebo $, může být změněna nastavením proměnné PS1 u pokračovací řádky >, může být změněna nastavením proměnné PS2 unx-predn_01-uvod.odt 25.02.2008 16:13:43 16
Přiřazení hodnoty proměnné: <proměnná>=<hodnota> kde <proměnná> jméno proměnné je identifikátor mezi jménem proměnné a znakem= nesmí být mezera příkaz nastaví proměnnou na hodnotu <hodnota> <hodnota> standardně textový řetězec obsahuje-li mezery, je třeba jej uzavřít do uvozovek $ PS1="Zadej prikaz:" Zadej prikaz:aaa="aaa > bbb" Zadej prikaz: unx-predn_01-uvod.odt 25.02.2008 16:13:43 17
Formát příkazu <jméno_příkazu> <argumenty> kde: <jméno_příkazu> je obvykle krátké (2 až 8 znaků) u zabudovaného příkazu vždy pouze jméno u dávky nebo programu: jméno (proveditelný soubor tohoto jména je hledán v adresářích uvedených v proměnné PATH, ne v aktuálním adresáři) cesta k proveditelnému souboru <argumenty> obvykle nejprve přepínače (uvozené znakem -), pak jména souborů přepínače obvykle jednopísmenové, někdy se dají sdružovat, jindy se musí psát zvlášť unx-predn_01-uvod.odt 25.02.2008 16:13:43 18
$ ps -ealf $ sed -n -e /Jan/s/Honza/ -f sed.cmds někdy přepínač vyžaduje upřesňující parametr bezprostředně následující(případně oddělený mezerou) - viz předchozí příklad výjimečně některé programy vyžadují přepínače a potom v odpovídajícím pořadí upřesňující parametry $ ufsdump 0fb /dev/rmt/0 20 / $ ufsdump 0bf 20 /dev/rmt/0 / stejný přepínač může mít u různých příkazů různý význam, stejnou funkci u různých programů mohou mít různé přepínače $ rm -i $ ls -i $ cut -d: -f1 /etc/passwd $ sort -t: /etc/passwd unx-predn_01-uvod.odt 25.02.2008 16:13:43 19
příkaz zabudovaný externí binární externí skript příkaz jednoduchý Oddělovače příkazu složený (for, case,..., necháme na později) příkaz na popředí na pozadí (&) kolona příkazů ( ) seznam (kolon) příkazů (;, &, &&, ) unx-predn_01-uvod.odt 25.02.2008 16:13:43 20
Některé speciální znaky Znaky interpretované ovladačem terminálu (stty -a, man stty): ^S - pozastavení výstupu na obrazovku ^Q - uvolnění pozastaveného výstupu ^C - předčasné ukončení běžícího procesu ^D - konec vstupních dat ^Z - pozastavení běžícího procesu (ne u sh) unx-predn_01-uvod.odt 25.02.2008 16:13:43 21
date who clear echo pwd man Některé jednoduché příkazy unx-predn_01-uvod.odt 25.02.2008 16:13:43 22
Manuálové stránky jsou podrobné a (většinou) přesné a správné, vypisují se příkazem man popis používání příkazu man získáme příkazem man man Manuálové stránky jsou členěny do sekcí. Obsah sekce bývá popsán v každé sekci ve stránce Intro Členění do sekcí se může lišit. Na Solarisu je následující: sekce číslo obsahuje popisy 1 příkazy.a aplikační programy Většinou se dále dělí na podsekce, např. 1M (dříve 8) - administrativní příkazy, 1B - BSD příkazy 2 služby jádra a chybové kódy 3 knihovních podprogramy a funkce 4 formáty souborů 5 standardy 6 hry a dema 7 speciální soubory a síťová rozhraní 9 ovladače unx-predn_01-uvod.odt 25.02.2008 16:13:43 23
Výpis manuálu z určité sekce: man -s <sekce> <název> Příklad: $ man -s 2 mount Výpis popisu systémového volání služby mount: Neuvede-li se číslo sekce, vypíše se v pořadí první nalezená stránka popisující zadaný název Příklad: $ man mount Podle okolností výpis systémového volání mount ze sekce 2 nebo příkazu mount ze sekce 1M: Výpis manuálů ze všech sekcí: man -a <název> Příklad: $ man -a mount unx-predn_01-uvod.odt 25.02.2008 16:13:43 24
Název NAME SYNOPSIS Členění manuálové stránky (v Solarisu) Význam Jméno příkazu a stručný popis (jeden řádek) jeho funkce. Formát (syntaxe) příkazu. Nepovinné parametry jsou uvedeny v hranatých závorkách. Jsou-li za některým parametrem tři tečky (...), může se tento parametr vícekrátopakovat DESCRIPTION Detailní popis funkce. OPTIONS EXAMPLES FILES SEE ALSO Popis významu jednotlivých parametrů Příklady použití. Jména systémových souborů, které příkaz používá nebo ke kterým má nějaký vztah. Odkazy další manuálové stránky, mající nějaký vztah k této stránce. DIAGNOSTICS Popis významu chybových hlášení a návratových kódů. BUGS (NOTES) Popis neočekávaného chování. Například špatná (nebo žádná) reakce na chybové situace. unx-predn_01-uvod.odt 25.02.2008 16:13:43 25
Vyhledávání stránek podle klíčových slov nebo použitých souborů stránky se hledají v adresářích uvedených v proměnné MANPATH stránky jsou uloženy v nezformátovaném tvaru příkazem catman lze všechny stránky zformátovat a vytvořit databázi obsahu pak lze vyhledávat podle klíčových slov v záhlaví nebo použitých souborů $ man -k assembler as as (1) - assembler dis dis (1) - object code disassembler javap javap (1) - Java class file disassembler $ man -f /etc/passwd passwd passwd (1) - change login password and password attr passwd passwd (4) - password file $ unx-predn_01-uvod.odt 25.02.2008 16:13:43 26