20 comenzi Linux fiecare sysadmin ar trebui să știe

într-o lume plină de instrumente noi și medii de dezvoltare diverse, este practic o necesitate pentru orice dezvoltator sau inginer să învețe câteva comenzi de bază sysadmin. Comenzile și pachetele specifice pot ajuta dezvoltatorii să organizeze, să depaneze și să—și optimizeze aplicațiile și—atunci când lucrurile merg prost-să ofere informații valoroase de triaj operatorilor și administratorilor.

indiferent dacă sunteți un dezvoltator nou sau doriți să vă gestionați propria aplicație, următoarele 20 de comenzi de bază sysadmin vă pot ajuta să înțelegeți mai bine aplicațiile. De asemenea, vă pot ajuta să descrieți problemele pentru depanarea sysadmins de ce o aplicație ar putea funcționa local, dar nu pe o gazdă la distanță. Aceste comenzi se aplică mediilor de dezvoltare Linux, containerelor, mașinilor virtuale (VM) și metalului gol.

curl

curl transferă o adresă URL. Utilizați această comandă pentru a testa punctul final sau conectivitatea unei aplicații la un punct final de serviciu din amonte. curl poate fi util pentru a determina dacă aplicația dvs. poate ajunge la un alt serviciu, cum ar fi o bază de date, sau pentru a verifica dacă serviciul dvs. este sănătos.

de exemplu, imaginați-vă că aplicația dvs. aruncă o eroare HTTP 500 care indică faptul că nu poate ajunge la o bază de date MongoDB:

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

opțiunea-i afișează informațiile antetului și opțiunea-S reduce la tăcere corpul de răspuns. Verificarea punctului final al bazei de date de pe desktopul local:

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

deci, care ar putea fi problema? Verificați dacă aplicația dvs. poate ajunge în alte locuri în afară de baza de date de la gazda aplicației:

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

asta pare să fie în regulă. Acum încercați să ajungeți la baza de date de la gazda aplicației. Aplicația dvs. utilizează numele de gazdă al bazei de date, așa că încercați mai întâi:

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

aceasta indică faptul că aplicația dvs. nu poate rezolva baza de date, deoarece adresa URL a bazei de date nu este disponibilă sau gazda (container sau VM) nu are un server de nume pe care îl poate utiliza pentru a rezolva numele de gazdă.

python-m json.instrument / jq

după ce emite curl, ieșirea apelului API poate fi dificil de citit. Uneori, doriți să imprimați destul de ieșirea JSON pentru a găsi o anumită intrare. Python are o bibliotecă JSON încorporată care vă poate ajuta în acest sens. Utilizați python-m json.instrument pentru a indenta și de a organiza JSON. Pentru a utiliza modulul JSON al Python, introduceți ieșirea unui fișier JSON în python-m json.comanda instrumentului.

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

pentru a utiliza biblioteca Python, introduceți ieșirea în Python cu opțiunea-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"
}

pentru mai avansate JSON parsare, puteți instala jq. jq oferă câteva opțiuni care extrag valori specifice din Intrarea JSON. Pentru a imprima frumos ca modulul Python de mai sus, pur și simplu aplicați jq la ieșire.

$ 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 listează fișierele dintr-un director. Sysadmins și dezvoltatorii emite această comandă destul de des. În spațiul containerului, această comandă vă poate ajuta să determinați directorul și fișierele imaginii containerului. Pe lângă căutarea fișierelor, ls vă poate ajuta să vă examinați permisiunile. În exemplul de mai jos, nu puteți rula myapp din cauza unei probleme de permisiuni. Când verificați permisiunile folosind ls-l, vă dați seama că permisiunile nu au un „x” in-rw-r–r–, care sunt doar citite și scrise.

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

coada

coada afișează ultima parte a unui fișier. De obicei, nu aveți nevoie de fiecare linie de jurnal pentru a depana. În schimb, doriți să verificați ce spun jurnalele dvs. despre cea mai recentă solicitare către aplicația dvs. De exemplu, puteți utiliza tail pentru a verifica ce se întâmplă în jurnale atunci când faceți o solicitare către serverul HTTP Apache.

example_tail.png

 utilizați tail-f pentru a urmări jurnalele serverului HTTP Apache și pentru a vedea cererile așa cum se întâmplă.

utilizați tail-f pentru a urmări jurnalele HTTP Apache și a vedea cererile așa cum se întâmplă.

opțiunea-f indică opțiunea” urmați”, care scoate liniile de jurnal pe măsură ce sunt scrise în fișier. Exemplul are un script de fundal care accesează punctul final la fiecare câteva secunde și jurnalul înregistrează cererea. În loc să urmăriți jurnalul în timp real, puteți utiliza și coada pentru a vedea ultimele 100 de linii ale fișierului cu opțiunea-n.

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

