Cvičení: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14.

Na začátku tohoto cvičení bude test, tématem je GITové CLI (včetně větvení a mergování).

Test bude během první poloviny cvičení, prosím, přijďte na cvičení včas (detaily jsou na této stránce).

Ujistěte se, že můžete klonovat repozitáře z gitolite3@linux.ms.mff.cuni.cz (jsou používány v Labu 05, například) ze školního počítače.

Témata tohoto cvičení zahrnují uživatelské účty v Linuxu, instalaci softwaru a spouštění služeb. Témata jsou víceméně nezávislá a je možné je číst v libovolném pořadí.

Předstartovní kontrola

  • Jste připraveni na první test :-).

Uživatelské účty

Tomuto tématu jsme se již několikrát věnovali: berte ho také jako osvěžení věcí, které již znáte.

Uživatelské účty v systému Linux jsou dvou základních typů. Běžné uživatelské účty pro koncové uživatele, tj. účty, ke kterým se přihlašujete prostřednictvím SSH nebo grafického rozhraní a na kterých pracujete. Dále máme systémové účty, které existují výhradně za účelem možnosti spouštět procesy pod různými uživateli pro lepší izolaci. Pod těmito účty se obvykle vůbec nepřihlašujeme.

Vaše účty na linux.ms.mff.cuni.cz jsou prvního typu, a pokud spustíte ps -ef --forest, uvidíte, co mají spuštěno ostatní uživatelé. Příkaz ps vypíše seznam běžících procesů - k tomuto témat se ještě vrátíme na nějakém z dalších cvičení.

Systémové účty jsou například chrony nebo nginx, které slouží ke spouštění speciálních služeb systému.

Každý uživatelský účet má číselné id (podle kterého operační systém identifikuje uživatele) a uživatelské jméno, které je obvykle mapováno pomocí /etc/passwd. /etc/passwd je obyčejný textový soubor s poli oddělenými dvojtečkou. Klidně se do něj podívejte (cat /etc/passwd úplně stačí).

Mezi uživatelskými účty na Linuxu má jeden z nich výsadní postavení. Tento uživatel se jmenuje root (často též superuser nebo superuživatel), má číselný kód 0 a má v podstatě neomezená oprávnění nad běžícím strojem. Například, přístupová práva jsou ve skutečnosti ignorována pro uživatele root (tj. proces běžící pod rootem může číst/zapisovat libovolný soubor).

Chcete-li přepnout na účet superuživatele, můžete použít buď příkaz sudo (viz níže), nebo su. Často se spouští takto, aby se zajistilo spuštění login shellu (mimo jiné se tím také zajistí, že $HOME ukazuje na /root a ne na domovský adresář běžného uživatele):

su -

Na rozdíl od jiných systémů, Linux je navržen tak aby uživatelské programy mohly vždy běžet pod normálním (obyčejným) uživatelem a nevyžadovaly rootovská oprávnění. Dokonce, některé programy (často se to týkalo třeba IRC klientů) se pod rootem odmítaly spustit.

Účet root je vyžadován pro změny v systému jako celku. To zahrnuje aktualizaci systému, formátování pevného disku nebo třeba modifikaci systémové konfigurace.

Velmi striktní oddělení běžných (pracovních) účtů a superuživatele vychází z faktu, že Linux byl navržen jako víceuživatelský systém. Tato filozofie je více jak 50 let stará a sahá do doby, kdy počítač byl sdílen mnoha uživateli a jen jeden z nich – root – byl administrátorem. Dnes, kdy typická notebooková instalace je právě pro jednoho uživatele, je toto rozdělení spíš umělé, ale pořád existuje.

Pravdou je, že dnešní uživatel je více ohrožen napadenou webovou stránku než neoprávněnou aktualizací systému a účet superuživatele byl navržen spíše s ohledem na to druhé. Nicméně, idea oddělených účtů dává stále smysl a obezřetný uživatel může používat různé účty pro různé aktivity (např. prohlížení sociálních sítí a práce s on-line bankovnictvím).

Správa uživatelských účtů

