Linux: Kniha kouzel, vanilková příchuť 2.14 (15. července 2022)
Veškerá moc příkazové řádky/příkazového řádku přehledně, pro začátečníky i pokročilé

16. Systém

Řada 2.x vanilkové příchuti Linuxu: Knihy kouzel je od 15. července 2022 do 1. března 2025 ve stavu dlouhodobé pasivní údržby; nahlášené chyby budou opravovány, ale aktivní vývoj se již věnuje jiným projektům. Máte-li zájem pokračovat v tvorbě Linuxu: Knihy kouzel pro novější verze linuxových operačních systémů, kontaktujte autora nebo rovnou vytvořte odnož.

1. Úvod

Tato kapitola se zabývá vybranými aspekty běhu operačního systému a jeho ovládání, zejména ovládáním démonů, systémovými logy, restartem či vypnutím počítače. Také se zabývá rozložením klávesnice.

Když zavaděč GRUB spustí jádro systému, to pak vytvoří dva první procesy: systemd (PID 1) a kthreadd (PID 2). Systemd pak na základě tzv. výchozího cíle a dalších nastavení spustí další démony a také správce příhlášení, kteří umožní uživatelům přihlašovat se do systému (popř. automaticky přihlásí výchozího uživatele). Když se uživatel přihlásí, vznikne takzvané „sezení“, které zanikne, až se uživatel odhlásí (včetně případů, kdy je odhlášení součástí restartu či vypnutí počítače).

GNU GRUB je vyvíjen v rámci projektu GNU.

2. Definice

  • Král démonů („systemd“ s PID 1, v Ubuntu se z důvodu kompatibility v některých výpisech ukazuje jako „init“) je ústřední démon systému, který řídí jeho start, restart či vypnutí a spouští a zastavuje další systémové démony. V některých linuxových komunitách má špatnou pověst, protože jeho předchůdce Upstart kdysi nevybíravě převzal „vládu“ od tehdy oblíbeného procesu „init“ (zvaného také „sysvinit“) a systemd pak pod svoji kontrolu sjednotil mnoho do té doby nezávisle řešených funkcí systému. Jako uživatele vás však od něj nečeká žádné nebezpečí, pokud mu nebudete překážet.
  • Démon je proces bez vlastního uživatelského rozhraní (obvykle se s ním komunikuje zvláštními příkazy nebo po sběrnici D-BUS). Existují tři druhy démonů: Systémoví démoni jsou „systemd“ s PID 1 a jeho přímí potomci, kromě těch, kteří mají uživatelské rozhraní (jako např. lightdm). Jaderní démoni jsou „kthreadd“ (PID 2) a jeho zrozenci. Jaderní démoni se zodpovídají pouze jádru, jsou mimo kontrolu uživatele i krále démonů. Uživatelští démoni jsou pak procesy spuštěné obyčejným uživatelem na pozadí a bez uživatelského rozhraní; patří k nim zejména uživatelská instance „systemd“ (ta s PID jiným než 1) a její potomci.
  • Systémová jednotka (unit) je datová struktura krále démonů. Systemd rozeznává jedenáct druhů systémových jednotek, z nichž nejznámější a nejdůležitější jsou služby („service“), reprezentující démony. Další významné jsou sokety („socket“, souvisí se službami a umožňují démonům nabízet svoje služby ostatním démonům), cíle („target“, seskupení jednotek pro určité situace) a časovače („timer“, pravidelně probouzejí a ruší démony).
  • Sezení je instance přihlášení uživatele k systému ve víceuživatelském režimu; vzniká přihlášením uživatele a zaniká jeho odhlášením, resp. ukončením všech procesů daného sezení. Sezení může být grafické či textové a může být místní nebo vzdálené.

3. Zaklínadla

3/1 Informace o systému (zjistit)

