20 Linux příkazy každý administrátor by měl vědět,

Ve světě, překypující nové nástroje a rozmanité vývojové prostředí, je to prakticky nutnost pro všechny vývojáře nebo inženýr naučit některé základní sysadmin příkazy. Konkrétní příkazy a balíčky mohou pomoci vývojářům organizovat, řešit a optimalizovat jejich aplikace a když se něco pokazí—poskytnout cenné třídění informací, aby provozovatelé a administrátoři.

ať už jste nový vývojář nebo chcete spravovat vlastní aplikaci, následujících 20 základních příkazů sysadmin vám pomůže lépe porozumět vašim aplikacím. Mohou vám také pomoci popsat problémy sysadminům při řešení problémů, proč by aplikace mohla fungovat lokálně, ale ne na vzdáleném hostiteli. Tyto příkazy se vztahují na vývojová prostředí Linuxu, kontejnery, virtuální stroje (VM) a holý kov.

curl

curl přenáší URL. Tento příkaz použijte k otestování koncového bodu aplikace nebo připojení k upstream koncovému bodu služby. curl může být užitečný pro určení, zda vaše aplikace může dosáhnout jiné služby, například databáze, nebo pro kontrolu, zda je vaše služba zdravá.

Jako příklad, představte si, že vaše aplikace hází HTTP 500 chyba se zprávou, že nemůže dosáhnout MongoDB databáze:

$ curl -I -s myapplication:5000
HTTP/1.0 500 INTERNAL SERVER ERROR

-jsem možnost zobrazí informace záhlaví a -s volbou mlčení reakce těla. Kontrola koncového bodu vaší databáze z místní plochy:

$ curl -I -s database:27017
HTTP/1.0 200 OK

v čem by tedy mohl být problém? Zkontrolujte, zda se vaše aplikace může dostat na jiná místa kromě databáze z hostitele aplikace:

$ curl -I -s https://opensource.com
HTTP/1.1 200 OK

to se zdá být v pořádku. Nyní se pokuste dostat do databáze z hostitele aplikace. Vaše aplikace používá databáze je název hostitele, takže zkusit to první:

$ curl database:27017
curl: (6) Couldn't resolve host 'database'

To znamená, že vaší žádosti nelze vyřešit databáze, protože URL z databáze není k dispozici nebo hostitele (kontejner nebo VM), nemusí jmenný server může použít k vyřešení hostname.

python-m json.tool / jq

po vydání curl může být výstup volání API obtížně čitelný. Někdy chcete pěkně vytisknout výstup JSON a najít konkrétní položku. Python má vestavěnou knihovnu JSON, která s tím může pomoci. Používáte python-m json.nástroj pro odsazení a uspořádání JSON. Chcete-li použít Python JSON modul, potrubí výstup souboru JSON do python-m json.příkaz Nástroje.

$ cat test.json
{"title":"Person","type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"age":{"description":"Age in years","type":"integer","minimum":0}},"required":}

Chcete-li použít knihovnu Pythonu, přeneste výstup do Pythonu pomocí volby-m (modul).

$ cat test.json | python -m json.tool
{
"properties": {
"age": {
"description": "Age in years",
"minimum": 0,
"type": "integer"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
}
},
"required": ,
"title": "Person",
"type": "object"
}

pro pokročilejší analýzu JSON můžete nainstalovat jq. jq poskytuje některé možnosti, které extrahují konkrétní hodnoty ze vstupu JSON. Chcete-li pěkně tisknout jako výše uvedený modul Python, jednoduše použijte JQ na výstup.

$ cat test.json | jq
{
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"description": "Age in years",
"type": "integer",
"minimum": 0
}
},
"required":
}

ls

LS uvádí soubory v adresáři. Sysadmins a vývojáři vydávají tento příkaz poměrně často. V prostoru kontejneru může tento příkaz pomoci určit adresář a soubory obrázku kontejneru. Kromě vyhledávání souborů vám ls pomůže prozkoumat vaše oprávnění. V níže uvedeném příkladu nelze myapp spustit z důvodu problému s oprávněními. Při kontrole oprávnění pomocí ls-l si uvědomíte, že oprávnění nemají“ x “ v -rw-r–r–, které jsou pouze pro čtení a zápis.

$ ./myapp
bash: ./myapp: Permission denied
$ ls -l myapp
-rw-r--r--. 1 root root 33 Jul 21 18:36 myapp