Považujeme ji za pokročilé téma a v tomto kurzu se omezíme na to, že vás odkážeme na dokumentaci příkazů useradd, userdel a usermod, které vytvářejí, odstraňují a upravují uživatelské účty.

Nezapomeňte, že existuje také getent pro získání informací o existujících účtech. Již jsme ho používali v dřívějších příkladech, typicky ho zavoláte jako getent passwd pro seznam všech uživatelů a pokud mu přidáte uživatelské jméno, vytiskne informace jen o jednom uživateli.

Zkuste spustit getent passwd VAS_LOGIN na našem sdíleném stroji.

Měli byste také znát passwd, který lze použít ke změně uživatelského hesla.

Spuštěním příkazu passwd se změní heslo aktuálního uživatele. Při spuštění pod uživatelem root můžeme zadat uživatelské jméno a změnit heslo jiného uživatele. U typické instalace je to způsob, jak snadno obnovit heslo.

sudo

Některé programy vyžadují zvýšení svých oprávnění (privilege escalation), tj. běžet s většími pravomocemi než ostatní programy.

Některé příkazy to potřebují vždy a mohou mít speciální nastavení (pro teď si ho představte jako speciální variantu chmod +x). Nicméně, některé příkazy potřebují vyšší oprávnění jen někdy, takže spouštět je vždy ve speciálním režimu jen zbytečně rozšiřuje možné vektory útoku.

Pro tyto situace je jedním z možných řešení sudo (domovská stránka). Jak jméno napovídá, spustí jeden příkaz (superuser do) s oprávněními superuživatele. Výhodou sudo je, že administrátor může určit který příkaz poběží s vyšším oprávněním. Takže nedává vybraným uživatelům kompletní kontrolu nad počítačem, ale pouze jim umožňuje pracovat s vybranou množinou příkazů.

Například je možné dát uživateli možnost restartovat určitou službu (např. chceme testerovi umožnit restartovat webový server), aniž bychom mu dali kontrolu nad celým počítačem.

Všimněte si, že granularita sudo je na úrovni programů. Neomezuje, jak se program chová uvnitř. Například, je možné omezit, že uživatelka alice může spustit nebezpecny_prikaz pouze s přepínačem --neskodny-prepinac. Ale, pokud nebezpecny_prikaz také čte konfiguraci ze souboru ~/.nebezpecnyrc, alice může skrz něj přidat volbu --nebezpecna-volba. A sudo tomu nemá jak zabránit. Jinými slovy: jakmile jsou počáteční kontroly (před spuštěním) dokončeny, program se chová jako by ho spustit uživatel root.

Tohle je velmi důležité pro sdílené stroje, kde administrátor chce typicky omezit ostatní uživatele jak nejvíce to jde. Na druhou stranu, na desktopových (notebookových) instalacích obvyklé nastavení je, že první vytvořený uživatel (typicky vytvořený ještě během instalace) může spustit libovolný program se sudo. Zdůvodnění je takové, že existuje stejně pouze jeden (fyzický) uživatel, který stejně rootovské heslo zná. To je také důvod, proč většina návodů na webu obvykle uvádí příkazy pro správu systému včetně sudo na začátku každého příkazu.

Měli byste ale vždy vědět, proč sudo pouštíte. Nechyťte se do pasti zvyku, že když to nefunguje, zkusím to pustit se sudo.

Mimochodem, možností jak získat rootovský shell je více (např. sudo bash).

Jako bezpečný příklad můžete zkusit spustit fdisk -l a vypsat oddíly v systému. Při spuštění bez práv roota pravděpodobně selže s několika hlášeními o odepřeném přístupu. Spuštění se sudo by mělo fungovat.

Všimněte si, že zadáváte své heslo, nikoli heslo superuživatele (ostatně pokud by to bylo heslo superuživatele, nepotřebovali byste sudo, protože byste mohli spustit su - a získat tak root shell přímo).

sudo fdisk -l