@obecné informace (pro člověka)(alternativy)#1
neofetch
inxi
@verze a varianta jádra#2
uname -r⊨ 5.4.0-47-generic
@čas od spuštění systému (uptime)#3
uptime -p
@kompletní informace o hardware (textově/s prohlížečem)#4
sudo lshw
sudo lshw -html >/tmp/lshw.htm && sensible-browser /tmp/lshw.htm
@počet logických procesorů/fyzických jader#5
nproc --all
lscpu -p=CORE,SOCKET | egrep -v '^#' | sort -u | wc -l
@jméno procesoru#6
LC_ALL=C lscpu | egrep '^Model name:' | sed -E 's/^[^:]*:\s*//'
@informace o frekvenci procesoru (pro člověka)#7
LC_ALL=C lscpu | egrep '^CPU[^:]+MHz:'
@informace o velikosti a využití paměti a odkládacího prostoru#8
free -h
@zjistit druh počítače (stolní počítač, nebo notebook?)(pro skript/pro člověka)#9 (1)
laptop-detect
laptop-detect -v [|| true]
@kódové jméno verze distribuce#10
lsb_release -sc⊨ focal
@jméno/verze distribuce#11
lsb_release -si⊨ Ubuntu
lsb_release -sr⊨ 20.04
@jméno počítače#12
hostname⊨ mojepc
@jméno jádra/druh operačního systému#13
uname -n⊨ Linux
uname -o⊨ GNU/Linux
@architektura systému#14
arch⊨ x86_64

3/2 Restart a vypnutí počítače

@restartovat počítač (normálně/drasticky/velmi drasticky)#1
reboot
sudo systemctl reboot --force
sudo systemctl reboot --force --force
@vypnout počítač (normálně/drasticky/velmi drasticky)#2
poweroff
sudo systemctl poweroff --force
sudo systemctl poweroff --force --force
@přepnout do jednouživatelského režimu (záchranného/nouzového)#3 (2)
sudo systemctl rescue
sudo systemctl emergency
@uspat systém (trvale/na N sekund/na 48 hodin)#4 (3)
systemctl suspend
sudo rtcwake [-m mem] -s N
sudo rtcwake [-m mem] -s 172800
@hibernovat systém#5
sudo systemctl hibernate
@zastavit systém bez vypnutí počítače (normálně/drasticky/velmi drasticky)#6
sudo systemctl halt
sudo systemctl halt --force
sudo systemctl halt --force --force
@vypnout počítač za N minut/zrušit naplánované vypnutí#7
sudo shutdown -P [--no-wall] N
sudo shutdown -c

3/3 Ovládání systémových jednotek

@spustit neběžící#1
sudo systemctl start jednotka.typ
@zastavit běžící#2
sudo systemctl stop jednotka.typ
@restartovat běžící#3
sudo systemctl restart jednotka.typ
@nastavit automatické spouštění jednotky/zrušit toto nastavení#4 (4)
sudo systemctl enable [--now] jednotka.typ
sudo systemctl disable [--now] jednotka.typ
@zcela zakázat spouštění systémové jednotky/zrušit tento zákaz#5 (5)
sudo systemctl mask jednotka.typ
sudo systemctl unmask jednotka.typ

3/4 Informace o systémových jednotkách

@zjistit stav (pro člověka/pro skript)#1
systemctl status jednotka.typ
systemctl show jednotka.typ
@zjistit, zda jednotka běží#2 (6)
systemctl is-active [--quiet] jednotka.typ-nebo-vzorek
@vypsat jednotky všech typů#3
systemctl list-units [--all] [filtrovací-vzorek]
@vypsat časovače#4
systemctl list-timers [--all]
@vypsat služby#5
systemctl list-units --all -t service
@vypsat cíle#6
systemctl list-units --all -t target
@zjistit PID příslušné dané jednotce (je-li definováno)#7 (7)
systemctl show --property=MainPID jednotka.typ | sed -E 's/.*=//'
@vypsat manuálovou stránku příslušnou jednotce, je-li známa#8
systemctl help jednotka.typ
@vypsat dynamické závislosti jednotky (na kterých jednotka závisí/které závisí na jednotce)#9 (8)
systemctl list-dependencies
systemctl list-dependencies --reverse

3/5 Logy

@vypsat log krále démonů (z tohoto běhu/z předchozího běhu/všechny)#1
journalctl -b 0 [-r]
journalctl -b -1 [-r]
journalctl [parametry]
@vypsat log jádra (pro skript/pro člověka)#2
dmesg [--time-format iso]
dmesg -H[x] [--time-format iso]
@sledovat log krále démonů/log jádra#3
journalctl -fqn 0 [parametry]
dmesg -w[H][x][--time-format iso]
@vypsat seznam časů posledních nabootování#4
journalctl --list-boots | sed -E $'s/.*([A-Z][a-z]{2}.*)\u2014.*/\\1/' | date -f - "+%F %T %z"
@zjistit, kolik místa na disku zabírají logy krále démonů#5
journalctl --disk-usage
@vyprázdnit log krále démonů/log jádra#6
sudo find /var/log/journal -type f -name '*.journal' -delete
sudo dmesg --clear

