GNU/Linux >> Znalost Linux >  >> Linux

Správné pochopení úrovní běhu Linuxu

Úrovně běhu Linuxu si můžete představit jako různé „režimy“, ve kterých běží operační systém. Každý z těchto režimů nebo úrovní běhu má svůj seznam procesů a služeb, které jsou buď zapnuté nebo vypnuté. Od chvíle, kdy se Linux spustí, je vždy v určité úrovni běhu.

Tato úroveň běhu se může při dalším používání počítače změnit v závislosti na druhu služeb, ke kterým potřebuje operační systém přístup.

Například spuštění vašeho počítače se systémem Linux s grafickým uživatelským rozhraním bude vyžadovat jinou úroveň běhu, než kdybyste na svém systému spouštěli pouze příkazový řádek.

Je to proto, že grafické uživatelské rozhraní bude potřebovat přístup k různým službám, které příkazový řádek prostě nemá. Aby systém určil, které služby je třeba zapnout (nebo vypnout), změní podle potřeby úroveň běhu.

Význam úrovní běhu Linuxu

Možná jste Linux používali roky, aniž byste si uvědomili, že existují různé úrovně běhu. Je to proto, že to není něco, co by většina správců serverů musela často konfigurovat.

Úrovně běhu Linuxu však poskytují administrátorům zvýšenou kontrolu nad systémy, které spravují.

Můžete změnit úroveň běhu, ve které se systém nachází (což uvidíme později v článku), stejně jako služby, které běží v úrovních běhu. To nám umožňuje úplnou kontrolu nad tím, ke kterým službám mají naše systémy v daný okamžik přístup.

Kolik úrovní běhu je v Linuxu?

V Linuxu je sedm různých úrovní běhu, od nuly do šesti. Různé distribuce mohou používat sedm úrovní běhu odlišně, takže není příliš snadné sestavit definitivní seznam toho, co úrovně běhu dělají.

Místo toho byste museli zkontrolovat, jak úrovně běhu fungují na konkrétní distribuci, kterou používáte. Níže uvedený seznam z velké části představuje, jak distribuce Linuxu obecně konfigurují úrovně běhu:

Úroveň běhu 0 vypne systém.

Úroveň běhu 1 je režim pro jednoho uživatele, který se používá pro úkoly údržby nebo správy. Můžete také vidět tento režim označovaný jako runlevel S (S je zkratka pro jednoho uživatele).

Úroveň běhu 2 je režim pro více uživatelů. Tato úroveň běhu nepoužívá žádné síťové služby.

Úroveň běhu 3 je režim pro více uživatelů se sítí. Toto je normální úroveň běhu, na kterou jste zvyklí, pokud používáte systém, který se nespouští do GUI (grafické uživatelské rozhraní).

Úroveň běhu 4 se nepoužívá. Uživatel si může tuto úroveň běhu přizpůsobit pro své vlastní účely (jak to provést později v článku).

Úroveň běhu 5 je stejný jako runlevel 3, ale také spouští správce zobrazení. Toto je úroveň běhu, kterou používáte, pokud používáte systém, který se zavádí do GUI.

Úroveň běhu 6 restartuje systém.

Jaká je moje aktuální úroveň běhu?

Svou aktuální úroveň běhu můžete u většiny distribucí zobrazit jednoduchým zadáním „runlevel“ do terminálu.

Když zadáte příkaz „runlevel“, zobrazí se vám dvě různá čísla. První číslo je předchozí úroveň běhu vašeho systému a druhé číslo je aktuální úroveň běhu vašeho systému.

Na výše uvedeném snímku obrazovky je „N“ zkratka pro „none“, což znamená, že systém dříve nebyl v žádné jiné úrovni běhu. „5“ znamená, že náš systém je aktuálně na úrovni běhu 5.

V tomto příkladu používáme CentOS, který se zavedl přímo do grafického rozhraní, proto systém přešel rovnou na úroveň běhu 5.

Jak změnit aktuální úroveň běhu?

Aktuální úroveň běhu vašeho systému můžete změnit pomocí příkazu „telinit“. Chcete-li například přejít na úroveň běhu 3 na CentOS, zadejte:

$ telinit 3

Mějte na paměti, že pro provedení tohoto příkazu musíte být uživatelem root. Uvědomte si, že úrovně běhu fungují na Debianu a Ubuntu odlišně – například Ubuntu nabootuje do úrovně běhu 5 i bez spuštění GUI.

Pokud budete postupovat podle výše uvedeného příkladu, vaše obrazovka může zhasnout. Je to proto, že jste zůstali na – nyní prázdném – tty. Stačí stisknout Alt+F1 (nebo nějakou jinou funkční klávesu) na klávesnici a dostanete se do funkčního terminálu.

Pokud znovu použijeme příkaz „runlevel“, uvidíme, že jsme nyní v úrovni běhu 3 a předchozí úroveň běhu je uvedena jako 5, protože jsme z ní právě přešli.