sudo není jediným bezpečnostním mechanismem. Ostatními se nebudeme do detailů zabývat, ale uvedeme alespoň odkazy na SELinux nebo AppArmor. Shrnutí mechanismů je k dispozici též na Wikipedii.

Přehled uživatelských účtů: zkontrolujte, zda rozumíte základům

Vyberte všechna pravdivá tvrzení. You need to have enabled JavaScript for the quiz to work.

Instalace softwaru (neboli správa balíčků)

Software v Linuxu je obvykle instalován prostřednictvím správce balíčků (package manager). Správce balíčků je speciální program, který se stará o instalaci, upgrade i odstranění balíčků. Balíček může být cokoliv, co lze nainstalovat; to zahrnuje:

  • programy (například, balíček ranger nainstaluje program ranger),
  • datové soubory a nastavení (např. libreoffice-langpack-cs pro podporu češtiny v LibreOffice),
  • knihovna (třeba gmp nebo gmp-devel poskytují GNU knihovnu pro libovolně přesné výpočty),
  • nebo tzv. meta balíček (např. xfce zahrnuje xfce4-terminal, xfwm4-themes atd.).

V tomto směru je Linux velmi podobný tomu, co znáte ze správy softwaru pomocí obchodu na vašich chytrých telefonech. Je velmi neobvyklé instalovat software na Linuxu prostřednictvím grafického instalátoru.

Výhodou centrální správy balíčků je možnost upgradovat celý systém, aniž by bylo nutné kontrolovat samostatně jednotlivé aplikace.

Jednotlivé balíčky mají často závislosti (dependencies) – instalace jednoho balíčku způsobí tranzitivní instalaci ostatních balíčků, na kterých závisí (například, webový prohlížeč bude vyžadovat základní podporu GUI apod.). To trochu komplikuje proces aktualizací (pro správce balíčků, naštěstí nikoliv pro uživatele). Ale ušetří to trochu místa na disku. Asi nejdůležitější výhodou je, že různé aplikace mohou sdílet stejné knihovny (na Linuxu mají příponu .so a jsou podobné souborům DLL na Windows). Takže je možné upgradovat knihovnu i dále nevyvíjené aplikaci. Což se velmi hodí, pokud knihovna obsahuje bezpečnostní záplatu.

Je pochopitelně možné instalovat software i ručně. Z pohledu souborového systému je to jedno – správce balíčků v podstatě jen kopíruje soubory do správných adresářů. Ale ručně nainstalovaný software musí být i ručně aktualizován a věci spíš komplikuje. Takže se tomu pokud možno vyhýbejte.

Typický správce balíčků pracuje s několika repozitáři softwaru (software repository). Můžete o nich uvažovat jako by váš telefon měl několik obchodních center, kde si aplikace vybíráte. Obvykle najdete následující typy repozitářů. Je na uživateli (správci), které repozitáře bude využívat.

  • Stable a testing, kde ten druhý nabízí novější verze softwaru ale s drobnou možností výskytu chyb (obvykle existuje ještě třetí repozitář, obvykle nazvaný unstable, který je pro poslední, často vývojové, verze).
  • Free a non-free kde ten první obsahuje jen software bez právních překvapení. Non-free software může být zatížen patenty nebo vlastnickými právy (obvykle podle práva USA) nebo licencemi, které omezují jeho šíření.

Můžete si vytvořit i vlastní repozitář, což se může hodit když potřebujete instalovat software na více strojů (třeba jde o proprietární software, který máte zabalíčkovaný, ale nemůžete ho poslat do veřejných repozitářů).

Velká většina distribucí také nabízí nějaký druh uživatelských repozitářů, kde v podstatě kdokoliv může zveřejnit svůj software. Pro Fedoru existuje Copr.

Ani oficiální ani neoficiální repozitáře neposkytují žádnou záruku v právním slova smyslu. Nicméně, používání oficiálních (výchozích) repozitářů se považuje za bezpečné, množství útoků na tyto repozitáře je nízké a – na rozdíl od mnoha komerčních institucí – správci těchto repozitářů jsou velmi otevření v informování o podobných incidentech. Je mnohem snazší narazit na podvodnou aplikaci v “obchodu” pro váš chytrý telefon než na ní narazit v oficiálních repozitářích vaší distribuce.