ocas

ocas zobrazuje poslední část souboru. K řešení problémů obvykle nepotřebujete každý řádek protokolu. Místo toho chcete zkontrolovat, co vaše protokoly říkají o nejnovějším požadavku na vaši aplikaci. Můžete například použít tail ke kontrole toho, co se děje v protokolech, když podáte požadavek na váš server Apache HTTP.

příklad_tail.png

 použijte tail-f sledovat protokoly serveru Apache HTTP a vidět požadavky, jak k nim dojde.

použijte tail-f sledovat protokoly Apache HTTP a vidět požadavky, jak k nim dojde.

volba-f označuje možnost „sledovat“, která vypíše řádky protokolu tak, jak jsou zapsány do souboru. Příklad obsahuje skript na pozadí, který přistupuje k koncovému bodu každých několik sekund a protokol zaznamenává požadavek. Místo sledování protokolu v reálném čase můžete také použít tail k zobrazení posledních 100 řádků souboru s volbou-n.

$ tail -n 100 /var/log/httpd/access_log

cat

cat zřetězuje a tiskne soubory. Můžete vydat cat pro kontrolu obsahu souboru závislostí nebo pro potvrzení verze aplikace, kterou jste již vytvořili lokálně.

$ cat requirements.txt
flask
flask_pymongo

výše uvedený příklad zkontroluje, zda má aplikace pythonové baňky uvedenou jako závislost.

grep

grep vyhledává vzory souborů. Pokud hledáte konkrétní vzor ve výstupu jiného příkazu, grep zvýrazní příslušné řádky. Tento příkaz použijte pro vyhledávání souborů protokolu, konkrétních procesů a dalších. Pokud chcete zjistit, zda se spustí Apache Tomcat, můžete být ohromeni počtem řádků. Potrubím tohoto výstupu do příkazu grep izolujete řádky, které označují spuštění serveru.

$ cat tomcat.log | grep org.apache.catalina.startup.Catalina.start
01-Jul-2017 18:03:47.542 INFO org.apache.catalina.startup.Catalina.start Server startup in 681 ms

ps

příkazu ps, část procps-ng balíček, který poskytuje užitečné příkazy pro vyšetřování Id procesu, ukazuje stav běžícího procesu. Pomocí tohoto příkazu můžete určit spuštěnou aplikaci nebo potvrdit očekávaný proces. Chcete-li například zkontrolovat běžící webový server Tomcat, použijte ps s jeho možnostmi k získání ID procesu Tomcat.

$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 2 18:55 ? 00:00:02 /docker-java-home/jre/bi
root 59 0 0 18:55 pts/0 00:00:00 /bin/sh
root 75 59 0 18:57 pts/0 00:00:00 ps -ef

pro ještě větší čitelnost použijte ps a připojte jej k grep.

$ ps -ef | grep tomcat
root 1 0 1 18:55 ? 00:00:02 /docker-java-home/jre/bi

env

env umožňuje nastavit nebo vytisknout proměnné prostředí. Během odstraňování problémů může být užitečné zkontrolovat, zda nesprávná proměnná prostředí brání spuštění aplikace. V následujícím příkladu se tento příkaz používá ke kontrole proměnných prostředí nastavených na hostiteli aplikace.

$ env
PYTHON_PIP_VERSION=9.0.1
HOME=/root
DB_NAME=test
PATH=/usr/local/bin:/usr/local/sbin
LANG=C.UTF-8
PYTHON_VERSION=3.4.6
PWD=/
DB_URI=mongodb://database:27017/test

Všimněte si, že aplikace používá Python a má proměnné prostředí pro připojení k databázi MongoDB.

horní

horní displeje a aktualizace tříděné informace o procesu. Pomocí tohoto monitorovacího nástroje určete, které procesy jsou spuštěny a kolik paměti a CPU spotřebovávají. Běžný případ nastane, když spustíte aplikaci a zemře o minutu později. Nejprve zkontrolujete chybu návratu aplikace, což je chyba paměti.

$ tail myapp.log
Traceback (most recent call last):
MemoryError

