Dnes si spláchneme pojmosloví.
Není Linux jako Linux. Franta má Ubuntu Linux, Pepa má Debian Linux, Honza má CentOS Linux. Všechno je to Linux, ovšem každá z těchto distribucí má trošku upravené jádro, zastává jinou mentalitu a tomu odpovídá i míra využívání jednotlivých distribucí pro jejich účely.
Wikipedie sice není relevantní zdroj, proto sem koukněte na seznam linuxových distribucí jen pro základní orientaci v distribucích.
Svoje názory do článků budu psát kurzívou, aby jste věděli, že to nesouvisí s kurzem, ale s mým osobním přidáním názoru na věc.
Za mě nejslavnější distribuce seřazené dle abecedy:
Arch Linux
CentOS
Debian
Fedora
Gentoo
Mint
OpenWRT
Puppy
Raspberian
Red Hat Enterprise Linux
Slackware
Slax
Suse
Ubuntu
Historie Linuxu v kostce zde. Zde historie od Unixu k Linuxu. Pro extra hnidopichy, které neodradily předchozí 2 články o historii přidám i tento, co je to Operační systém, což Vám odpoví na základní otázku života, smrti a tak podobně, co se účelu vzniku operačních systému týče.
Smysl a účel Kernelu
3 hlavní komponenty operačního systému jsou:
- Filesystem (souborový systém)
- Kernel
- Shell
Kernel vše řídí a naviguje, řeší co se má dít s pamětí, spouští, zabijí programy, zajišťuje zobrazování textu na monitor. Kernel je v operačním systému takový základ, jako je gravitace a veškeré fyzikální zákony v našem existujícím světě. Když aplikace chce zapsat na disk, musí ji to povolit kernel. Pokud se 2 či více aplikací dožadují stejného zdroje, Kernel rozhodne komu a na jak dlouho zdroje přidělí. Představte si Kernel jako Matrix ve stejnojmenném filmu.
Kernel se tedy stará o běžící programy v počítači. Spuštěný program je proces. Procesy si představte jako pasažéry v autobusu. 8 jádrový procesor zvládne utáhnout 8 běžících procesů, které spotřebovávají 100% všech jader procesoru. Je to jako kdybychom měli autobus s 8 pasažéry, kteří zabírají 100% prostoru pro pasažéry, tedy všech 8 sedadel. Když nějaký proces jel dostatečně dlouho, CPU ho dočasně pozastaví, aby se mohl svézt jiný proces. Všichni se tedy na těchto sedadlech autobusu neustále střídají a dělí o sedadla, aby mohli sedět všichni.
- To je preemptivní multitasking (pre-emptive multitasking)
Multitasking je víceúlohovost. Každá žena umí multitasking, tedy zvládat více úkolů naráz. (poslouchat hudbu, číst, dávat přitom pozor na děti a ještě stíhat vařit).
Pre-emptivní (pre-emptive) znamená, že se Kernel rozhoduje, kdy předat řízení jakému procesu. (kdy se má který pasažér posadit) Když se neustále na procesoru běžící procesy střídají (když se neustále střídají pasažéři v tom kdo bude sedět na sedadle autobusu), tak se zdá, že počítač dělá hodně věcí současně. Ve skutečnosti je to však pouhé střídání se pasažérů na jednom sedadle.
Každá aplikace se domnívá, že má velký blok paměti vyhrazenou systémem, ale ve skutečnosti je Kernel tak „chytrý“, že neustále přemapovává, přerozděluje, organizuje malé bloky (části) paměti napříč běžícími aplikacemi, anebo odkládá nepoužívané části paměti na disk, aby si paměť uvolnil.
Když počítač startuje
načte základní program, kterému říkáme:
- Bootloader
ten následně spustí: - Kernel
Co je to Aplikace
představte si křižovatku a uprostřed ni je Policista, který organizuje dopravu. Policista je Kernel, projíždějící auta jsou spuštěné aplikace. Policista má nad auty výhradní kontrolu. Může je zastavovat, sledovat jejich provoz, pouštět dle požadavku a řešit systémové zdroje (uzavírat silnici apod…)
V rychlosti o Open-source
Linux vychází z operačního systému UNIX, který vzešel z laboratoří AT&T v USA. Autorem Linuxu je Linus Torvalds, byla to jeho disertační práce. K jeho projektu se pak přidali další lidi, kteří zajistili, aby se nejen v počátečních verzí linuxu neobjevily stejné chyby, jaké se objevily v OS UNIX. Open-source znamená otevřený kód. Napíšete program, jeho zdrojové kódy volně vydáte a pak se nestíháte divit, že Váš kód někdo vezme a třeba na to naváže. Jakmile je něco vydáno jako open-source, je to zdarma, pokud někdo chce na Vaši práci navázat, tak může. Pokud mě však paměť nešálí, nikdo nemůže použít něčí open-source kód v komerčním produktu. (To nechme na diskusi)
Ve zkratce a co největší stručnosti. Když programátor píše program, píše tzv zdrojový kód (source code), což je uživatelem čitelný seznam různých příkazů. Zdrojový kód (source code) může být psán v různých jazycích. Od programovacího jazyku C, až po jazyky jako jsou Java, PHP, Python, C#. Každý jazyk má své výhody a nevýhody, každý se hodí na něco jiného. Linux byl napsán v programovacím jazyku C.
Zdrojový kód (source code) je jako těsto, které potřebujete nechat upéct, aby se to dalo jíst. Zdrojový kód (source code) potřebujete proto zkompilovat (upéct), k čemuž použijete kompilátor (compiler). Kompilátor zdrojový kód (source code) vezme, pak následuje vcelku komplikovaný postup práce kompilátoru, který Vás výborně naučí na Mendelově Univerzitě pan Doc. Rybička v předmětu Teorie programovacích jazyků a na konci tohoto postupu máme spustitelný program. Ještě připomenu, že máme jazyky interpretované a kompilované. Kompilované jazyky jsem popsal těstem a pečením. Příkladem kompilovaných jazyků jsou například C++, C#, C, Pascal, Objective-C, Java.
Příkladem interpretovaných jazyků jsou například jazyky PHP, HTML, Perl, Python, BASH, JavaScript, Ruby, Tcl, VBScript, MATLAB, R, PostScript, Wolfram, Lua, Maple, Game Maker Language. Zdroj
Interpretované jazyky nepotřebujete kompilovat, ale při spuštění probíhá překlad zdrjového kódu interpretem, který musíte mít v systému. Pro interpretaci HTML kódu potřebujete internetový prohlížeč. Pro spuštění BASH skriptu potřebujete mít v systému nainstalovaný interpret bashe, zkrátka něco, co přeloží kód za chodu a vykoná co je potřeba. (Toť opravdu ve stručnosti, nechtěl jsem do toho moc zacházet. V diskusi mě prosím příliš netrestejte za takto jednoduchá vysvětlení).
GNU project (GNU’s not UNIX)
Až nedávno jsem se dozvěděl že GNU se vyslovuje [Ga-nů]. GNU vytvořilo různé nástroje pro OS UNIX, zdrojové kódy (source code) byly volně zcela zdarma dostupné (zejména pro různá UI, kompilátory apod…). Některé nástroje jsou z GNU dostupné i dnes v dnešním Linuxu.
Distribuce Linuxu
Distribuci Linuxu si představte jako jeden velký koncern vyrábějící automobily. V podstatě je jedno jestli si koupíte škodovku, nebo volskwagen či audi. Patří pod stejný koncern, všechny mají 4 kola, volant, karoserii, stěrače, kufr, sedadla, všechny vyžadují údržbu, pohonné hmoty apod. Co dělá linux linuxem a auto autem? Vezměte linux, nástroje GNU, přidejte třeba grafické uživatelské rozhraní, emailového klienta, webový prohlížeč, nějaké karetní hry a máte základ distribuce linuxu. Ve své podstatě distribuce Linuxu dělají z Linuxu použitelný operační systém, protože obsahují stovky nástrojů a programů, bez nichž by operační systém byl pro uživatele nepoužitelný základ asi tak, jako když by se Vám výrobce automobilu snažil prodat jen podvozek, namísto hotového automobilu. I ten podvozek se rozjede, ale nechtěli byste na podvozku jet vysokou rychlostí v zimě.
Mezi základní distribuce jmenuji Debian, Ubuntu, Centos, Red Hat, Fedora, Arch Linux, Scientific Linux, Puppy linux, Suse/OpenSuse, Slax, Slackware.
Rozeberme si tu ale 2 distribuce, které jsem zmínil na začátku. Ubuntu a Centos.
Ubuntu vyšlo z Debian linuxu, takže většina problémů, které řešíte na Debianu, pravděpodobně řešíte i na Ubuntu a naopak. Centos vychází z Red Hat enterprise Linuxu a je velmi podobný i Fedoře či Scientific Linuxu.
Pokud instalujete programy, můžete využít balíčkovací systémy yum a apt využívající balíčky rpm a deb. To uživatelé Windows neznají. V zásadě napíšete příkaz, co chcete nainstalovat a operační systém to za Vás vyhledá v dostupných repozitářích, stáhne, nainstaluje a připraví ke spuštění. Už chápete genialitu Linuxu? 😉
Centos, Fedora, Red Hat používají RPM balíčkovacího manažera (zkratka Red Hat Package Manager). Debian, Ubuntu a další odnoše jako je ZorinOS, Edubuntu, Kubuntu apod. obsahují deb balíčky.
Na Centos/Fedora/Red Hat linuxu instalujete balíčky pomocí příkazu yum a na Debian/Ubuntu pomocí příkazu apt-get.
Release cycle
Tohle je velmi důležité vědět. Každá distribuce má jiný životní cyklus (life cycle). Nebudu tu ultra do podrobna probírat životní cykly, freezy apod… Důležité je znát zkratu LTS (Long term support), což znamená dlouhodobá podpora bezpečnostích aktualizací a jednotlivých balíčků. Pokud chcete dát nějakou distribuci na server, chcete aby měla co nejdelší dobu LTS. Zpravidla Ubuntu žije u LTS distribucí zhruba 5 let, Debian mívá +- 4 roky zdroj, Centos žije většinou 10 let, Fedora mívá velmi krátký životní cyklus několik desítek měsíců. Není na to vyloženě návod nebo doporučení co používat. Pokud chcete mít v systému nejnovější balíčky, zato ale občas zanadávat, že Vám občas nějaký program nemusí běžet pořádně, protože je moc nový a ještě úplně neodladěný, tak zkuste pro běžný počítač třeba Fedoru, Ubuntu-desktop, Arch Linux apod… Pokud chcete něco stabilního, co Vám někde na nějaké serverové mašině za firewallem poběží vklidu a nechcete s tím mít moc problémů, tak by vás mohl zaujmout Centos. Pokud potřebujete stabilitu a budete přecházet na novější verze distribuce jednou za 3 až 4 roky, tak debian nebo ubuntu-server. Toť moje doporučení, nesouvisí to nijak s konkrétními znalostmi linuxu, nebo něčím, co byste měli nutně dělat.
i386 vs. x86_64
Stručně. i386, i486, i586, i686 apod… jsou 32bitové distribuce Linuxu, které Vám poběží na starším počítači. Umí využít maximálně něco přes 3,2 GB RAM i přestože můžete mít 4 GB či víc, tak systém vidí jen tuto část. Nespustíte na takovém systému 64bitové aplikace a programy spuštěné v takovém systému by měly konzumovat méně operační paměti (RAM).
Když příkazem uname -a na linuxu zjistíte informace o kernelu a bude tam někde napsáno x86_64 či AMD64, tak víte, že se právě nacházíte na 64bitovém linuxu, který využije řádově více ram (zhruba 16,8 milionů terabajtů RAM zdroj). Zvládá spouštět i 32 bitové aplikace, aplikace i systém budou konzumovat nepatrně více paměti.
Shell
To není reklama na čerpací stanice, to je rozhraní (interface), který nám umožňuje do počítače zadávat příkazy, co po něm chceme aby udělal. Shell je v podstatě interpret (viz nahoře o interpretovaných jazycích). Příkazy, které zadáme do Shellu vykoná kernel.
Existují 2 typy shellů:
- GUI (Graphical User Interface) <- grafické rozhraní, ikonky, plocha, okna, klikání myší
- CLI (Command Line Interface) <- textové rozhraní, příkazy, to čeho se začátečníci bojí jak čert kříže
Výhody CLI
- Opakování příkazů (command repetition) – napsat znovu stejný příkaz znamená mít možnost zopakovat co chcete
- Zdroje (resources) – na serverech třeba GUI většinou není, protože GUI žere docela dost paměti, příkazová řádka je velmi nenáročná na systémové zdroje a systém je tak mnohem stabilnější.
- Skriptování (scripting) – napíšete si skript, skládající se z mnoha příkazů, který za Vás něco udělá kdykoliv budete chtít, kolikrát budete chtít. V grafickém rozhraní se špatně něco automatizuje.
- Flexibilita příkazů (Command Flexibility) – možnosti příkazů, které Vám jednotlivé příkazy nabízí jsou většinou bohatší, než Vám nabídne nějaký grafický program, kde když není tlačítko, tak zkrátka nějakou funkci nevyvoláte. U příkazu zvolíte přepínač a najednou jste schopni např. data setřídit od největšího po nejmenší a naopak, nebo opomenout velká a malá písmena atd…
- Vzdálený přístup (remote access) – Pokud se připojíte na server přes příkazy, nepotřebujete ani rychlý internet, ani myš, stačí Vám jen klávesnice a napsat pár příkazů, nebo je dokonce jen poslat vykonat na vzdálený server bez nutnosti někam klikat a čekat než se Vám načte vzdálené grafické rozhraní.
- Vývoj (development) – když někdo vyvíjí aplikaci, tak vyvinout základní funkčnost někde v příkazové řádce trvá mnohem kratší dobu, než vyvinout grafickou aplikaci, kde musíte na něco klikat, řešíte rozložení prvků, vzhled, uživatelskou přívětivost, vývoj grafických aplikací zkrátka trvá déle a nezaručuje to, že by aplikace byla robustnější, nebo spolehlivější.
- Snazší automatizace (ease of automation) – napíšete skript, který zavolá jiný skript. Až projedete tímto kurzem, pochopíte, výhody automatizace na linuxu.
Chtěl jsem tu začít se základními linux příkazy, ale asi to nechám na příště.