dnf (tj. správce balíčků pro Fedoru)

Správce balíčků pro Fedoru se nazývá DNF.

Fedora dříve používala jako správce balíčků yum a lze jej nalézt v mnoha návodech na internetu (dokonce i v poměrně nedávných). Nyní je považován za zastaralý a raději se mu vyhněte.

Pokud jste zvyklí na yum ze starších verzí Fedory nebo z jiných distribucí založených na RPM, zjistíte, že dnf je velmi podobný a v mnoha situacích rychlejší než yum.

Pokud jste se rozhodli používat jinou distribuci, budete muset příkazy upravit tak, aby odpovídaly vašemu systému. Obecně by operace měly být dost podobné, ale nemůžeme zde poskytnout návod pro každého správce balíčků.

Pomocí příkazu search můžete získat seznam balíčků, které odpovídají zadanému názvu. Všimněte si, že vyhledávání není privilegovanou operací, a proto nevyžaduje sudo.

dnf search arduino
dnf search atool

Všimněte si, že vyhledávání velmi obecného výrazu může přinést stovky výsledků.

Výstup je v následujícím formátu:

atool.noarch : A perl script for managing file archives of various types
ratools.x86_64

Řetězce .noarch a .x86_64 popisují povahu balíčku. noarch obvykle označuje datový balíček nebo balíček používající interpretované jazyky, zatímco .x86_64 označuje balíček s binárními soubory pro architekturu x86-64 (např. napsaný v jazyce C nebo Rust a následně zkompilovaný do strojového kódu).

Chcete-li nainstalovat softwarový balíček, spusťte dnf s příkazem install a zadejte mu název balíčku, který chcete nainstalovat. Zde už je nutné sudo, protože upravujeme systém.

sudo dnf install atool

Některé aplikace nejsou součástí žádného softwarého repozitáře, ale přesto je můžete stáhnout ve formátu srozumitelném správci balíčků. To je lepší situace než instalovat soubory ručně, protože váš správce balíčků o nich (i když je nemůže automaticky aktualizovat). Jedním z takových příkladů je klient Zoom, který se musí nainstalovat takto:

sudo dnf install "https://zoom.us/client/latest/zoom_x86_64.rpm"

Chcete-li aktualizovat celý systém, jednoduše spusťte následující příkaz. DNF si vyžádá potvrzení a poté provede aktualizaci všech dostupných balíčků.

sudo dnf upgrade

Všimněte si, že na rozdíl od jiných systémů si můžete vždy vybrat, kdy chcete provést upgrade. Systém za vás nikdy nerestartuje počítač ani nezobrazí zprávu o nutném restartu, pokud o to výslovně nepožádáte.

Pokud chcete nainstalovat celou skupinu balíčků, můžete použít dnf grouplist pro zobrazení jejich seznamu a sudo dnf install @GROUP_NAME pro jejich instalaci.

Výše uvedené příkazy obsahují základní informace o správě balíčků v systému Fedora. Následující odkazy poskytují další informace. Pokud již systém trochu znáte, je dobrým zdrojem informací oficiální stránka Wiki.

Pro začátečníky jsou pravděpodobně lepším výchozím bodem tento průvodce DNF a tento návod.

Náhrady klasických správců balíčků

Přítomnost různých správců balíčků má i nevýhody – pokud používáte více distribucí, musíte umět používat více programů. Navíc, různé distribuce musí vytvářet svoje vlastní balíčky (kompatibilní se svými správci balíčků), což je opět více práce.

Existuje proto i snaha správce balíčků sjednotit. Snap byl vytvořen, aby bylo možné jednotným způsobem instalovat balíčky napříč distribucemi. Zatímco pro některé uživatele je to snadný způsob jak rychle software nainstalovat, pro jiné je proprietární podstata Snapu a nutnost mít uživatelský účet překážka, potenciální riziko a odklon od otevřenosti.