cat

cat concatenează și imprimă fișiere. S-ar putea emite cat pentru a verifica conținutul fișierului dependențe sau pentru a confirma versiunea aplicației pe care le-ați construit deja la nivel local.

$ cat requirements.txt
flask
flask_pymongo

exemplul de mai sus verifică dacă aplicația Python Flask are Flask listată ca dependență.

grep

grep caută modele de fișiere. Dacă sunteți în căutarea unui model specific în ieșirea unei alte comenzi, grep evidențiază liniile relevante. Utilizați această comandă pentru căutarea fișierelor jurnal, a proceselor specifice și multe altele. Dacă doriți să vedeți dacă Apache Tomcat pornește, s-ar putea deveni copleșit de numărul de linii. Prin conducta de ieșire la comanda grep, izolați liniile care indică pornirea serverului.

$ 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

comanda ps, parte a pachetului procps-ng care oferă comenzi utile pentru investigarea ID-urilor de proces, arată starea unui proces care rulează. Utilizați această comandă pentru a determina o aplicație care rulează sau pentru a confirma un proces așteptat. De exemplu, dacă doriți să verificați un server web Tomcat care rulează, utilizați ps cu opțiunile sale pentru a obține ID-ul de proces al 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

pentru mai multă lizibilitate, utilizați ps și introduceți-l în grep.

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

env

env vă permite să setați sau să imprimați variabilele de mediu. În timpul depanării, este posibil să vi se pară util să verificați dacă variabila de mediu greșită împiedică pornirea aplicației. În exemplul de mai jos, această comandă este utilizată pentru a verifica variabilele de mediu setate pe gazda aplicației dvs.

$ 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

observați că aplicația utilizează Python și are variabile de mediu pentru a se conecta la o bază de date MongoDB.

top

afișează top și actualizări sortate informații de proces. Utilizați acest instrument de monitorizare pentru a determina ce procese rulează și câtă memorie și procesor consumă. Un caz comun apare atunci când executați o aplicație și moare un minut mai târziu. În primul rând, verificați eroarea de returnare a aplicației, care este o eroare de memorie.

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

este aplicația într-adevăr din memorie? Pentru a confirma, utilizați top pentru a determina cât de mult CPU și memorie consumă aplicația dvs. Când emiteți top, observați o aplicație Python care utilizează cea mai mare parte a procesorului, cu utilizarea memoriei sale urcând și suspectați că este aplicația dvs. În timp ce rulează, apăsați tasta „C” pentru a vedea comanda completă și inginerul invers dacă procesul este aplicația dvs. Se dovedește a fi aplicația dvs. intensivă în memorie (memeater.py). când aplicația dvs. a rămas fără memorie, sistemul o ucide cu o eroare în afara memoriei (OOM).

example_top.png

 emiterea de top împotriva unei aplicații care consumă toată memoria.

utilizarea memoriei și a procesorului aplicației crește, fiind în cele din urmă ucisă.

example_topwithc.png

 apăsarea C în timp ce rulează top arată comanda completă

apăsând tasta” C”, puteți vedea comanda completă care a pornit aplicația.

pe lângă verificarea propriei aplicații, puteți utiliza top pentru a depana alte procese care utilizează CPU sau memorie.

netstat

netstat afișează starea rețelei. Această comandă Arată porturile de rețea utilizate și conexiunile lor primite. Cu toate acestea, netstat nu iese din cutie pe Linux. Dacă trebuie să îl instalați, îl puteți găsi în pachetul net-tools. Ca dezvoltator care experimentează local sau împinge o aplicație către o gazdă, este posibil să primiți o eroare că un port este deja alocat sau că o adresă este deja utilizată. Utilizarea netstat cu opțiuni de protocol, proces și port demonstrează că serverul HTTP Apache utilizează deja portul 80 pe gazda de mai jos.

example_netstat.png

 netstat verifică dacă Apache rulează pe port 80

utilizarea netstat-tulpn arată că Apache folosește deja portul 80 pe această mașină.

ip