je vaše aplikace opravdu z paměti? Chcete-li potvrdit, použijte top k určení, kolik CPU a paměti vaše aplikace spotřebuje. Při vydávání top si všimnete aplikace Python, která používá většinu CPU, s lezením využití paměti a máte podezření, že je to vaše aplikace. Zatímco běží, stisknete klávesu „C“, abyste viděli úplný příkaz a zpětný inženýr, pokud je proces vaší aplikací. Ukázalo se, že je to vaše aplikace náročná na paměť (memeater.py). když vaše aplikace vyčerpá paměť, systém ji zabije chybou out-of-memory (Oom).

example_top.png

vydávání top proti aplikaci, která spotřebovává veškerou svou paměť.

využití paměti a CPU aplikace se zvyšuje, nakonec je Oom-zabit.

příklad_topwithc.png

stisknutím tlačítka C při spuštění nahoru se zobrazí úplný příkaz

stisknutím klávesy “ C “ uvidíte úplný příkaz, který spustil aplikaci.

kromě kontroly vlastní aplikace můžete použít top k ladění dalších procesů, které využívají CPU nebo paměť.

netstat

netstat zobrazuje stav sítě. Tento příkaz zobrazuje používané síťové porty a jejich příchozí připojení. Netstat však v systému Linux nevychází z krabice. Pokud ji potřebujete nainstalovat, najdete ji v balíčku net-tools. Jako vývojář, který experimentuje lokálně nebo tlačí aplikaci na hostitele, se může zobrazit chyba, že port je již přidělen nebo adresa je již používána. Použití netstatu s možnostmi protokolu, procesu a portu ukazuje, že server Apache HTTP již používá port 80 na níže uvedeném hostiteli.

example_netstat.png

netstat ověří, že Apache běží na portu 80

Pomocí příkazu netstat -tulpn ukazuje, že Apache už používá port 80 na tomto stroji.

ip

pokud ip adresa na vašem hostiteli nefunguje, musí být nainstalována s balíčkem iproute2. Adresa dílčího příkazu (nebo zkráceně ip a) zobrazuje rozhraní a adresy IP hostitele vaší aplikace. IP adresu používáte k ověření IP adresy vašeho kontejneru nebo hostitele. Například, když je váš kontejner připojen ke dvěma sítím, ip adresa může ukázat, které rozhraní se připojuje ke které síti. Pro jednoduchou kontrolu můžete vždy použít příkaz ip adresa K získání IP adresy hostitele. Níže uvedený příklad ukazuje, že kontejner webové úrovně má IP adresu 172.17.0.2 na rozhraní eth0.

$ ip address show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether d4:3b:04:9e:b2:c2 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.3/27 brd 10.1.1.31 scope global dynamic noprefixroute eth0
valid_lft 52072sec preferred_lft 52072sec

lsof

lsof uvádí otevřené soubory spojené s vaší aplikací. U některých obrazů počítačů Linux je třeba nainstalovat lsof s balíčkem lsof. V Linuxu je téměř jakákoli interakce se systémem považována za soubor. Výsledkem je, že pokud vaše aplikace zapíše do souboru nebo otevře síťové připojení, lsof bude odrážet tuto interakci jako soubor. Podobně jako netstat, můžete použít lsof ke kontrole poslechových portů. Pokud například chcete zkontrolovat, zda se používá port 80, pomocí lsof zkontrolujte, který proces jej používá. Níže vidíte, že httpd (Apache) poslouchá na portu 80. Můžete také použít lsof ke kontrole ID procesu httpd, zkoumání, kde je umístěn binární webový server (/usr/sbin / httpd).

příklad_lsof.png

lsof odhaluje původ informací o procesu

Lsof ukazuje, že httpd poslouchá na portu 80. Zkoumání procesního ID httpd také zobrazuje všechny soubory, které httpd potřebuje ke spuštění.

jméno otevřeného souboru v seznamu otevřených souborů pomáhá určit původ procesu, konkrétně Apache.

df

k řešení problémů s místem na disku můžete použít df (Zobrazit volné místo na disku). Při spuštění aplikace na kontejnerovém orchestrátoru se může zobrazit chybová zpráva signalizující nedostatek volného místa na hostiteli kontejneru. Zatímco místo na disku by mělo být spravováno a optimalizováno sysadminem, můžete pomocí df zjistit existující místo v adresáři a potvrdit, zda jste skutečně mimo místo.

$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.7G 0 7.7G 0% /dev
/dev/mapper/RHEL-Root 50G 16G 35G 31% /
/dev/nvme0n1p2 3.0G 246M 2.8G 9% /boot
/dev/mapper/RHEL-Home 100G 88G 13G 88% /home
/dev/nvme0n1p1 200M 9.4M 191M 5% /boot/efi
/dev/sdb1 114G 55G 54G 51% /run/media/tux/red