Cíle systému Linux vs. úrovně běhu

V posledních letech systemd nahradil dlouholetý systém „System V init“ (runlevels). Stále funguje v zásadě stejným způsobem, ale používá některé nové příkazy a místo toho běžně označuje „úrovně běhu“ jako „cíle“.

Runlevel 0 =poweroff.target (runlevel0.target)

Runlevel 1 =rescue.target (runlevel1.target)

Runlevel 2 =multi-user.target (runlevel2.target)

Runlevel 3 =multi-user.target (runlevel3.target)

Runlevel 4 =multi-user.target (runlevel4.target)

Runlevel 5 =graphical.target (runlevel5.target)

Runlevel 6 =reboot.target (runlevel6.target)

V průběhu tohoto tutoriálu budeme pokračovat v procházení systemd a příkazů, které budete potřebovat znát.

Jak změnit výchozí úroveň běhu při spuštění?

Existuje mnoho důvodů, proč můžete chtít zavést jinou úroveň běhu. Je například běžné, že správci systému zavedou z příkazového řádku a spouštějí grafické rozhraní pouze tehdy, když to považují za nutné.

Pro tuto funkci se musíte ujistit, že výchozí úroveň běhu je nastavena na 3, nikoli na 5.

V minulosti bylo nutné upravit soubor /etc/inittab, aby se definovala výchozí úroveň běhu při spuštění. U některých distribucí to možná stále platí.

Pokud pracujete s operačním systémem, který nebyl několik let upgradován, bude pro vás tato metoda stále relevantní.

$ vi /etc/inittab

Na výše uvedeném snímku obrazovky je úroveň běhu 5 aktuálně nastavena na výchozí úroveň spuštění pro spuštění.

Od roku 2016 většina hlavních linuxových distribucí postupně vyřadila soubor /etc/inittab ve prospěch cílů systemd – rozdíly pokryjeme později v tomto článku.

Možná zjistíte, že váš systém vůbec nemá soubor /etc/inittab, nebo vám váš soubor inittab může doporučit, abyste místo toho použili systemd, jako na tomto snímku obrazovky z našeho systému CentOS.

Chcete-li zkontrolovat aktuální výchozí cíl vašeho systému:

$ systemctl get-default

Na obrázku výše je odpověď systému „graphical.target“. Jak pravděpodobně tušíte, jedná se o ekvivalent runlevelu 5.

Chcete-li zobrazit další dostupné cíle a úrovně běhu, se kterými jsou spojeny, napište:

$ ls -l /lib/systemd/system/runlevel*

Tyto symbolické odkazy nám říkají, že cíle systemd v podstatě fungují stejně jako úrovně běhu. Jak tedy můžeme změnit výchozí úroveň běhu (nebo cíl) při spuštění? Musíme vytvořit nový symbolický odkaz, jako je tento:

$ ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target

Tento příkaz změní naši výchozí úroveň běhu na 3, takže při příštím restartu bude náš systém v úrovni běhu 3 místo 5. Pokud byste chtěli jinou úroveň běhu, jednoduše byste nahradili jiné číslo místo „3“ v příkaz.

Pro informaci, přepínač -f v tomto příkazu označuje, že cílový soubor by měl být odstraněn před vytvořením nového odkazu. Můžete jej také nejprve odstranit jednoduchým příkazem rm.

Úspěšné provedení změny můžete potvrdit znovu příkazem „systemctl get-default“.

Úroveň běhu 3 vs. úroveň běhu 5

Dvě úrovně běhu, o kterých uslyšíte a se kterými budete nejčastěji pracovat, budou 3 a 5. V podstatě se to scvrkává na toto:úroveň běhu 3 je příkazový řádek a úroveň běhu 5 je grafické uživatelské rozhraní.

Samozřejmě, ne každá distribuce se řídí touto konvencí a váš systém může být konfigurován administrátorem tak, aby tyto úrovně běhu měly ještě více rozdílů.

Ale obecně to tak funguje. Pokud chcete vidět, jaké služby jsou povoleny na obou těchto úrovních běhu, probereme to v další části.

Seznam služeb, které jsou povoleny na konkrétní úrovni běhu

Až do posledních let byl „chkconfig –list“ příkazem pro seznam služeb, které by byly povoleny na různých úrovních běhu. Pokud je váš operační systém aktuální, tento příkaz vám může způsobit chybu nebo vás odložit na systemd.

Pokud chceme vidět, jaké služby budou spuštěny při spuštění v grafickém režimu (runlevel 5), můžeme spustit tento příkaz:

$ systemctl list-dependencies graphical.target

Chcete-li zobrazit služby, které se standardně spouštějí na jiných úrovních běhu, stačí nahradit „graphical.target“ názvem cíle, který potřebujete vidět.

Na jaké úrovni běhu poběží proces?

Pokud chcete zjistit, na které úrovni běhu konkrétní služba běží, můžete použít tento příkaz:

$ systemctl show -p WantedBy [name of service]

Pokud byste například chtěli vidět, na jaké úrovni běhu poběží démon SSH, zadejte:

$ systemctl show -p WantedBy sshd.service

Podle výstupu na výše uvedeném snímku obrazovky se služba SSH spustí na úrovních 2, 3 a 4 (multi-user.target)

Jak změnit úroveň běhu aplikace?

Jak je vidět výše, naše služba SSH běží pouze na úrovních 2-4 (multi-user.target). Co když chceme, aby se také spustilo, když nabootujeme do grafického rozhraní – runlevel 5 (graphical.target)? Tuto konfiguraci bychom mohli použít pomocí následujícího příkazu:

$ systemctl enable sshd.service

Bezpečnostní problémy s úrovněmi běhu v Linuxu

Jak jsme řekli dříve v tomto článku, smyslem úrovní běhu Linuxu je poskytnout správci kontrolu nad tím, jaké služby běží za určitých podmínek. Tento typ podrobné kontroly nad vaším systémem zvyšuje zabezpečení, protože si můžete být jisti, že neběží žádné nadbytečné služby.

Problém může nastat, když administrátor přesně neví, jaké služby běží, takže se neobtěžuje tyto útočné plochy zabezpečit.

Metody v této příručce můžete použít ke konfiguraci výchozí úrovně běhu a ke kontrole spuštěných aplikací. Tyto postupy nejen uvolní systémové prostředky, ale také udrží váš server bezpečnější.

Nezapomeňte použít pouze úroveň běhu, kterou potřebujete. Například nemá smysl spouštět runlevel 5 (grafické rozhraní), pokud plánujete používat pouze terminál.

Změna na jinou úroveň běhu zavede několik nových služeb, z nichž některé mohou běžet zcela na pozadí a můžete je zapomenout zabezpečit.

Která úroveň běhu je pro mě nejlepší?

Určení, která úroveň běhu je pro vás nejlepší, závisí na situaci. Obecně platí, že pravděpodobně budete pravidelně používat úrovně běhu 3 a 5.

Pokud vám vyhovuje příkazový řádek a nepotřebujete grafické rozhraní, bude pro vás nejlepší úroveň běhu 3 (u většiny distribucí).

Tím zabráníte spuštění nepotřebných služeb. Na druhou stranu, pokud chcete více desktopového zážitku a grafického rozhraní pro použití různých aplikací atd., pak bude runlevel 5 vaší preferovanou úrovní běhu.

Pokud potřebujete provádět údržbu na produkčním serveru, úroveň běhu 1 pro tuto situaci dobře vyhovuje. Tuto úroveň běhu můžete použít k zajištění toho, že jste jediní na serveru (síťová služba není ani spuštěna) a můžete provádět údržbu bez přerušení.

Ve vzácných případech můžete dokonce potřebovat použít úroveň běhu 4. To by bylo pouze v určitých situacích, kdy vy nebo správce systému máte vlastní nakonfigurovanou úroveň běhu. Jak to udělat, probereme v další části.

Jak jste pravděpodobně předpokládali, nebudete (a nemůžete) provozovat svůj systém v úrovních běhu 0 nebo 6, ale je možné se na ně přepnout pouze pro restartování nebo vypnutí. Obvykle by to nemělo být nutné, protože existují jiné příkazy, které to dělají za nás.

Můžeme vytvořit novou úroveň běhu v Linuxu?

V Linuxu je možné vytvořit novou úroveň běhu, ale je extrémně nepravděpodobné, že byste to někdy museli udělat. Pokud jste se přesto rozhodli to udělat, můžete začít zkopírováním jednoho ze stávajících cílů systemd a poté jej upravit pomocí vlastních úprav.

Cíle jsou umístěny v:

/usr/lib/systemd/system

Pokud jste chtěli založit svůj nový runlevel/target na graphical.target (runlevel 5), zkopírujte tento adresář do svého nového cílového adresáře.

$ cp /usr/lib/systemd/system/graphical.target /usr/lib/systemd/system/mynew.target

Poté vytvořte nový adresář „wants“, například takto:

$ mkdir /etc/systemd/system/mynew.target.wants

A poté symbolicky propojte další služby z /usr/lib/systemd/system, které chcete povolit pro vaši novou úroveň běhu.

Doufám, že vám bude návod užitečný. Vraťte se.


Linux
  1. Jak upgradovat na Linux Mint 20.3:Správná cesta

  2. Pochopení souborového systému Btrfs ve Fedora Linux

  3. Zkontrolujte zatížení systému v systému Linux

  1. Pochopení systémových volání na Linuxu pomocí strace

  2. Pochopení souboru /etc/inittab v Linuxu

  3. Pochopení rc skriptů v Linuxu

  1. Jaká je správná velikost odkládacího prostoru pro moderní systém Linux?

  2. Jak změnit identitu systému Linux

  3. Jaká je aktuální úroveň běhu systému Linux?