Jako problematický příklad se můžeme podívat na instalaci PyCharmu. PyCharm je IDE pro Python, které (bohužel) cílí na uživatele Windows a také nabízí placenou profesionální verzi. Balíček PyCharmu pro Fedoru neexistuje.

Je to ale spíše výjimka – tento problém u většiny open-source programů nenajdete. Dokonce i společnosti zaměřené na jiné operační systémy dnes nabízí repozitáře pro DNF obsahující jejich software. Všimněte si, že v tomto případě je nabídka kompletního repozitáře ideální volbou. Uživatelé si mohou vybrat, jestli takový repozitář chtějí nebo ne, správci distribuce to nemusí dále řešit a komerční společnost má stále plnou kontrolu nad vydáváním nových verzí.

Jsou tedy dvě možnosti jak nainstalovat PyCharm:

  1. Použít Snap
  2. Použít ad-hoc instalační skript, který je stažen spolu s instalací PyCharmu.

Druhá možnost není příliš oblíbená. Vyžaduje, aby uživatel spustil skript, který si stáhl, což je potenciálně nebezpečné – vždy byste měli podobné skripty kontrolovat. (Samozřejmě, i správce balíčků stahuje a spouští skripty, ale možnosti útoku jsou trochu menší.)

Dalším problémem je, že aplikace nainstalovaná tímto způsobem nemůže být automaticky aktualizovaná.

Co použít

Snap není jediná alternativa ke klasickým správcům balíčků.

Existuje také Flatpak nebo AppImage. Mohou existovat vedle sebe a je na uživateli, který si vybere.

Rozhodnutí, který používat, je ovlivněno mnoha faktory. Obecně je nejlepší preferovat instalaci přes obvyklé nástroje vaší distribuce.

Jako poslední poznámku: pokud software který potřebujete není jako balíček dostupný, můžete si vždy takový balíček sami vytvořit. Postup je mimo záběr předmětu, ale není to tak složité.

Správa balíčků: zkontrolujte si, zda této části rozumíte

Vyberte všechna pravdivá tvrzení. You need to have enabled JavaScript for the quiz to work.

Služby (a démoni) (services, daemons)

V kontextu operačních systémů, termínem služba (service) odkazujeme na libovolný program, který běží na pozadí (takže žádné GUI, stdin z /dev/null) a poskytuje nějakou službu dalším programům.

Typickým příkladem může být služba tisku, která se stará o nalezení tiskáren a koncovým aplikacím poskytuje jejich seznam (tj. uživatelské aplikace nemusí tiskárny samy vyhledávat). Jiný příklad je webový server: poskytuje soubory přes HTTP protokol webovým prohlížečům.

Ve světě Unixových systémů jsou tyto programy často označovány jako démoni (což asi naráží na řeckou mytologii, kde démon bylo stvoření pracující v pozadí); tradičně názvy těchto programů končí písmenem d. Například, populární webový server Apache je ve skutečnosti spouštěn jako program httpd a SSH server běží jako sshd.

Démoni fungují jinak než normální programy. Když jsou spuštěny, přečtou si konfiguraci (typicky ze souborů pod /etc/), spustí se a čekají na požadavky (představte si webový server poslouchající na portu 80). Změna jejich chování je obvykle provedena změnou konfiguračního souboru a jejich restartováním. Protože běží na pozadí, nemají přístup k interaktivnímu stdinu a restart (nebo ukončení) se provádí pomocí signálů.

O signálech se budeme bavit později: je to asynchronní kanál pro komunikace s procesem (oproti třeba stdinu, kde program určuje, kdy ho bude číst – signál může přijít kdykoliv).

Protože požadavek na restart démona je poměrně běžný (a posílání signálů je těžkopádné), existují na to speciální programy. Obvykle se nazývají řídící skripty a pro některé démony najdete soubory serviced (vlastní démon) a servicectl pro jeho řízení.

Sjednocené řízení démonů