3/6 Sezení

@vypsat seznam sezení/přihlášených uživatelů#1
loginctl [list-sessions]
loginctl list-users
@vypsat informace o sezení/přihlášeném uživateli#2
loginctl show-session ID-sezení
loginctl show-user uživatel
@přepnout na uvedené sezení#3 (9)
loginctl activate ID-sezení
@násilně ukončit sezení/všechna sezení uživatele#4
loginctl terminate-session ID-sezení
loginctl terminate-user uživatel

3/7 Ostatní

@změnit jméno počítače#1 (10)
stare=$(hostname)
nove=nove-jmeno
sudo sed -i -E 's/(\s)'${stare}'$/\1'${nove}'/' /etc/hosts && sudo hostnamectl set-hostname "$nove"
Restartujte počítač.
@spustit program a po dobu jeho běhu neumožnit běžným uživatelům uspání počítače, restart či vypnutí systému#2
systemd-inhibit ["--why=Popis důvodu"] ["--who=Popis příkazu"] [sudo] příkaz parametry
@otestovat volnou paměť RAM#3
sudo memtester velikost-P [počet-iterací]]
@nastavit proměnnou prostředí krále démonů/smazat ji#4
sudo systemctl set-environment PROMĚNNÁ="hodnota" [DALŠÍ_PROMĚNNÁ="její hodnota"]
sudo systemctl unset-environment PROMĚNNÁ
@který cíl je pro start systému výchozí?#5
systemctl get-default
@nastavit výchozí cíl#6
sudo systemctl set-default cíl.target
@dočasně vypnout automatické připojování výměnných jednotek #7

3/8 Analýza času stráveného zaváděním systému

@rozdělení času mezi firmware, zavaděč, jádro a zbytek (pro člověka)#1
systemd-analyze time⊨ Startup finished in 13.465s (firmware) + 1.435s (loader) + 3.459s (kernel) + 1min 30.339s (userspace) = 1min 48.700s
@kolik času zabrala inicializace jednotek? (pro člověka)#2 (11)
systemd-analyze blame [--user]
@vykreslit graf popisující inicializaci jednotek při zavádění#3
systemd-analyze plot >dočasný-soubor.svg && sensible-browser dočasný-soubor.svg

4. Zaklínada: Klávesnice

4/1 Ovládání počítače klávesnicí

@nouzový restart počítače#1 (12)(13)
Stiskněte a držte stisknuté klávesy Alt + PrtScr.
Na klávesnici s krátkými přestávkami vyťukejte: R, E, I, S, U, B.
Uvolněte PrtScrAlt.
@uspat počítač#2
@drastické nouzové vypnutí počítače#3
Alt + PrtScr + O.
@vypsat nápovědu k nouzovým klávesovým zkratkám jádra#4 (14)
Jste-li v grafickém režimu, přepněte se na textovou virutální konzoli zkratkou Ctrl + Alt + F2.
Stiskněte Alt + PrtScr + H. Měla by se vypsat nápověda.
Zpět do grafického režimu se vrátíte Alt + F7 (pouze ve variantách Ubuntu a Kubuntu je to místo toho Alt + F1).

4/2 Ovládání klávesnice počítačem

Poznámka: příkazy v této sekci jsou určeny výhradně pro X; téméř jistě nebudou fungovat v textových virtuálních konzolích ani na Waylandu.

@zapnout/vypnout/přepnout Num Lock#1
numlockx on
numlockx off
numlockx toggle
@zapnout/vypnout/přepnout Caps Lock#2
xdotool key Caps_Lock
@zapnout/vypnout/přepnout Scroll Lock#3
xdotool key Scroll_Lock
@vypnout/znovu zapnout klávesnici#4
xinput --disable $(xinput --list --short | egrep '\[.*keyboard.*\]' | egrep -iv 'virtual|(power|sleep) button' | tail -n 1 | sed -E 's/.*id=([0-9]+)[^0-9].*/\1/')
xinput --enable $(xinput --list --short | egrep '\[.*keyboard.*\]' | egrep -iv 'virtual|(power|sleep) button' | tail -n 1 | sed -E 's/.*id=([0-9]+)[^0-9].*/\1/')

