====== Linux ====== Linux je označení pro **svobodné** operační systémy (pod licencí **GPLv2**; mohou však být zpoplatněny použitím komerčního software) založené na linuxovém jádru (kernelu). První verzi linuxového jádra naprogramoval v jazyce **C** **Linus Torvalds** v roce **1991**. Do následného vývoje se pustila celá programátorská komunita, Torvalds je ovšem stále brán jako hlavní tvůrce a na komunitní tvorbu dohlíží. ===== Charakteristika ===== Linuxové jádro je založeno na operačním systému UNIX. **UNIX** (např. Solaris) je placený, používá pouze prostředí příkazové řádky a vyžaduje specifický hardware – používá se proto hlavně na velkých serverech. **Linux** k příkazové řádce (CLI) přidává grafické prostředí (GUI), běží prakticky na všem, co má procesor, a je zpravidla distribuován zdarma. Jednotlivé linuxové distribuce (distra; jednotlivé verze OS založené na linuxovém jádru) se zaměřují na různé věci – existují více user-friendly (Ubuntu (založeno na OS Debian), Mint, Fedora), komerční a placené (Red Hat Enterprise Linux) i čistě CLI distra. Různorodost distribucí také rozšiřuje možnosti použití (od serverů až po klasické PC). Vyskytuje se i označení **GNU/Linux**, které poukazuje na první použití linuxového jádra, a to v rámci operačního systému GNU. ==== Vlastnosti ==== * **POSIX** – Portable Operating System Interface; zajišťuje jednotné rozhraní pro přenos aplikací mezi různými hardwarovými platformami; poděděné od systému UNIX * **multitasking** – programy mohou běžet současně a vytvářet několik procesů i podprocesů, zároveň je umožněno více autentizovaným uživatelům používat systém naráz (jeden uživatel například přímo, druhý přes síť; systém disponuje dohromady šesti konzolemi) * **široká podpora souborových systémů** – podporuje systémy jako EXT4, EXT3, EXT2 (původní, není žurnálovací), FAT, NTFS a další... === Souborový systém === Momentálně je hlavním souborovým systémem žurnálovací EXT4 (zapisuje si předem souborové změny pro případ výpadku). EXT4 je zpětně kompatibilní nástupce EXT3: přidal online defragmentaci (během zápisu dat, bez nutnosti odpojení média), zvětšil maximální velikost připojeného svazku na 1 EiB (1024 PiB) s až 16TiB soubory (EXT3 max. 16 TiB a 2 TiB pro soubory) a odstranil limit podadresářů. Adresáře jsou rozděleny do následující struktury: * **/** – kořenový adresář * **/boot** – umístění linuxového jádra * **/bin** – základní spustitelné soubory pro všechny uživatele * **/etc** – globální konfigurační soubory systému * **/home** – domovské adresáře jednotlivých uživatelů * **/mnt** – podadresáře s přípojnými paměťovými médii (např. **/mnt/hdd**) * **/media** – podadresáře s vyměnitelnými médii (např. **/media//cdrom**) * **/root** – domovský adresář superuživatele Přístupová práva jsou podle unixového vzoru. Uživatelská jména typicky používají malé znaky ASCII tabulky a tečky místo mezer. Z přístupového hlediska je nutné mít uživatelský identifikátor UID a alespoň jedno GID (číslo skupiny), podle čehož se poté řídí oprávnění. Existují 3 typy oprávnění: **r** (Read – čtení / výpis obsahu adresáře), **w** (Write – zápis) **x** (eXecute – spuštění / vstup do adresáře). Při výpisu oprávnění je prvně uveden typ (- pro soubod, d pro adresář) a pak tři trojice oprávnění (pro vlastníka, pro stejnou skupinu a pro ostatní uživatele): například **-rwxrw-r-x**. ==== Instalace software ==== V Linuxu se nejčastěji setkáme se svobodným software (Open/Libre Office, Gimp, XnView...), který se neinstaluje pomocí instalačních EXE souborů (Windows), nýbrž využívá **repositáře** – internetové servery se softwarovými balíčky pro jednotlivé distribuce. Správu balíčků umožňuje CLI, můžeme se však setkat i se **správci balíčků**. ===== Klávesové zkratky a příkazy v konzoli ===== Využívá se terminál (shell). Programy psané pro terminál musí být pro interpretr na začátku uvedeny pomocí **#!/bin/bash** (pro nejpoužívanější skriptovací shell jazyk – BASH). Důležité jsou i zkratky pro přepínání mezi jednotlivými CLI a GUI – v Ubuntu pomocí **Ctrl + Alt + F1–F7**. * **sudo** – spustí příkaz s administrátorským oprávněním (**su** navíc do superuser režimu úplně přepne) * **man čeho** – manual; zobrazí dokumentace zadaného příkaze (podobný parametru -h) * **pwd** – print working directory; vypíše momentální pozici * **cd** – change directory; změní adresář (~ pro /home; - pro předchozí; . pro momentální; .. pro vyšší úroveň) * **ls** – list; vypsat seznam souborů v aktuálním adresáři (-l pro detaily; -a pro neviditelné (. na začátku)) * **touch** – dokáže měnit atributy souboru, případně vytváří soubory, které neexistují * **cp co kam** – copy; vytvoří kopii zadaného souboru * **mv co kam** – move; přesune zadaný soubor; při zachování adresáře soubor přejmenuje * **rm co** – remove; smaže zadaný soubor (-r pro rekurzivní smazání celého adresáře i s obsahem; -f pro mazání silou – bez dotazů) * **chmod mód čeho** – change modes; změní přístupová oprávnění k zadanému objektu (mód se skládá z označení oprávnění (1. písmeno z User/Group/Others/All), operace (=/+/-) a oprávnění (r/w/x)) * **chown kdo[:skupina] čeho** – change owner; změní vlastníka:skupinu zadaného objektu * **ln co kam** – link; vytvoří odkaz na soubor * **mkdir co** – make directory; vytvoří nový adresář v aktuálním adresáři * **rmdir co** – remove directory; smaže zadaný adresář * **ps** – process status; vypíše momentálně běžící procesy (-u root pro administrátorský výpis; -A pro výběr všech procesů) * **>** – přesune výstup na zadané místo (např. do souboru) (2> pro přesun chybových hlášení; &> pro přesun normálního výstupu i chybových hlášení) * **>>** – přidá výstup na konec zadaného souboru * **kill id** – zabije zadaný proces * **killall co** – zabije všechny procesy se zadaným jménem * **cat co** – concatenate; vypíše obsah souboru (lze určit více souborů (oddělení mezerou)) * **echo co** – vypíše zadaný argument (může být například systémová proměnná (značená **$**)) * **set** – vypíše systémové proměnné * **export co** – vytvoří/upraví systémovou proměnnou * **grep co** – vyhledá zadaný textový řetězec * **find co** – vyhledá zadané složky (rekurzivně); -iname pro nerozlišování velikosti písmen * **locate co** – vyhledá zadané složky (pomocí indexového souboru); -i pro nerozlišování velikosti písmen * **ifconfig** – vypíše informace o síťových rozhraních v systému * **|** – přesune výstup do jiného vstupu jiného příkazu (např. **set | less**) * **more** – vypíše výstup po jednotlivých stránkách * **less** – vypíše výstup po jednotlivých stránkách, ale již nemusí načítat celý soubor načítat * **Ctrl + C** – ukončí běžící proces (čeká na odpověď procesu – umožňuje vyčištění apod.) * **Ctrl + Z** – vynuceně pozastaví běžící proces * **&** – spustí příkaz na pozadí (dává se na konec) * **bg** – přesune poslední proces z popředí na pozadí (prvně se musí pozastavit) * **fg** – přesune poslední proces z pozadí do popředí (lze rovněž připsat ID procesu) * **jobs** – vypíše procesy běžící na pozadí