Výše uvedené principy jsou v podstatě stejné pro všechny služby, proto obvykle existuje sada skriptů, která toto chování sjednocuje. Takže místo toho, abyste museli volat daemonctl, distribuce vám nabídne speciální příkaz, kterým můžete ovládat libovolnou službu. Obvykle tedy použijete něco jako toto:

service [start|stop|restart] jmeno-daemona

V současnosti je nejobvyklejším nástrojem pro tuto úlohu systemd.

O logování

Většina služeb poskytuje tzv. logy (protokoly). Obsahují záznam o každé důležité akci, kterou démon provedl.

Například, webový server typicky zaznamená, které stránky obsloužil společně s informací o klientovi.

Obvykle pro každou služba určíte, jak má být logování detailní. Ladění problému v konfiguraci vyžaduje detailní zprávy, v produkčním prostředí naopak zapnete jen logování vážných chyb pro zvýšení výkonu.

Systemd

Systemd je jedním z nejpoužívanějších nástrojů pro správu systémových služeb v dnešním světě Linuxu.

Nebudeme zabíhat do podrobností a pouze si projdeme dva nejdůležitější příkazy: systemctl a journalctl.

Všimněte si, že systemd je démon, zatímco systemctl je příkaz pro jeho ovládání.

Spuštění a zastavení služby

Spuštění služby pomocí systemd je velmi jednoduché. Následující příkaz spustí sshd, server SSH:

sudo systemctl start sshd

Pokud služba již byla spuštěna, nic se nestane.

Zkontrolujte, zda se nyní můžete připojit ke svému počítači pomocí následujícího příkazu:

ssh your-login@localhost

Ke zjištění stavu služby se používá příkaz status (ten lze spustit i bez sudo, ale může zobrazit méně informací):

sudo systemctl status sshd
● sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)
     Active: active (running) since Mon 2021-03-01 14:31:40 CET; 2 months 3 days ago
   Main PID: 560 (sshd)
      Tasks: 1 (limit: 9230)
     Memory: 900.0K
        CPU: 16ms
     CGroup: /system.slice/sshd.service
             └─560 sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups

Warning: journal has been rotated since unit was started, output may be incomplete.

Vidíme, že služba je spuštěna, většina položek je jasná. Soubor /usr/lib/systemd/system/sshd.service obsahuje samotnou konfiguraci služby (např. jak službu spustit/zastavit/restartovat), nikoli vlastní konfiguraci démona SSH, která je uvnitř /etc/ssh.

Pokud démona SSH na notebooku nebudete používat, je bezpečnější ho zastavit:

sudo systemctl stop sshd

Povolení a zakázání služby

Pokud chcete službu spouštět při každém spuštění systému, můžete ji povolit:

sudo systemctl enable sshd

Systemd se postará o správné pořadí jednotlivých služeb (takže SSH server se spustí až po inicializaci sítě atp.).

Pokud si již nepřejete, aby byl démon SSH automaticky spuštěn, zavolejte příkaz s disable.

Všimněte si, že jak enable, tak disable nemění aktuální stav služby: pokud nechcete čekat na restart, musíte stále použít start/stop. (Pro větší pohodlí je k dispozici příkaz systemctl enable --now sshd, který službu také spustí.)

Logy

Většina systémových služeb uchovává logy o své práci. Ty jsou obvykle uloženy v adresáři /var/log/. Některé služby si je vytvářejí samy a jde o jednoduché textové soubory, jejichž formát je specifický pro jednotlivé služby a jejich konfiguraci.

Mnoho služeb ale používá centrální logovací službu, která uchovává všechny své logy v jednotném formátu a kterou lze nakonfigurovat pro jejich třídění, odesílání po síti, odstraňování starých záznamů atp.

Ve Fedoře se logovací služba nazývá journald. Ukládá protokoly do kryptograficky podepsaných binárních souborů, které nejsou přímo čitelné. Lze je číst pomocí příkazu journalctl.

Následující příkaz například zobrazí logy démona SSH:

journalctl -u sshd

Více …

Pokud vás toto téma zajímá, přečtěte si příslušné manuálové stránky. Těchto několik odstavců berte jako velmi stručný úvod do tématu, který vám umožní základní správu systému.