4/3 Rozložení klávesnice

@trvale změnit systémové rozložení#1
sudo dpkg-reconfigure keyboard-configuration
sudoedit /etc/default/keyboard
Zkontrolujte hodnoty XKBLAYOUT a XKBVARIANT, zda jsou nastaveny podle vaších představ; pokud ne, opravte je a uložte soubor.
Ukončete editor.
Restartujte operační systém.
@dočasně nastavit okamžité rozložení klávesnice (jen v X)(obecně/příklady...)#2
setxkbmap rozložení [varianta]
setxkbmap cz
setxkbmap cz qwerty
setxkbmap ru
@vypsat seznam dostupných rozložení klávesnice a jejich variant#3
sed -nE '/^!\s+layout/,/^$/s/^\s*(\S+)\s+(.*)$/\1\t\2/;/^!\s+variant/,/^$/s/^\s*(\S+)\s+([^:]+):\s*(.*)$/\2 \1\t\3/;T;p' /usr/share/X11/xkb/rules/xorg.lst | sort [| column -nt -s $'\t' [| less]]
@vypsat seznam definovaných variant rozložení klávesnice (pro vývojáře)#4

5. Parametry příkazů

5/1 journalctl

journalctl [parametry]
○ --output=short-iso ○ --output=json-pretty ◉ --output=shortRůzné formáty výstupu (podporovány i další).
☐ -fBude čekat na nové položky a vypisovat je, jakmile se v logu objeví.
☐ -n počet-záznamůOmezí počet nejnovějších záznamů k vypsání (jinak vypíše všechny).
☐ -p prioritaVypíše pouze záznamy s alespoň uvedenou prioritou (debug, info, notice, warning, err, crit, alert, emerg). Lze zadat i přesný rozsah operátorem .., např. „-p notice..crit“.
☐ --since "YYYY-mm-dd HH:mm:ss"Vypíše pouze záznamy z uvedeného času a pozdější.
☐ -rSeřadí log od nejnovějších záznamů místo od nejstarších.
-u jednotkaOmezí výpis na záznamy související s uvedenou jednotkou; lze uvést víckrát, v takovém případě se zahrnou záznamy související s kteroukoliv z uvedených jednotek. Místo přesného názvu lze uvést i vzorek.
☐ -aVypíše přesně a úplně i zprávy obsahující netisknutelné znaky či zprávy mimořádně dlouhé (nezkoušeno).

6. Instalace na Ubuntu

Většina použitých příkazů je základní součástí Ubuntu, pouze příkazy numlockx, xdotool, inxi, neofetch a memtester si musíte doinstalovat, chcete-li je použít:

sudo apt-get install numlockx xdotool neofetch inxi memtester

7. Tipy a zkušenosti

  • Volba „enable“/„disable“ je nezávislá na tom, zda démon právě běží. Nastavení na „enable“ ho okamžitě nespustí a nastavení na „disable“ neukončí (ledaže uvedete parametr „--now“).

8. Další zdroje informací

9. Zákulisí kapitoly

V této verzi kapitoly chybí:

  • zjišťování informací o hardware
  • nastavení automatického přihlašování do X (GDM/SDDM/Lightdm)
  • synchronizace času (zapnout/vypnout/ručné provést)
  • ukázka
  • lspci
  • lsusb
  • vytváření vlastních služeb a démonů

Tato kapitola záměrně nepokrývá:

  • zavádění operačního systému, diskové oddíly