dacă adresa ip nu funcționează pe gazda dvs., aceasta trebuie instalată cu pachetul iproute2. Adresa Subcomandă (sau doar ip a pe scurt) arată interfețele și adresele IP ale gazdei aplicației dvs. Utilizați adresa ip pentru a verifica adresa IP a containerului sau a gazdei. De exemplu, când containerul dvs. este atașat la două rețele, adresa ip poate afișa ce Interfață se conectează la ce rețea. Pentru o verificare simplă, puteți utiliza întotdeauna comanda adresă ip pentru a obține adresa IP a gazdei. Exemplul de mai jos arată că containerul de nivel web are o adresă IP de 172.17.0.2 pe interfața 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 listează fișierele deschise asociate aplicației dvs. Pe unele imagini ale mașinii Linux, trebuie să instalați lsof cu pachetul lsof. În Linux, aproape orice interacțiune cu sistemul este tratată ca un fișier. Ca urmare, dacă aplicația dvs. scrie într-un fișier sau deschide o conexiune la rețea, lsof va reflecta acea interacțiune ca fișier. Similar cu netstat, puteți utiliza lsof pentru a verifica porturile de ascultare. De exemplu, dacă doriți să verificați dacă portul 80 este utilizat, Utilizați lsof pentru a verifica ce proces îl folosește. Mai jos, puteți vedea că httpd (Apache) ascultă pe portul 80. De asemenea, puteți utiliza lsof pentru a verifica ID-ul procesului httpd, examinând unde se află binar serverul web (/usr/sbin/httpd).

example_lsof.png

 lsof dezvăluie originea informațiilor despre proces

lsof arată că httpd ascultă pe portul 80. Examinarea ID-ul procesului httpd arată, de asemenea, toate fișierele httpd are nevoie pentru a rula.

numele fișierului deschis din lista de fișiere deschise ajută la identificarea originii procesului, în special Apache.

df

puteți utiliza DF (afișare spațiu liber pe disc) pentru a depana problemele legate de spațiul pe disc. Când executați aplicația pe un orchestrator container, este posibil să primiți un mesaj de eroare de semnalizare o lipsă de spațiu liber pe gazdă container. În timp ce spațiul pe disc ar trebui să fie gestionat și optimizat de un sysadmin, puteți utiliza df pentru a afla spațiul existent într-un director și pentru a confirma dacă sunteți într-adevăr în afara spațiului.

$ 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

opțiunea-h imprimă informațiile în format lizibil de om. În mod implicit, ca în exemplu, df oferă rezultate pentru tot ceea ce se află sub directorul rădăcină, dar puteți limita și rezultatele furnizând un director ca parte a comenzii dvs. (cum ar fi df-h /home).

du

pentru a prelua informații mai detaliate despre fișierele care utilizează spațiul pe disc într-un director, puteți utiliza comanda du. Dacă doriți să aflați care Jurnal ocupă cel mai mult spațiu în directorul /var/log, de exemplu, puteți utiliza du cu opțiunea-h (lizibilă de om) și opțiunea-S pentru dimensiunea totală.

$ 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

exemplul de mai sus dezvăluie cel mai mare Director din /var/log pentru a fi /var/log/audit. Puteți utiliza du împreună cu df pentru a determina ce utilizează spațiul pe disc pe gazda aplicației dvs.

id

pentru a verifica utilizatorul care rulează aplicația, utilizați comanda id pentru a returna identitatea utilizatorului. Exemplul de mai jos folosește Vagrant pentru a testa aplicația și a izola mediul său de dezvoltare. După ce vă conectați în caseta Vagrant, dacă încercați să instalați Apache HTTP Server (o dependență) sistemul afirmă că nu puteți efectua comanda ca root. Pentru a verifica utilizatorul și grupul, emiteți comanda id și observați că rulați ca utilizator „vagrant” în grupul „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

pentru a corecta acest lucru, trebuie să rulați comanda ca superuser, care oferă privilegii ridicate.

chmod

când rulați aplicația binară pentru prima dată pe gazda dvs., este posibil să primiți mesajul de eroare „permisiunea refuzată.”După cum se vede în exemplul pentru ls, puteți verifica permisiunile aplicației dvs. binare.

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

aceasta arată că nu aveți drepturi de execuție (fără „x”) pentru a rula binarul. chmod poate corecta permisiunile pentru a permite utilizatorului să ruleze binar.

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

după cum se demonstrează în exemplu, aceasta actualizează permisiunile cu drepturi de execuție. Acum, când încercați să execute binar dvs., cererea nu arunca o permisiune-a negat eroare. Chmod poate fi util atunci când încărcați un binar într-un container, de asemenea. Se asigură că containerul dvs. are permisiunile corecte pentru a executa binarul.

dig / nslookup

un server de nume de domeniu (DNS) ajută la rezolvarea unei adrese URL la un set de servere de aplicații. Cu toate acestea, este posibil să constatați că o adresă URL nu se rezolvă, ceea ce cauzează o problemă de conectivitate pentru aplicația dvs. De exemplu, să presupunem că încercați să accesați baza de date la adresa URL mydatabase de la gazda aplicației. În schimb, primiți o eroare” nu se poate rezolva”. Pentru a depana, încercați să utilizați dig (DNS lookup utility) sau nslookup (query Internet name servers) pentru a afla de ce aplicația nu poate părea să rezolve baza de date.

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