Tisk a skenování v Linuxu

Níže je stručný přehled o tisku a skenování na Linuxu. Dnes je většina zařízení připojena po síti a po připojení budou rovnou fungovat (nebo alespoň jejich základní funkce).

Zvláštní balíčky (ty budete možná muset stáhnout přímo od výrobce) jsou potřeba jenom pro extra vychytávky.

Tisk pomocí CUPSu

Tisk v Linuxu zajišťuje subsystém CUPS, který standardně spolupracuje prakticky s každou tiskárnou podporující IPP (internetový tiskový protokol) a podporuje také mnoho starších tiskáren.

Jednoduché sudo dnf install cups nainstaluje základní subsystém, pro konkrétní modely mohou být potřeba další ovladače. OpenPrinting.org obsahuje databázi, ve které lze vyhledávat, které ovladače jsou potřeba (pokud vůbec nějaké jsou). Například pro většinu tiskáren HP je třeba nainstalovat balíček hplip.

Obvykle chcete mít CUPS v systému neustále spuštěný, a proto jej musíte povolit:

sudo systemctl enable --now cups

CUPS má pěkné webové rozhraní, které můžete použít ke konfiguraci tiskáren. U mnoha moderních tiskáren připojených k síti je to často zbytečné, protože budou správně automaticky objeveny.

Pokud jste již CUPS spustili, zkuste navštívit http://localhost:631/. Na kartě Administration můžete přidat nové tiskárny. Výběr správného modelu pomůže systému CUPS rozhodnout, které možnosti zobrazit v dialogovém okně tisku, a umožní správnou funkci tisku ve stupních šedi a podobné funkce.

Skenování obrázků a dokumentů pomocí Sane

Podpora skenerů v systému Linux je řešena pomocí SANE (Scanner Access Now Easy). Stejně jako u tisku bude většina skenerů automaticky detekována. GIMP, který možná již znáte, má podporu SANE.

Přidejte ji pomocí sudo dnf install xsane-gimp.

Vlastní skenování obrázku lze provést v dialogovém okně File -> Create -> XSane, kde vyberete zařízení, vlastnosti skenování (např. rozlišení nebo barvy) a poté můžete spustit skenování.

Opakované spouštění úloh s Cronem

V systému je mnoho úloh, které je třeba pravidelně provádět. Mnohé z nich souvisejí s údržbou systému, například rotace protokolů (odstraňování zastaralých protokolů), ale i běžní uživatelé mohou chtít provádět pravidelné úlohy.

Typickým příkladem může být zálohování adresáře $HOME nebo každodenní změna tapety na ploše.

Z pohledu správce je třeba nainstalovat démona cron a spustit jej. Ve Fedoře se balíček jmenuje cronie, ale služba se stále jmenuje crond.

Úlohy (tasks) pro celý systém jsou definovány v souboru /etc/cron.*/, kam můžete přímo umístit své skripty. Chcete-li například provádět denní zálohování počítače, můžete umístit skript backup.sh přímo do adresáře /etc/cron.daily/. Samozřejmě existují specializované zálohovací nástroje (např. duplicity), vaše řešení ze cvičení 07 je pro kutilský přístup docela dobrý začátek.

Pokud chcete přesnější specifikaci, než jakou nabízí adresáře cron.daily nebo cron.hourly, můžete ji zadat ve vlastním souboru uvnitř /etc/cron.d/.

V něm každý řádek specifikuje jednu úlohu: požadavek na spuštění zadaného příkazu v zadaném čase pod zadaným uživatelem (obvykle root). Čas se zadává jako minuta (0-59), hodina (0-23), den v měsíci (1-31), měsíc (1-12) a den v týdnu (0-6, kde 0 je neděle). V každém poli můžete použít * pro “libovolný”. Další podrobnosti naleznete v crontab(5).

Následující příkaz tedy spustí /usr/local/bin/backup.sh každý den 85 minut po půlnoci (tj. v 1:25). Druhý řádek bude volat big-backup.sh každou neděli ráno.