volba-h vytiskne informace v lidsky čitelném formátu. Ve výchozím nastavení, stejně jako v příkladu, poskytuje DF výsledky pro vše v kořenovém adresáři, ale výsledky můžete také omezit poskytnutím adresáře jako součásti příkazu (například df-h / home).

du

získat podrobnější informace o tom, které soubory zabírají místo na disku v adresáři, můžete použít příkaz du. Pokud jste například chtěli zjistit, který protokol zabírá nejvíce místa v adresáři / var / log, můžete použít du s volbou-h (čitelné pro člověka) a volbou-s pro celkovou velikost.

$ du -sh /var/log/*
1.8M /var/log/anaconda
384K /var/log/audit
4.0K /var/log/boot.log
0 /var/log/chrony
4.0K /var/log/cron
4.0K /var/log/maillog
64K /var/log/messages

výše uvedený příklad ukazuje, největší adresář pod /var/log /var/log/audit. Du můžete použít ve spojení s df k určení toho, co využívá místo na disku v hostiteli vaší aplikace.

id

Chcete-li zkontrolovat uživatele spuštěného aplikace, použijte příkaz id pro vrácení identity uživatele. Níže uvedený příklad používá Vagrant k testování aplikace a izolaci jejího vývojového prostředí. Po přihlášení do Vagrant box, pokud se pokusíte nainstalovat Apache HTTP Server (závislost) systém uvádí, že nelze provést příkaz jako root. Chcete-li zkontrolovat uživatele a skupinu, zadejte příkaz id a všimněte si, že ve skupině „vagrant“ běžíte jako uživatel „vagrant“.

$ dnf -y install httpd
Loaded plugins: fastestmirror
You need to be root to perform this command.
$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Chcete-li to opravit, musíte spustit příkaz jako superuživatel, který poskytuje zvýšená oprávnění.

chmod

při prvním spuštění binární aplikace na vašem hostiteli se může zobrazit chybová zpráva “ povolení odepřeno.“Jak je vidět v příkladu pro ls, můžete zkontrolovat oprávnění binární aplikace.

$ ls -l
total 4
-rw-rw-r--. 1 vagrant vagrant 34 Jul 11 02:17 test.sh

To ukazuje, že nemáte výkonu práva (bez „x“) spustit binární. chmod může opravit oprávnění, aby váš uživatel spustit binární.

$ chmod +x test.sh
$ ls -l
total 4
-rwxrwxr-x. 1 vagrant vagrant 34 Jul 11 02:17 test.sh

jak je ukázáno v příkladu, toto aktualizuje oprávnění s právy provádění. Nyní, když se pokusíte spustit binární soubor, aplikace nevyhodí chybu odepřenou oprávněním. Chmod může být užitečné při načtení binární do kontejneru stejně. To zajišťuje, že váš kontejner má správná oprávnění ke spuštění binární.

dig / nslookup

server doménových jmen (DNS) pomáhá vyřešit adresu URL sady aplikačních serverů. Možná však zjistíte, že adresa URL nevyřeší, což způsobuje problém s připojením vaší aplikace. Řekněme například, že se pokoušíte získat přístup k databázi na adrese URL mydatabase z hostitele aplikace. Místo toho se zobrazí chyba“ nelze vyřešit“. Chcete-li vyřešit problém, zkuste použít dig (DNS lookup utility) nebo nslookup (query Internet name servers), abyste zjistili, proč se zdá, že aplikace databázi nevyřeší.

$ nslookup mydatabase
Server: 10.0.2.3
Address: 10.0.2.3#53
** server can't find mydatabase: NXDOMAIN

použití nslookup ukazuje, že mydatabase nelze vyřešit. Pokus o vyřešení s dig přináší stejný výsledek.

$ dig mydatabase
; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 <<>> mydatabase
;; global options: +cmd
;; connection timed out; no servers could be reached

tyto chyby mohou být způsobeny mnoha různými problémy. Pokud nemůžete ladit příčinu, obraťte se na sysadmin pro další vyšetřování. Pro místní testování může tento problém znamenat, že jmenné servery vašeho hostitele nejsou správně nakonfigurovány. Chcete-li použít tyto příkazy, budete muset nainstalovat balíček BIND Utilities.

firewall-cmd

tradičně byly brány firewall konfigurovány v Linuxu příkazem iptables, a přestože si zachovává svou všudypřítomnost, byl ve skutečnosti z velké části nahrazen nftables. Přátelský front-end pro nftables, a ten, který je dodáván s mnoha distribucemi ve výchozím nastavení, je firewall-cmd. Tento příkaz vám pomůže nastavit pravidla upravující, jaký síťový provoz, odchozí i příchozí, váš počítač umožňuje. Tato pravidla mohou být seskupena do zón, takže můžete rychle a snadno přejít z jedné sady pravidel do druhé, v závislosti na vašich požadavcích.

syntaxe příkazu je přímočará. Použijete příkaz a několik možností, z nichž všechny jsou pojmenovány způsoby, které vám pomohou téměř vytvořit větu čitelnou pro člověka. Chcete-li například zjistit, v jaké zóně se právě nacházíte:

$ sudo firewall-cmd --get-active-zones``
corp
interfaces: ens0
dmz
interfaces: ens1

v tomto příkladu má váš počítač dvě síťová zařízení a jedno je přiřazeno zóně corp, zatímco druhé je přiřazeno zóně dmz.

vidět, co každá zóna umožňuje, můžete použít --list-all možnost:

$ sudo firewall-cmd --zone corp --list-all
corp
target: default
interfaces: ens0
services: cockpit dhcpv6-client ssh
ports:
protocols:

Přidání služby je stejně snadné:

$ sudo firewall-cmd --add-service http --permanent
$ sudo firewall-cmd --reload

Interakce s firewall-cmd je navržen tak, aby být intuitivní, a má rozsáhlou sbírku predifined služby, plus schopnost psát nft pravidla přímo. Jakmile začnete používat firewall-cmd, můžete si stáhnout náš cheat sheet firewall-cmd, který vám pomůže zapamatovat si jeho nejdůležitější možnosti.

sestatus

obvykle najdete SELinux (Linux security module) vymáhat na žádost hostitele řídí podnik. SELinux poskytuje nejméně privilegovaný přístup k procesům běžícím na hostiteli, což zabraňuje potenciálně škodlivým procesům v přístupu k důležitým souborům v systému. V některých situacích aplikace potřebuje přístup ke konkrétnímu souboru, ale může způsobit chybu. Chcete-li zkontrolovat, zda SELinux blokuje aplikaci, použijte tail a grep k vyhledání zprávy „odepřeno“ v protokolu /var/log/audit. V opačném případě můžete zkontrolovat, zda je v poli povolen SELinux pomocí sestatus.

$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28

výše uvedený výstup znamená, že hostitel aplikace má povolen SELinux. V místním vývojovém prostředí můžete aktualizovat SELinux tak, aby byl tolerantnější. Pokud potřebujete pomoc se vzdáleným hostitelem, váš sysadmin vám pomůže určit nejlepší postupy pro umožnění vaší aplikaci přístup k souboru, který potřebuje. Pokud často komunikujete se Selinuxem, stáhněte si náš tahák SELinux pro rychlou orientaci.

historie

když vydáte tolik příkazů pro testování a ladění, můžete zapomenout na ty užitečné! Každý shell má variantu příkazu historie. Zobrazuje historii příkazů, které jste vydali od začátku relace. Pomocí historie můžete zaznamenat, které příkazy jste použili k řešení problémů s aplikací. Například, když vydáváte historii v průběhu tohoto článku, zobrazuje různé příkazy, se kterými jste experimentovali a naučili se.

$ history
1 clear
2 df -h
3 du

co když chcete provést příkaz ve své předchozí historii,ale nechcete jej přepsat? Použít ! před číslem příkazu k opětovnému spuštění.

příklad_historie.png

znovu spusťte příkaz ve své historii

přidání ! před číslem příkazu, které chcete provést, příkaz znovu vydá.

Základní příkazy mohou zlepšit vaše řešení problémů odborné znalosti při určování, proč vaše aplikace pracuje v jedné vývojové prostředí, ale možná ne v jiném. Mnoho sysadminů využívá tyto příkazy k ladění problémů se systémy. Pochopení některých z těchto užitečných příkazů pro řešení problémů vám může pomoci komunikovat se sysadminy a vyřešit problémy s vaší aplikací.

tento článek byl původně publikován v červenci 2017 a byl editorem aktualizován.



+