© Milan Keršláger http://www.pslib.cz/ke/slajdy UNIX 1. Úvod Obsah: vznik a hlavní větve standardizace (X Window System, POSIX, SUS) UNIX pro PC, proč se učí UNIX open system filozofie UNIXu obrázky: Wikipedia.org © Milan Keršláger http://www.pslib.cz/ke/slajdy 19. 2. 2014 http://creativecommons.org/licenses/by-nc-nd/3.0/
Co je UNIX operační systém (OS) z roku 1969 velký rozmach s nástupem WWW (1992) vhodný pro WWW servery (zpracování textu) vzorem pro mladší systémy DOS (1979) → adresáře, interpret přík. řádku... MS Windows → kvóty, pevné a symbolické linky... standardizovaný POSIX → vláda USA, přenositelnost aplikací Single UNIX Specification
Kořeny UNIXu Bellovy laboratoře AT&T práce na systému MULTICS společný projekt s MIT a GE měl umět úplně všechno → komplikovaný systém projekt nebyl nikdy dokončen 1969 – Ken Thompson sám napsal jednoduchý systém pro počítač PDP-7 zdůvodněno jako nástroj na zpracování dokumentace dodnes je zpracování textů silným rysem název UNIX odkazuje na Multics některé nové ideje Multicsu, ale jen to jednoduché
První kroky UNIXu 1973 – přepis do jazyka C nikdo nevěřil, že OS lze napsat ve vyšším jazyku do té doby se běžně používal JSA JSA (jazyk symbolických adres, tj. assembly language) nesprávně assembler (assembler je překladač JSA) JSA jsou mnemotechnická označení strojových instrukcí → velké potíže s přenosem na jiný (nebo novější) počítač Thompson přepisuje OS a formuje zároveň jazyk C otcem jazyka je (spolupracovník) Dennis Ritchie pouze malé I/O části kódu v JSA ovladače hardware, manipulace s nastavením CPU apod.
Dvě hlavní větve UNIXu AT&T SVR4 (System V revision 4) ochranná známka UNIX vylepšení publikována BSD (podle Berkeley Software Distribution) univerzitní větev, též publikace vývoje pozitivní vliv na zavádění TCP/IP (1983) odstranění kódu od AT&T velmi volná licence, zdrojové kódy
Další verze UNIXů každá komerční firma vlastní UNIX Ultrix (Digital), Minix (Tanenbaum), Xenix (Microsoft), Irix (SGI), Solaris (Sun), AIX (IBM), … různá interakce programu s OS problematické portování programů prodražování vývoje, uzamykání na platformě nelibost uživatelů ochrana investic (firmy, státní zakázky → USA) silný tlak na standardizaci X Window System, POSIX, Single UNIX Specification, LSB
X Window System základ pro GUI v unixových systémech úplně první byl Xerox Alto (1973) → WIMP následovaly „W Windows System“ 1984 → MIT asynchronní komunikace (zrychlení) klient (aplikace) – server (X server ovládá HW) XFree86 (1992) → X11R5 X Windows System implementace pro IBM PC X.org (1999) dnes v Linuxu, reakce na změnu licence XFree86
POSIX Portable Operating System Interface definice jednotného API → portabilita programů přijímá IEEE (viz Internet) a ISO (mezinárodní) 1988, poslední 2008 je to standard nezávislý na konkrétním OS též MS Windows kvůli státním zakázkám, ale výsměch příkazový řádek, skriptování (Korn shell) mnoho utilit (awk, echo, ed, ...) I/O API (soubory, terminál, síť, threading) dnes POSIX:2008 a Conformance testing
Unixové války přelom 80. a 90. let 20 století souboj o standardizaci mnoho nekompatibilních unixových systémů Ultrix (DEC), Minix, Xenix (Microsoft), Irix (SGI), … vznik konkurenčních sdružení války odrazovaly zákazníky → uvolněné místo pro Linux a Windows NT 1993 – COSE Single UNIX Specification ukončení unixových válek
Single UNIX Specification původně konkurence k POSIXu sdružení COSE (1993) firmy vyvíjející unixové systémy standard zdarma (na rozdíl od POSIX) 2001 → společně s POSIX API, hlavičkové soubory, utility UNIX98 (1998), UNIX03 (2003) BSD a Linux neregistrovány snaha o maximální kompatibilitu
LSB Linux Standard Base (2001) knihovny, utility, tisk, runlevel, X Window System zahrnuje FHS → Filesystem Hierarchy Standard 1993, speciálně pro Linux adresáře, umístění (konfiguračních) souborů, knihoven dnes v4.0 (2008) kontroverze RPM a DEB Debian protestuje, že má lepší balíčkovací systém podporováno Red Hat, SUSE tj. firmami zabývajícími se komerčním využitím Linuxu
Unix pro PC nelze používat ochrannou známku alternativní názvy OS evokují vazbu na UNIX všechny sledují POSIX a Single UNIX Spec. všude podobné prostředí, vysoká přenositelnost starší systémy pro IBM PC Xenix – Microsoft (1980—1987) Minix – Andrew Tanenbaum (od roku 1987) součást knihy o OS, zprvu licencováno Linux – Linus Torvalds (od roku 1991) studentská práce, komunitní vývoj, licence GPLv2
Proč se učí UNIX otevřený systém (open system) vše je detailně a technicky zdokumentováno známý zdrojový kód lze o něm diskutovat, vědecké práce ověřování teoretických předpokladů zažitý v univerzitním prostředí dnes Linux, Android jako open source software zdrojové kódy může ovlivnit každý práce tisíců studentů (zejména VŠ)
Open system otevřený (počítačový) systém 80. léta → unixové systémy vydělení proti mainframům a minipočítačům neplést s open source software open system může být komerční s uzavřeným kódem umožňuje interoperabilitu schopnost spolupráce s ostatními systémy usnadňuje portabilitu snadno zajištěno tak, že: vše je detailně zdokumentováno dokumentace je volně k dispozici manuálové stránky, zdrojový kód (program, jádro, knihovny)
Filozofie unixu UNIX je jednoduchý je víceúlohový (multitasking) je víceuživatelský má hierarchický systém souborů je v něm téměř vše soubor konfigurační soubory jsou v prostém textu důraz je kladen na vztahy mezi programy je orientován na zpracování textů žádná zpráva, dobrá zpráva
UNIX je jednoduchý v jednoduchosti je genialita UNIX je „geniálně jednoduchý“ může to znamenat i silné zjednodušení některé věci prostě neřešíme... vyřeší to třeba až obsluha (!) kupodivu to dobře funguje jednoduché → málo chyb jednoduchost bude zřejmě to hlavní, o co v systému jde
Víceúlohový systém tzv. multitasking zjednodušuje využívání počítače není nutné ukončit první úlohu a pak začít druhou lze spustit více úloh najednou → multitasking ale máme (měli jsme) jen jeden procesor úlohy se musí na procesoru střídat rychlé střídání → uživatel to ani nepozná 100 až 1000 krát za sekundu v zátěži běžně 5000 krát → režie přepínání snižuje výkon vzniká problém nežádoucího ovlivňování jednotlivé úlohy je nutné vzájemně oddělit řeší jádro, nutná podpora v CPU (tzv. privilegovaný režim)
Víceuživatelský snaha o maximalizace využití počítače všichni se mohou zároveň přihlásit všichni mohou zároveň pracovat ale mohou si vzájemně škodit (i nechtěně) je nutné uživatele vzájemně oddělit využijeme multitasking (pro oddělení procesů) zavedeme navíc oprávnění na běžící úlohy a též na soubory a adresáře původně zásadní výhoda UNIXu nebyl sice první, ale dobře fungoval, nízké HW nároky
Hierarchický systém souborů adresářový strom kapacita počítačů i úložného prostoru byla nízká takže starším systémům stačil jen kořenový adresář nešlo vytvářet další adresáře (např. CP/M) nicméně v Unixu máme mnoho uživatelů potřebujeme domácí adresáře potřebujeme přehledně uspořádat celý systém po UNIXu považovány podadresáře za základ ...nebyl by bez nich dobrý OS
Ukázka stromu adresářů / ├── bin ├── home │ ├── huzva │ │ ├── Obrázky │ │ └── Dokumenty │ └── jane ├── tmp ├── usr │ ├── bin │ └── share └── var ├── log └── run
Téměř vše je soubor snaha o maximální abstrakci soubor je lineární řada bitů (bajtů) máme jeden začátek a pak následují po řadě další bajty programátor umí zacházet se soubory otevřít, číst, zapisovat, zavřít → jednotné API speciální soubory zpřístupní HW jako soubory tj. speciální soubor představuje skutečné zařízení např. pevný disk, DVD médium, USB port, paměť, ... někdy se nejde „posunovat“ (sériový port, USB, klávesnice...) vždy jde číst nebo zapisovat nefunguje pro vše, o to se snaží až Plan9 (Thompson)
Příklad práce se spec. soubory cat /dev/sr0 > ObsahDVD.iso speciální soubor je celé CD/DVD médium ISO soubor (obraz) lze vypálit na čisté CD/DVD lze použít i na disk či diskový oddíl (sda, sda1) fdisk -l /dev/sda vypíše prvních 512B jako tabulku MBR lze i na obraz disku v souboru (např. u virtualizace) gzip -dc soubor.gz > /dev/null testujeme dekompresi nikoliv rychlost disku
Konfigurační soubory používá se prostý text (plain text) vše je vidět i jednoduchým editorem textový soubor se snadno upravuje komentáře v slouží i jako dokumentace nic není skryto, vše je „transparentní“ (viz open system) text je ale nutné parsovat (snadno pomocí knihovny) převzato i do komunikačních protokolů Internetu původně inzerováno jako výhoda Windows 3.x (1990) tj. není potřeba interpretovat binární hodnoty jako např. regedit ve Windows pro různá nastavení neexistují „magické hodnoty“
Příklad konfiguračního souboru $ cat /etc/resolv.conf domain tul.cz search nti.tul.cz nameserver 10.1.0.1 $ cat /etc/shells /bin/sh /bin/bash /sbin/nologin $ cat /etc/vimrc set nocompatible set bs=indent,eol,start
Vztahy mezi programy programy spolupracují v systému je mnoho jednoúčelových nástrojů může-li program využít jiný, udělá to systém poskytuje podporu pro předávání dat zejména jednosměrnou rouru též sdílenou paměť, pojmenovanou rouru, IPC soket, … využívá se přesměrování, standardní proudy programy fungují jako filtry nástroje pro zpracování textů, téměř vše je soubor, ... vše bude probíráno postupně dále
Spolupráce programů teze: „každý program dělá jednu věc, ale dobře“ tar cf zaloha.tar /etc gzip -9 zaloha.tar záloha obsahuje vše z adresáře /etc druhý příkaz zkomprimuje do zaloha.tar.gz tar czf zaloha.tar.gz /etc obě činnosti vykonány jedním příkazem program tar si sám zavolá program gzip data si předají přes rouru, není potřeba dočasný soubor výsledek je získán rychleji, předání se děje skrze paměť
Zpracování textů data v podobě prostého textu konfigurační soubory systémové databáze pro uživatele, skupiny, definice domén, … co řádek, to jeden záznam položky záznamu odděleny vybraným znakem (např. : ) mnoho nástrojů na zpracování textu cat, grep, sort, tail, cut, sed, awk, … využívá se snadné spolupráce programů
Příklad zpracování textu grep ro /etc/passwd | sort vybrané řádky jsou setříděny a vypsány pg_dump knihy | bzip2 > zaloha.bz2 výstup z databáze je zkomprimován do souboru arp -an | mail -s "Arp 1" joe@tul.cz výpis ARP tabulky je odeslán e-mailem
Žádná zpráva, dobrá zpráva programy mlčí, dokud je vše v pořádku uživatel si zvykne, že když se objeví nějaký text, měl by si ho přečíst, protože to oznamuje nějaký problém opačný (a chybný) předpoklad vede k tomu, že uživatel bezmyšlenkovitě „potvrzuje vše“ a text nečte například UAC ve Windows platí to pro klasické nástroje na příkazovém řádku find, cat, ls, diff, grep, ... novější nástroje jsou obvykle „ukecané“ :-( wget, yum, rpm