25 1 * * * root /usr/local/bin/backup.sh
0  8 * * 0 root /usr/local/bin/big-backup.sh

Všimněte si, že cron.d obvykle obsahuje speciální volání následujícího tvaru, které zajišťuje, že se skripty cron.hourly spustí (tj. samotný deamon cronie hledá pouze uvnitř /etc/cron.d/, použití cron.daily nebo cron.monthly je řešeno speciálními úlohami).

01 * * * * root run-parts /etc/cron.hourly

Spuštění pod obyčejným uživatelem

Běžní (tj. non-root) uživatelé nemohou upravovat soubory v adresáři /etc/cron.d/. Místo toho mají k dispozici příkaz crontab, který lze použít k úpravě jejich osobní tabulky cronu (tj. seznamu úloh cronu).

Voláním crontab -l zobrazíte aktuální obsah tabulky cron. Pravděpodobně nevypíše nic.

Chcete-li upravit tabulku cronu, spusťte příkaz crontab -e. Spustí se váš oblíbený editor, do kterého můžete přidávat řádky ve výše uvedeném formátu, tentokrát bez zadání uživatele.

Přidáním následující položky se například každý den změní pozadí pracovní plochy:

1 1 * * * /home/intro/bin/change_desktop_background.sh

Samozřejmě za předpokladu, že takový skript v daném umístění máte. Pokud to chcete opravdu vyzkoušet, následující skript funguje pro Xfce a používá Lorem Picsum.

#!/bin/sh

# Update to your hardware configuration
screen_width=1920
screen_height=1080

wallpaper_path="$HOME/.wallpaper.jpg"

curl -L --silent "https://picsum.photos/$screen_width/$screen_height" >"$wallpaper_path"

# Xfce
# Select the right path from xfconf-query -lvc xfce4-desktop
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image -s "$wallpaper_path"

# LXDE
pcmanfm -w "$wallpaper_path"

# Sway
# For more details see `man 5 sway-output`
# You can also set a different wallpaper for each output (display)
# Run `swaymsg -t get_outputs` for getting specific output name
swaymsg output '*' bg "$wallpaper_path" fill

Učební výstupy a kontrola po cvičení

Tato část podává zhuštěný souhrn základních konceptů a dovedností, které byste měli umět vysvětlit a/nebo použít po každém cvičení. Také obsahují absolutní minimum, které je potřebné pro pochopení navazujících cvičení (a dalších předmětů).

Znalosti konceptů

Znalost konceptů znamená, že rozumíte významu a kontextu daného tématu a jste schopni témata zasadit do většího rámce. Takže, jste schopni …

  • vysvětlit, jak a proč je software distribuován ve formě balíčků

  • vysvětlit jaké druhy účtů existují na Linuxu a čím se liší (např. johndoe, root a nobody)

  • vysvětlit rozdíl mezi účtem root a ostatními účty

  • vysvětlit, proč se obecně nedoporučuje provádět neadministrativní úlohy pod účtem root

  • obecně vysvětlit, jak lze sudo použít pro správu systému

  • porozumět nebezpečím používání sudo

  • vysvětlit, co je to služba (démon)

  • vysvětlit životní cyklus a možné stavy služeb

  • vysvětlit, co je to protokol programu a jak jej lze spravovat

Praktické dovednosti

Praktické dovednosti se obvykle týkají použití daných programů pro vyřešení různých úloh. Takže, dokážete …

  • používat getent na získání informací o existujících uživatelských účtech

  • používat sudo pro zvýšení oprávnění spouštěného programu

  • používat správce balíčků (package manager) pro instalaci a odinstalaci balíčků

  • používat správce balíčků (package manager) pro upgrade celého systému

  • používat systemctl ke spuštění/zastavení služeb

  • používat systemctl pro zajištění automatického spuštění služby při startu počítače

  • tisknout a skenovat v Linuxu

  • volitelné: používat journalctl k zobrazení logů

  • volitelné: používat useradd pro vytvoření nového uživatelského účtu