utilizarea nslookup arată că mydatabase nu poate fi rezolvată. Încercarea de a rezolva cu dig dă același rezultat.

$ 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

aceste erori ar putea fi cauzate de multe probleme diferite. Dacă nu puteți depana cauza principală, contactați sysadmin pentru mai multe investigații. Pentru testarea locală, această problemă poate indica faptul că serverele de nume ale gazdei dvs. nu sunt configurate corespunzător. Pentru a utiliza aceste comenzi, va trebui să instalați pachetul bind Utilities.

firewall-cmd

în mod tradițional, firewall-urile au fost configurate pe Linux cu comanda iptables și, deși își păstrează ubicuitatea, a fost de fapt înlocuit în mare măsură de nftables. Un front-end prietenos pentru nftables și cel care este livrat cu multe distribuții în mod implicit este firewall-cmd. Această comandă vă ajută să configurați reguli care reglementează traficul de rețea, atât de ieșire, cât și de intrare, permite computerul dvs. Aceste reguli pot fi grupate în zone, astfel încât să puteți trece rapid și ușor de la un set de reguli la altul, în funcție de cerințele dvs.

sintaxa comenzii este simplă. Utilizați comanda și un număr de opțiuni, toate acestea fiind numite în moduri care vă ajută să construiți aproape o propoziție lizibilă de om. De exemplu, pentru a vedea în ce zonă vă aflați în prezent:

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

în acest exemplu, computerul dvs. are două dispozitive de rețea și unul este atribuit zonei corp, în timp ce celălalt este atribuit zonei dmz.

pentru a vedea ce permite fiecare zonă, puteți utiliza opțiunea --list-all :

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

adăugarea de servicii este la fel de ușoară:

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

interactiunea cu firewall-cmd este proiectat pentru a fi intuitiv, și are o colecție extinsă de servicii predefinite, plus capacitatea de a scrie reguli nft direct. Odată ce începeți să utilizați firewall-cmd, puteți descărca foaia noastră de înșelăciune firewall-cmd pentru a vă ajuta să vă amintiți cele mai importante opțiuni.

sestatus

de obicei găsiți SELinux (un modul de securitate Linux) aplicat pe o gazdă de aplicație administrată de o întreprindere. SELinux oferă acces cu cel mai mic privilegiu la procesele care rulează pe gazdă, împiedicând procesele potențial rău intenționate să acceseze fișiere importante din sistem. În unele situații, o aplicație trebuie să acceseze un anumit fișier, dar poate arunca o eroare. Pentru a verifica dacă SELinux blochează aplicația, utilizați tail și grep pentru a căuta un mesaj „refuzat” în înregistrarea /var/log/audit. În caz contrar, puteți verifica dacă caseta are SELinux activată utilizând 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

ieșirea de mai sus indică faptul că gazda aplicației are SELinux activat. În mediul dvs. de dezvoltare locală, puteți actualiza SELinux pentru a fi mai permisiv. Dacă aveți nevoie de ajutor cu o gazdă la distanță, sysadmin vă poate ajuta să determinați cele mai bune practici pentru a permite aplicației dvs. să acceseze fișierul de care are nevoie. Dacă interacționați frecvent cu SELinux, descărcați foaia noastră de înșelăciune SELinux pentru referință rapidă.

istoric

când emiteți atât de multe comenzi pentru testare și depanare, este posibil să le uitați pe cele utile! Fiecare shell are o variantă a comenzii de istorie. Acesta arată istoricul comenzilor pe care le-ați emis de la începutul sesiunii. Puteți utiliza istoricul pentru a înregistra comenzile pe care le-ați utilizat pentru depanarea aplicației. De exemplu, atunci când emiteți istoricul pe parcursul acestui articol, acesta arată diferitele comenzi cu care ați experimentat și învățat.

$ history
1 clear
2 df -h
3 du

ce se întâmplă dacă doriți să executați o comandă în istoricul anterior, dar nu doriți să o reintroduceți? Utilizați ! înainte de numărul de comandă pentru a re-executa.

example_history.png

 re-executați o comandă în istoricul dvs

adăugarea ! înainte ca numărul de comandă pe care doriți să îl executați să emită din nou comanda.

comenzile de bază vă pot îmbunătăți expertiza de depanare atunci când stabiliți de ce aplicația dvs. funcționează într-un mediu de dezvoltare, dar poate nu în altul. Multe sysadmins pârghie aceste comenzi pentru a depana probleme cu sistemele. Înțelegerea unora dintre aceste comenzi utile de depanare vă poate ajuta să comunicați cu administratorii de sistem și să rezolvați problemele legate de aplicația dvs.

acest articol a fost publicat inițial în iulie 2017 și a fost actualizat de editor.



+