1 Návratový kód je 0 pro notebook, 1 pro stolní počítač a 2, pokud to nelze zjistit; varianta „pro člověka“ navíc zjištění vypíše anglickou větou. Ve virtuálním počítači (dle mých zkušeností) tento přikaz zjistí druh fyzického počítače, na kterém virtuální počítač běží.
2 Podle dokumentace poskytuje záchranný režim základní služby a připojené souborové systémy pro pohodlnou práci, zatímco nouzový režim nespustí nic a očekává od uživatele, že si spustí služby, které potřebuje, a připojí potřebné souborové systémy. Ovšem při přechodu z běžícího systému těmito příkazy jsem tento rozdíl nepozoroval/a. Souborové systémy zůstaly i v nouzovém režimu normálně připojené.
3 Podpora dočasného uspání příkazem rtcwake není na různých počítačích jednotná. Na některých dokáže počítač uspat, ale už ho nedokáže probudit; na některých ho nedokáže ani uspat. Vždy nejprve vyzkoušejte uspání na krátkou dobu, abyste zjistili, jak se bude daný počítač chovat. Pokud „rtcwake“ nefunguje s parametrem „-m mem“, může fungovat bez něj a naopak.
4 U většiny služeb (ne úplně u všech) znamená automatické spouštění jejich spuštění při startu systému. Systémová jednotka s vypnutým automatickým spouštěním (disabled) stále může být spuštěna automaticky, pokud na ní závisí (jiná) automaticky spouštěná jednotka.
5 Je-li zakázáno spouštění systémové jednotky, nemůže být žádným způsobem spuštěna ani restartována. Zákaz vypne případné automatické spouštění jednotky a to nepůjde znovu nastavit. Pokud ale daná systémová jednotka právě běží, samotný zákaz ji nechá běžet.
6 Pro každou zadanou systémovou jednotku vypíše řádek „active“ nebo „inactive“; uspěje, pokud alespoň jeden řádek bude „active“.
7 Poznámka: pokud dané jednotce neodpovídá žádný běžící démon, vypíše tento příkaz „0“.
8 Poznámka: dynamické závislosti mezi jednotkami jsou obtížně pochopitelná věc, protože mohou vznikat a zanikat za běhu v reakci na změnu stavu systému. Nepředpokládejte, že je chápete, pokud jste podrobně nestudovali dokumentaci systemd.
9 Poznámka: tento příkaz dokáže přepnout i mezi X a textovou konzolí!
10 Jméno počítače může být dlouhé maximálně 63 znaků a smí obsahovat pouze malá a velká písmena anglické abecedy, číslice. Může také obsahovat pomlčky, ale nesmí pomlčkou začínat ani končit. Např. „0---9Az“ je také dovolené jméno počítače.
11 Pozor! Do uvedeného času se započítává i čas strávený čekáním na inicializaci jiných jednotek; proto pokud má některá jednotka uvedený dlouhý čas, nemusí to znamenat, že zpomalení způsobuje ona!
12 Ne, opravdu to není Ctrl+Alt+Delete...
13 Poznámka: Skutečně důležitá je pouze poslední klávesa „B“; ty předchozí pouze vykonávají operace, díky nimž nebude restart tak drastický. Pokud chcete opravdu drastický reset, stačí na to klávesová zkratka „Alt“+„PrintScreen“+„B“.
14 Poznámka: Většina vypsaných operací je v jádru Ubuntu zakázána. Po stisknutí příslušné kombinace kláves se v takovém případě vypíše na konzoli zpráva, že operace je zakázána.
Líbí se vám tento projekt a chcete, aby byl ještě lepší? Můžete mi s tím pomoci. Zmiňte se o něm technicky zdatným přátelům, opravte překlepy a nahlašte nefunkční zaklínadla, aby mohla být opravena; poskytněte mi zpětnou vazbu nebo se zapojte do vývoje nových kapitol. Další informace na GitHubu v dokumentu Jak se zapojit.
[BY-SA]

Veškerý obsah této stránky (text, obrázky, zdrojový kód) je možno upravovat a šířit pod podmínkami licence Creative Commons Attribution-ShareAlike 4.0 International. Upozorňuji, že uvedená licence vyžaduje uvedení seznamu autorů, licence a zdroje a poskytnutí stejné či kompatibilní licence k provedeným změnám, jsou-li nějaké. Příslušné údaje jsou dostupné na stránce „Přehled autorů“. Šíření obsahu bez těchto údajů nebo šíření upravené verze bez poskytnutí adekvátní licence k provedeným úpravám je pravděpodobně porušení licenčních podmínek a může být postihováno. Poskytování zdrojového kódu při šíření není touto licencí vyžadováno.

Pro nové verze, další informace, aktuální zdrojový kód a možnost se zapojit do projektu „Linux: Kniha kouzel“ navštivte jeho repozitář na GitHubu.