Procesy a úlohy


PROCESY
chkconfig [<volba> [<sluzba> [<dostupnost>]]] --add <sluzba> přidá službu pod správu chkconfig, --del <sluzba> odstraní službu, --level <uroven_behu_systemu> určí úroveň běhu systému, --list / --list <sluzba> vypíše všechny služby / danou službu a jejich/její dostupnost {off | on} na všech úrovních běhu systému
# chkconfig httpd on
(povolí službu na úrovních běhu systému 2, 3, 4 a 5)
# chkconfig --level 234 qemu off
(zakáže službu na úrovních běhu systému 2, 3 a 4)
$ chkconfig --list | egrep -i "rexec|rlogin|rsh"
(vypíše dané služby a jejich dostupnost na všech úrovních běhu systému)
systemctl <prikaz> [<sluzba ...>]
(platí od RHEL 7)
enable povolí službu, disable zakáže službu, is-enabled zjistí dostupnost služby („service unit“) automaticky po startu systému, mask zabrání automatickému či manuálnímu spuštění služby, unmask zruší účinek příkazu „mask“, --user spravuje uživatelské systemd soubory (služby)
# systemctl enable httpd
(povolí službu automaticky po startu systému)
# systemctl mask postfix.service
(zabrání automatickému či manuálnímu spuštění služby)
$ systemctl list-unit-files -t service
(vypíše všechny služby a jejich dostupnost)
service [<sluzba>] <prikaz> start spustí službu, stop zastaví službu, restart restartuje službu, reload znovu načte konfigurační soubor služby, status zobrazí stav služby
# service cups restart | # /etc/init.d/cups restart
(restartuje danou službu)
# service --status-all
(zobrazí stav všech služeb)
systemctl <prikaz> [<sluzba ...>]
(platí od RHEL 7)
start spustí službu, stop zastaví službu, restart restartuje službu, reload znovu načte konfigurační soubor služby, status zobrazí stav služby („service unit“), is-active vypíše, zda je služba aktivní (běží) nebo neaktivní, --user spravuje uživatelské systemd soubory (služby)
# systemctl restart cups
(restartuje danou službu)
# systemctl list-units -t service
(zobrazí stav nainstalovaných služeb)
# systemctl list-units -t service --state=running
(zobrazí běžící služby)
# systemctl list-units -t service --all
(zobrazí stav všech služeb)
systemctl list-jobs
(platí od RHEL 7)
vypíše všechny úlohy, které systemd aktuálně provádí
<prikaz> [<argument ...>] spustí spustitelný program (binární soubor) v aktuálním shellu; program je vestavěný příkaz shellu či příkaz nalezený v $PATH nebo v zadané cestě
$ date
bash | sh [<prikaz | soubor> [<argument ...>]] spustí shell, příkaz či soubor (i bez nastavených práv ke spuštění) ve vnořeném shellu; soubor hledá v pracovním adresáři a v $PATH, -r spustí omezený shell, -c <retezec> čte příkazy z daného řetězce, -s čte příkazy ze STDIN, -x spustí skript v debug režimu
$ sudo bash -c "echo 'Vitejte na moji strance' > /var/www/html/index.html"
(přesměruje výstup příkazu do daného souboru bez nutnosti přihlásit se na účet uživatele root)
source | . <soubor> [<argument ...>] spustí daný soubor (i bez nastavených práv ke spuštění) v aktuálním shellu; soubor hledá v pracovním adresáři a v $PATH
$ . ~/.bash_profile
(obnoví profil uživatele bez nutnosti opětovného přihlášení)
<soubor> [<argument ...>] spustí spustitelný soubor ve vnořeném shellu; soubor hledá v $PATH nebo v zadané cestě
$ ./skript
command <prikaz> [<argument ...>] spustí vestavěný příkaz shellu nebo příkaz nalezený v $PATH, přičemž ignoruje jakoukoliv funkci shellu pojmenovanou shodně s názvem příkazu (shell hledá název příkazu v tomto pořadí: funkce shellu, vestavěné příkazy shellu, spustitelné soubory v $PATH)
builtin <prikaz> [<argument ...>] spustí vestavěný příkaz shellu, přičemž ignoruje jakoukoliv funkci shellu pojmenovanou shodně s názvem příkazu (shell hledá název příkazu v tomto pořadí: funkce shellu, vestavěné příkazy shellu, spustitelné soubory v $PATH)
exec [<prikaz> [<argument ...>]] [<presmerovani ...>] nahradí shell daným příkazem (nevytvoří se žádný nový proces) nebo provede přesměrování
$ exec bash
(nahradí shell bashem)
$ exec > output.txt
(přesměruje veškerý výstup do souboru „output.txt“ pro aktuální proces shellu)
pstree [<PID | uzivatel>] zobrazí stromovou strukturu procesů v abecedním pořadí, počínaje procesem "init" (systemd) nebo daným PID či procesy vlastněnými daným uživatelem, -n v číselném pořadí (podle PID), -p vypíše PID, -u vypíše uživatele
ps zobrazí statický seznam běžících procesů přihlášeného uživatele na daném terminálu (PID – identifikační číslo procesu, TTY – terminál, ze kterého byl proces spuštěn (znak „?“ znamená, že s procesem není spojen žádný terminál), TIME – čas, po který byl proces zpracováván procesorem, CMD – příkaz či proces a jeho parametry), -e všechny procesy všech uživatelů, -f podrobný výpis (navíc zobrazí UID – vlastníka procesu, PPID – rodičovský proces daného procesu, C – využití procesoru, STIME – čas spuštění procesu), -l úplný výpis (navíc zobrazí F – příznak procesu (0 – bežný proces, 1 – rozvětvený, ale nespuštěný proces, 4 – proces běžící s právy roota, 5 – kombinace předchozích hodnot), S – stav procesu („R“ běžící proces, „S“ spící proces (čekající na dokončení události), „D“ spící proces nereagující na signály (obvykle I/O), „T“ pozastavený proces, „Z“ zombie (defunct) proces – ukončený proces, který stále zabírá PID, jelikož rodičovský proces si není vědom jeho stavu ukončení), C – vytížení procesoru v %, PRI – prioritu procesu, NI – hodnotu priority zadanou příkazem „nice“, SZ – celkovou velikost paměti v blocích, kterou proces zabírá, WCHAN – adresu funkce jádra, kde proces čeká na určitou událost (u běžícího procesu je „-“)), -p <PID> daný proces, -C <program> procesy daného programu, -U <uzivatel | UID> procesy daného uživatele, -G <skupina | GID> procesy dané skupiny, -t <terminal> procesy na daném terminálu, -o <format> podle daného formátu, --sort <specifikace> třídí procesy podle dané specifikace, -Z vypíše bezpečnostní kontext SELinuxu
$ ps -ef | grep sshd
(vyhledá v běžících procesech daný proces)
$ ps -lt pts/1
(vypíše podrobný seznam běžících procesů na daném terminálu)
$ ps -p $$
(vypíše aktuální proces shellu)
$ ps -p 1 -o comm=
(vypíše jméno procesu podle jeho PID)
$ ps -eo pid,ppid,user,%mem,%cpu,comm --sort=-%cpu
(třídí procesy podle vytížení procesoru)
$ ps -eo pid,ppid,user,%mem,%cpu,comm --sort=-%mem
(třídí procesy podle vytížení paměti)
top zobrazí interaktivním a dynamickým způsobem seznam procesů, včetně jejich PID, vlastníka, priority nebo stavu a celkové využití CPU, paměti a swapu, -u <uzivatel> procesy daného uživatele, -p <PID> daný proces; interaktivní volby: f zobrazí nabídku položek, které lze přidat jako další sloupec do výstupu příkazu (např. swap, UID či PPID), M seřadí procesy podle využití paměti, P seřadí procesy podle využití procesoru (implicitně), k <PID> ukončí daný proces, q ukončí program
pidof <jmeno_procesu> zobrazí PID daného procesu
$ ps -p $(pidof sshd)
(vyhledá v běžících procesech daný proces)
pgrep <vzor> vypíše PID procesů odpovídajících vzoru, -f odpovídá celému příkazovému řádku (nejen názvu procesu), včetně cesty ke spustitelnému souboru, argumentů a voleb, -l vypíše i jméno procesu, -P <PPID> vypíše procesy nadřazeného procesu, -c vypíše počet odpovídajících procesů, -i ignoruje velikost písmen, -u <uzivatel | UID> procesy daného uživatele
$ pgrep http
(vypíše PID httpd procesů)
nice [[[-n] <priorita>] <prikaz>] spustí proces se změněnou prioritou (hodnotou „nice“), parametr „priorita“ uvádí hodnotu, která se odečte nebo přičte k výchozí hodnotě (implicitně 0), pokud se vynechá, hodnota se automaticky sníží o 10; priorita se udává v rozmezí -20 až 19, čím nižší číslo, tím vyšší priorita, záporné hodnoty smí nastavit pouze root; bez argumentu vypíše aktuální zděděnou prioritu
$ nice -n 15 rm -rf ~/tmp/*
(sníží prioritu procesu o 15)
# nice -n -15 ls /etc | cpio -ov > /dev/rmt0
(zvýší prioritu procesu o 15)
renice [-n] <priorita> <identifikator> změní prioritu (hodnotu „nice“) běžícího procesu, hodnota priority se zadává v absolutním tvaru v rozmezí -20 až 19; běžný uživatel smí prioritu pouze snižovat, [-p] <PID> určí proces, -u <uzivatel> určí procesy daného uživatele, -g <skupina> určí procesy dané skupiny
# renice -n 5 987
(nastaví prioritu daného procesu)
# renice -n -20 -u root
(zvýší prioritu všech procesů uživatele root na maximum)
# renice -n 19 -g users
(sníží prioritu všech procesů skupiny „users“ na minimum)
Ctrl+c ukončí běžící proces v popředí
Ctrl+d ukončí běžící proces, který čte data ze STDIN nebo ukončí současný shell
kill [<signal>] <PID ... | %cislo_ulohy ...> (-15) ukončí proces či úlohu odpovídající danému ID standardním způsobem (signál SIGTERM), -9 ukončí proces ihned (signál SIGKILL), -1 ukončí proces, u démonů znovu načte jejich konfigurační soubor (signál SIGHUP), -17 upozorní rodičovský proces na události podřízených procesů (signál SIGCHLD), -19 pozastaví proces (signál SIGSTOP), -18 spustí pozastavený proces (signál SIGCONT), -l vypíše seznam všech signálů, -s <signal> určí signál; signál se zadává číslem nebo jménem (s předponou „SIG“ či bez ní a bez ohledu na velikost písmen)
# kill -9 1 | # kill -SIGKILL 1 | # kill -KILL 1 | # kill -sigkill 1 | # kill -kill 1
(ukončí ihned daný proces)
$ kill %3
(ukončí danou úlohu)
$ kill -s SIGCHLD 1376
(ukončí zombie proces odesláním signálu SIGCHLD rodičovskému procesu)
killall [<signal>] <jmeno_procesu ...> (-15) ukončí všechny procesy odpovídající danému jménu (vhodné zvlášť při více spuštěných procesech jednoho programu) standardním způsobem (signál SIGTERM), -9 ukončí proces ihned (signál SIGKILL), -19 pozastaví proces (signál SIGSTOP), -18 spustí pozastavený proces (signál SIGCONT), -I ignoruje velikost písmen, -l vypíše seznam všech signálů, -s <signal> určí signál, -u <uzivatel> ukončí všechny procesy daného uživatele; signál se zadává číslem nebo jménem (s předponou „SIG“ či bez ní a bez ohledu na velikost písmen)
# killall -9 sshd
(ukončí ihned dané procesy)
pkill [<signal>] <vzor> (-15) ukončí proces odpovídající danému vzoru standardním způsobem (signál SIGTERM), -9 ukončí proces ihned (signál SIGKILL), -19 pozastaví proces (signál SIGSTOP), -18 spustí pozastavený proces (signál SIGCONT), -f odpovídá celému příkazovému řádku (nejen názvu procesu), včetně cesty ke spustitelnému souboru, argumentů a voleb, -i ignoruje velikost písmen, -u <uzivatel | UID> procesy daného uživatele; signál se zadává číslem nebo jménem (s předponou „SIG“ či bez ní a bez ohledu na velikost písmen)
fuser [<soubor ... | zarizeni ...>] vypíše procesy používající daný soubor či zařízení, -m vypíše procesy používající celý souborový systém, na kterém daný soubor leží, -u vypíše vlastníka procesu, -k ukončí proces, -i žádá o potvrzení, -v podrobný výpis
$ fuser -kiv /dev/cdrom
(ukončí procesy používající dané zařízení)
strace [<prikaz>] sleduje systémová volání a signály volané a přijímané procesem, -e <vyraz> sleduje dané systémové volání, -o <soubor> zapíše výstup do souboru, -p <PID> sleduje běžící proces, -c počítá čas, volání a chyby pro každé systémové volání a zobrazí shrnutí při ukončení programu
ltrace [<prikaz>] sleduje volání sdílených knihoven a signály volané a přijímané procesem, -e <vyraz> sleduje dané volání knihovny, -o <soubor> zapíše výstup do souboru, -p <PID> sleduje běžící proces, -c počítá čas a volání pro každé volání knihovny a zobrazí shrnutí při ukončení programu, -S navíc zobrazí systémová volání
rpcinfo [<IP_adresa | jmeno_pocitace>] -p vypíše RPC služby (jejich identifikační číslo, verzi, protokol, port a název) běžící pod správou portmapperu na lokálním či daném počítači; seznam všech RPC programů je uveden v /etc/rpc
clustat zobrazí stav clusteru
pcs status
(platí od RHEL 6)
zobrazí stav clusteru


ÚLOHY
jobs [%<cislo_ulohy> ...] vypíše danou úlohu (její číslo, „+“ či „-“ označující poslední nebo předchozí úlohu, status a příkaz spojený s úlohou) v aktuálním shellu, -l včetně PID, -r vypíše pouze běžící úlohy, -s vypíše pouze pozastavené úlohy, -n vypíše pouze změny od předchozího spuštění; bez argumentu vypíše všechny pozastavené úlohy a úlohy běžící na pozadí
<prikaz> & spustí úlohu na pozadí ve vnořeném shellu
Ctrl+z pozastaví běžící úlohu v popředí
suspend pozastaví provádění aktuálního shellu, dokud neobdrží signál SIGCONT, -f pozastaví přihlašovací shell
bg [%<cislo_ulohy> ...] spustí pozastavenou úlohu na pozadí; bez argumentu spustí poslední pozastavenou úlohu
fg [%<cislo_ulohy>] spustí pozastavenou úlohu v popředí nebo úlohu z pozadí přesune do popředí; bez argumentu spustí poslední pozastavenou úlohu či přesune poslední spuštěnou úlohu na pozadí do popředí
nohup <prikaz> spustí daný příkaz tak, že je odolný vůči signálu SIGHUP (běží i po odhlášení uživatele); výstup příkazu se ukládá do souboru „nohup.out“ v pracovním adresáři
# nohup find /tmp -name core -print > core.txt &
(spustí na pozadí daný příkaz, který běží i po odhlášení uživatele)
watch <prikaz> spustí příkaz opakovaně v pravidelných intervalech 2 sekund, -n <n> každých n sekund, -d zvýrazní změny na výstupu, Ctrl+c ukončí program
$ watch -n 1 date
(zobrazí aktuální čas)
$ watch -d iostat
(zobrazí změny na I/O zatížení disků a rychlosti zápisu a čtení dat)
$ watch "ps -eo %cpu,pid,user,args --sort=-%cpu | head -11"
(zobrazí dynamický seznam 10 procesů, které nejvíce využívají procesor)
wait [<PID | %cislo_ulohy>] čeká na ukončení daného procesu či úlohy běžící na pozadí aktuálního shellu, pak zanikne; vrátí návratový kód posledního procesu, pokud proces neexistuje, vrátí kód 127; bez argumentu čeká na ukončení všech procesů běžících na pozadí aktuálního shellu a návratový kód je 0
$ wait $! && echo "OK"
(čeká na ukončení posledního procesu běžícího na pozadí)
sleep <doba> nastaví časový interval, během něhož nedochází k žádné aktivitě (vhodné zejména v případě, kdy je třeba zajistit určitou časovou prodlevu před spuštěním dalšího příkazu); doba trvání je uvedena číslem a příponou s v sekundách (implicitně), m v minutách, h v hodinách, d ve dnech
$ sleep 10 && echo "Uplynulo 10 sekund."
(spustí následující příkaz po uplynutí 10 sekund)
at <cas> [<datum>] [<dalsi_casove_urceni>] spustí úlohu jednorázově v uvedený čas; příkazy, které se mají provést, se čtou ze STDIN nebo ze souboru, -f <soubor> čte příkazy z daného souboru, -c <cislo_ulohy> zobrazí obsah naplánované úlohy, -d <cislo_ulohy> odstraní naplánovanou úlohu (obdoba příkazu „atrm“), -l vypíše seznam naplánovaných úloh (obdoba příkazu „atq“), -m odešle uživateli email po dokončení úlohy
$ at 20:00 25.06.2007 <-' | $ at 7am today + 3 weeks <-'
at> mail root < nabidka.txt <-'
at> Ctrl+d
(odešle v daný čas uživateli root email s obsahem uvedeného souboru)
$ echo "date > date.txt" | at noon Sunday
(spustí v daný čas příkaz, jehož výstup zapíše do uvedeného souboru)
$ at -mf seznam 20:00 25.06.2007
(provede v daný čas seznam příkazů uvedených v souboru a po dokončení úlohy odešle uživateli email)
atq | at -l vypíše seznam naplánovaných úloh (číslo úlohy, čas spuštění, jméno uživatele, jenž úlohu naplánoval)
atrm | at -d <cislo_ulohy ...> odstraní naplánovanou úlohu
lpr [<soubor>] tiskne soubor; není-li soubor uveden, čte ze STDIN, -P <tiskarna> určí tiskárnu, -# <n> určí počet kopií
lpq vypíše úlohy v tiskové frontě výchozí tiskárny, -P <tiskarna> určí tiskárnu, -a úlohy na všech tiskárnách, -l podrobný výpis
lprm [<cislo_ulohy> | -] odstraní danou úlohu z tiskové fronty či celou frontu, -P <tiskarna> určí tiskárnu; bez argumentu odstraní současnou úlohu na výchozí tiskárně
crontab [<soubor>] nastaví existující soubor pro pravidelné spouštění uvedených úloh prostřednictvím démona cron, -e vytvoří či edituje crontabový soubor, -l vypíše obsah crontabového souboru, -r odstraní crontabový soubor, -u <uzivatel> nastaví crontabový soubor daného uživatele; v souboru se úlohy uvádí každá na zvláštní řádek, který se u uživatelských souborů skládá z 6 polí oddělených mezerami – 5 pro zadání času (v pořadí minuta, hodina, den v měsíci, měsíc a den v týdnu (ne–so = 0-6), „*“ vyhovuje všem hodnotám, „*/“<n> každý ntý časový interval, „,“ odděluje hodnoty téhož pole, „-“ označuje rozsah hodnot) a 1 pro příkaz samotný (pro zadání příkazu se používá absolutní cesta, nejde-li o vestavěný příkaz nebo klíčové slovo shellu, má-li nějaký výstup, odešle se uživateli emailem); prázdný řádek a řádek začínající znakem „#“ se ignoruje; mezi systémové soubory patří /etc/crontab a soubory umístěné v /etc/cron.d, které obsahují 1 pole navíc mezi časovým zadáním a příkazem – uživatele, pod kterým se má daná úloha spustit; soubory uživatelů se nachází ve /var/spool/cron/<uzivatel>, a pokud jsou editovány ručně (nikoliv příkazem „crontab -e“), nejsou změny automaticky démonem načteny; oprávnění uživatelé jsou uvedeni v /etc/cron.allow, neoprávnění uživatelé v /etc/cron.deny, existují-li oba soubory, /etc/cron.deny se ignoruje
30 8 * * * /usr/bin/df | /bin/mail admin
(spustí úlohu každý den v 8:30)
*/30 8-16 * * 1-5 /usr/bin/who >> /tmp/users.out
(spustí úlohu každých 30 min v pracovní době)
0 22 * * 5 /usr/local/scripts/backup.sh
(spustí skript každý pátek ve 22:00)
0 0 1 * * for file in $(/bin/find /web/logs/*); do > $file; done
(spustí úlohu na začátku každého měsíce)