20 Linux-kommandoer hver sysadmin burde vite

I en verden som brister med nye verktøy og ulike utviklingsmiljøer, er det praktisk talt en nødvendighet for enhver utvikler eller ingeniør å lære noen grunnleggende sysadmin-kommandoer. Spesifikke kommandoer og pakker kan hjelpe utviklere med å organisere, feilsøke og optimalisere programmene sine, og—når ting går galt-gi verdifull triageinformasjon til operatører og sysadmins.

enten du er en ny utvikler eller ønsker å administrere ditt eget program, kan følgende 20 grunnleggende sysadmin kommandoer hjelpe deg å bedre forstå programmene dine. De kan også hjelpe deg med å beskrive problemer til sysadmins feilsøking hvorfor et program kan fungere lokalt, men ikke på en ekstern vert. Disse kommandoene gjelder For Linux – utviklingsmiljøer, beholdere, virtuelle maskiner (Vm-er) og bare metall.

krøll

krøll overfører EN URL. Bruk denne kommandoen til å teste et programs endepunkt eller tilkobling til et oppstrøms tjenesteendepunkt. curl kan være nyttig for å avgjøre om programmet kan nå en annen tjeneste, for eksempel en database, eller sjekke om tjenesten er sunt.

For eksempel, tenk at søknaden din kaster EN HTTP 500-feil som indikerer at den ikke kan nå En MongoDB-database:

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

alternativet-I viser topptekstinformasjonen, og alternativet-s demper responsorganet. Kontrollere endepunktet i databasen fra det lokale skrivebordet:

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

Så hva kan være problemet? Sjekk om søknaden din kan komme til andre steder i tillegg til databasen fra programverten:

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

det ser ut til å være greit. Prøv nå å nå databasen fra programverten. Din søknad bruker databasens vertsnavn, så prøv det først:

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

dette indikerer at programmet ikke kan løse databasen fordi URL-ADRESSEN til databasen er utilgjengelig eller verten (container eller VM) ikke har en navneserver den kan bruke til å løse vertsnavnet.

python-m json.tool / jq

når du har utstedt curl, kan utdataene FRA API-anropet være vanskelige å lese. Noen ganger vil du skrive ut json-utgangen for å finne en bestemt oppføring. Python har et innebygd json-bibliotek som kan hjelpe med dette. Du bruker python-m json.verktøy for å rykke inn OG organisere JSON. For å bruke Pythons JSON-modul, rør utgangen av EN JSON-fil inn i python-m json.verktøy kommando.

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

for å bruke Python-biblioteket, rør utgangen Til Python med alternativet-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"
}

for mer avansert json-parsing kan du installere jq. jq gir noen alternativer som trekker ut bestemte verdier fra json-inngangen. For å skrive ut som Python-modulen ovenfor, må du bare bruke jq til utgangen.

$ 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 viser filer i en katalog. Sysadmins og utviklere utsteder denne kommandoen ganske ofte. I beholderplassen kan denne kommandoen hjelpe deg med å bestemme beholderbildets katalog og filer. Foruten å se opp filene dine, kan ls hjelpe deg med å undersøke dine tillatelser. I eksemplet nedenfor kan du ikke kjøre myapp på grunn av et tillatelsesproblem. Når du sjekker tillatelsene ved hjelp av ls-l, innser du at tillatelsene ikke har en» x » i-rw-r-r -, som bare leses og skrives.

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

hale

hale viser den siste delen av en fil. Du trenger vanligvis ikke hver logglinje for å feilsøke. I stedet vil du sjekke hva loggene dine sier om den siste forespørselen til søknaden din. For eksempel kan du bruke tail til å sjekke hva som skjer i loggene når Du gjør en forespørsel Til Apache HTTP-serveren.

example_tail.png

 Bruk tail-f til å følge Apache HTTP serverlogger og se forespørslene når de skjer.

Bruk tail-f til å følge Apache HTTP-logger og se forespørslene når de skjer.

alternativet-f angir alternativet» følg», som sender ut logglinjene som de er skrevet til filen. Eksemplet har et bakgrunnsskript som åpner endepunktet hvert par sekunder, og loggen registrerer forespørselen. I stedet for å følge loggen i sanntid, kan du også bruke tail for å se de siste 100 linjene i filen med-n-alternativet.

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

katt

katt setter sammen og skriver ut filer. Det kan hende du utsteder cat for å sjekke innholdet i avhengighetsfilen din eller for å bekrefte versjonen av programmet du allerede har bygget lokalt.

$ cat requirements.txt
flask
flask_pymongo

eksemplet ovenfor kontrollerer om Python Flask-programmet har Flask oppført som en avhengighet.

grep

grep søker fil mønstre. Hvis du er ute etter et bestemt mønster i utgangen av en annen kommando, fremhever grep de relevante linjene. Bruk denne kommandoen for å søke loggfiler, bestemte prosesser og mer. Hvis Du vil se Om Apache Tomcat starter opp, kan du bli overveldet av antall linjer. Ved hjelp av rør som sendes til grep-kommandoen, isolerer du linjene som angir serveroppstart.

$ 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

ps-kommandoen, en del av procps-ng-pakken som gir nyttige kommandoer for å undersøke prosess-Ider, viser statusen til en kjørende prosess. Bruk denne kommandoen til å bestemme et kjørende program eller bekrefte en forventet prosess. Hvis du for eksempel vil sjekke om En Tomcat-webserver kjører, bruker du ps med alternativene for Å få Prosess-IDEN Til 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

for enda mer lesbarhet, bruk ps og rør den til grep.

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

env

env lar deg angi eller skrive ut miljøvariablene. Under feilsøking kan du finne det nyttig for å sjekke om feil miljøvariabel forhindrer at programmet starter. I eksemplet nedenfor brukes denne kommandoen til å kontrollere miljøvariablene som er angitt på programmets vert.

$ 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

Legg Merke til at programmet bruker Python og har miljøvariabler for å koble til En MongoDB-database.

topp

topp skjermer og oppdateringer sortert prosessinformasjon. Bruk dette overvåkingsverktøyet til å bestemme hvilke prosesser som kjører og hvor mye minne og CPU de bruker. Et vanlig tilfelle oppstår når du kjører et program, og det dør et minutt senere. Først sjekker du programmets returfeil, som er en minnefeil.

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

er søknaden din virkelig tom for minne? For å bekrefte, bruk top for å bestemme hvor MYE CPU og minne programmet bruker. Når du utsteder top, merker du Et Python-program som bruker det meste AV CPU, med minnebruk klatring, og mistenker at det er din søknad. Mens det går, trykker du på » C » – tasten for å se hele kommandoen og reverse-engineer hvis prosessen er din søknad. Det viser seg å være din minneintensive applikasjon (memeater.py). Når programmet har gått tom for minne, dreper systemet det med en out-of-memory (OOM) feil.

example_top.png

 Utsteder topp mot et program som bruker alt minnet.

minnet og CPU-bruken av programmet øker, til slutt BLIR OOM-drept.

example_topwithc.png

 Hvis Du Trykker På C mens du kjører top, vises hele kommandoen

ved å trykke På» C » – tasten, kan du se hele kommandoen som startet programmet.

i tillegg til å sjekke ditt eget program, kan du bruke top til å feilsøke andre prosesser som bruker CPU eller minne.

netstat

netstat viser nettverksstatusen. Denne kommandoen viser nettverksporter i bruk og deres innkommende tilkoblinger. Netstat kommer imidlertid ikke ut av boksen På Linux. Hvis du trenger å installere den, kan du finne den i net-tools-pakken. Som utvikler som eksperimenterer lokalt eller skyver et program til en vert, kan du få en feilmelding om at en port allerede er tildelt eller en adresse allerede er i bruk. Ved hjelp av netstat med protokoll -, prosess-og portalternativer demonstrerer Apache HTTP-serveren allerede bruker port 80 på verten nedenfor.

example_netstat.png

 netstat bekrefter At Apache kjører på port 80

Bruke netstat-tulpn viser At Apache allerede bruker port 80 på denne maskinen.

ip

hvis ip-adressen ikke fungerer på verten din, må den installeres med iproute2-pakken. Underkommandoadressen (eller bare ip a for kort) viser grensesnittene og IP-adressene til programmets vert. Du bruker ip-adresse til å bekrefte beholderen ELLER vertens IP-adresse. For eksempel, når beholderen er koblet til to nettverk, kan ip-adressen vise hvilket grensesnitt som kobles til hvilket nettverk. For en enkel sjekk kan du alltid bruke kommandoen ip-adresse for å få IP-adressen til verten. Eksemplet nedenfor viser at nettlagerbeholderen har EN IP-adresse på 172.17.0.2 på grensesnittet 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 viser de åpne filene som er knyttet til søknaden din. På Noen Linux-maskinbilder må du installere lsof med lsof-pakken. I Linux behandles nesten enhver interaksjon med systemet som en fil. Som et resultat, hvis programmet skriver til en fil eller åpner en nettverkstilkobling, vil lsof gjenspeile at samspillet som en fil. I likhet med netstat, kan du bruke lsof for å se etter lytteporter. Hvis du for eksempel vil sjekke om port 80 er i bruk, bruker du lsof til å sjekke hvilken prosess som bruker den. Nedenfor kan du se at httpd (Apache) lytter på port 80. Du kan også bruke lsof til å sjekke prosess-IDEN til httpd, og undersøke hvor webserverens binære befinner seg (/usr/sbin / httpd).

example_lsof.png

 lsof avslører opprinnelsen til prosessinformasjon

Lsof viser at httpd lytter på port 80. Undersøke httpd prosess ID viser også alle filene httpd behov for å kjøre.

navnet på den åpne filen i listen over åpne filer hjelper finne opprinnelsen til prosessen, spesielt Apache.

df

du kan bruke df (vis ledig diskplass) til å feilsøke problemer med diskplass. Når du kjører programmet på en container orchestrator, kan du få en feilmelding som signaliserer mangel på ledig plass på container host. Mens diskplass skal administreres og optimaliseres av en sysadmin, kan du bruke df til å finne ut eksisterende plass i en katalog og bekrefte om du faktisk er tom for plass.

$ 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

alternativet-h skriver ut informasjonen i lesbart format. Som standard, som i eksemplet, gir df resultater for alt under rotkatalogen, men du kan også begrense resultatene ved å gi en katalog som en del av kommandoen din (for eksempel df-h /home).

du

for å hente mer detaljert informasjon om hvilke filer som bruker diskplassen i en katalog, kan du bruke du-kommandoen. Hvis du vil finne ut hvilken logg som tar mest plass i katalogen / var / log, kan du for eksempel bruke du med alternativet-h (lesbar) og alternativet-s for den totale størrelsen.

$ 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

eksemplet ovenfor viser den største katalogen under / var / log til be / var / log / audit. Du kan bruke du i forbindelse med df for å finne ut hva som utnytter diskplass på programmets vert.

id

hvis du vil kontrollere brukeren som kjører programmet, bruker du id-kommandoen til å returnere brukeridentiteten. Eksemplet nedenfor bruker Vagrant til å teste applikasjonen og isolere utviklingsmiljøet. Når du har logget på Vagrant-boksen, hvis du prøver å installere Apache HTTP Server (en avhengighet), sier systemet at du ikke kan utføre kommandoen som rot. For å sjekke brukeren og gruppen, utsted id-kommandoen og legg merke til at du kjører som «vagrant» – bruker i» vagrant » – gruppen.

$ 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

for å rette opp dette må du kjøre kommandoen som en superbruker, som gir forhøyede rettigheter.

chmod

når du kjører programmet binært for første gang på verten, kan du få feilmeldingen » tillatelse nektet .»Som vist i eksemplet for ls, kan du sjekke tillatelsene til søknaden din binær.

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

dette viser at du ikke har kjøringsrettigheter (ingen «x») for å kjøre binæret. chmod kan korrigere tillatelsene slik at brukeren kan kjøre binær.

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

som vist i eksemplet oppdaterer dette tillatelsene med kjøringsrettigheter. Nå når du prøver å utføre binær, programmet ikke kaste en tillatelse-nektet feil. Chmod kan være nyttig når du laster inn en binær i en beholder også. Det sikrer at beholderen har de riktige tillatelsene til å utføre binær.

grave / nslookup

EN domenenavnserver (DNS) bidrar til å løse EN URL til et sett med programservere. Det kan imidlertid hende AT EN URL-ADRESSE ikke løses, noe som fører til et tilkoblingsproblem for programmet. For eksempel, si at du prøver å få tilgang til databasen på MYDATABASE URL FRA programmets vert. I stedet får du en» kan ikke løse » feil. Hvis du vil feilsøke, kan du prøve å bruke dig (DNS lookup utility) eller nslookup (query Internet name servers) for å finne ut hvorfor programmet ikke kan synes å løse databasen.

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

Bruk av nslookup viser at mydatabase ikke kan løses. Prøver å løse med dig gir samme resultat.

$ 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

disse feilene kan skyldes mange forskjellige problemer. Hvis du ikke kan feilsøke grunnårsaken, nå ut til sysadmin for mer etterforskning. For lokal testing kan dette problemet indikere at vertsens navneservere ikke er konfigurert på riktig måte. For å bruke disse kommandoene må du installere BIND Utilities-pakken.

firewall-cmd

tradisjonelt ble brannmurer konfigurert På Linux med iptables-kommandoen, og mens den beholder sin ubiquity, har den faktisk i stor grad blitt erstattet av nftables. En vennlig front-end for nftables, og den som leveres med mange distribusjoner som standard, er firewall-cmd. Denne kommandoen hjelper deg med å sette opp regler for hvilken nettverkstrafikk, både utgående og innkommende, datamaskinen tillater. Disse reglene kan grupperes i soner, slik at du raskt og enkelt kan flytte fra ett sett med regler til et annet, avhengig av dine behov.

kommandosyntaksen er enkel. Du bruker kommandoen og et antall alternativer, som alle er oppkalt på måter som hjelper deg med å konstruere en menneskelig lesbar setning. For eksempel, for å se hvilken sone du er i:

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

i dette eksemplet har datamaskinen to nettverksenheter, og den ene er tilordnet sonen corp, mens den andre er tilordnet sonen dmz.

for å se hva hver sone tillater, kan du bruke alternativet --list-all :

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

Å Legge til tjenester er like enkelt:

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

Samspill med brannmur-cmd er designet for å være intuitivt, og den har en omfattende samling av predifined tjenester, pluss muligheten til å skrive nft regler direkte. Når du begynner å bruke firewall-cmd, kan du laste ned vår firewall-cmd cheat sheet for å hjelpe deg med å huske de viktigste alternativene.

sestatus

Du finner Vanligvis SELinux (En Linux-sikkerhetsmodul) håndhevet på en programverten som administreres av en bedrift. SELinux gir minst privilegert tilgang til prosesser som kjører på verten, og forhindrer potensielt skadelige prosesser i å få tilgang til viktige filer på systemet. I noen situasjoner må et program få tilgang til en bestemt fil, men kan kaste en feil. For å sjekke Om SELinux blokkerer programmet, bruk tail og grep for å se etter en» nektet » melding i /var / log / audit logging. Ellers kan du sjekke om boksen Har SELinux aktivert ved hjelp av 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

utgangen ovenfor indikerer At programmets vert Har SELinux aktivert. På ditt lokale utviklingsmiljø kan Du oppdatere SELinux for å være mer permissiv. Hvis du trenger hjelp med en ekstern vert, kan sysadmin hjelpe deg med å finne den beste praksisen for å la programmet få tilgang til filen den trenger. Hvis Du samhandler med SELinux ofte, last ned Vår SELinux cheat sheet for rask referanse.

historie

når du utsteder så mange kommandoer for testing og feilsøking, kan du glemme de nyttige! Hvert skall har en variant av historikkkommandoen. Det viser historien til kommandoer du har utstedt siden starten av økten. Du kan bruke logg til å logge hvilke kommandoer du brukte til å feilsøke programmet. Når du for eksempel utsteder loggen i løpet av denne artikkelen, vises de forskjellige kommandoene du eksperimenterte med og lærte.

$ history
1 clear
2 df -h
3 du

Hva om du vil utføre en kommando i din tidligere historie, men du vil ikke skrive den inn på nytt? Bruk ! før kommandoen nummer for å re-utføre.

example_history.png

 utfør en kommando På nytt i historikken din

Legge til ! før kommandonummeret du vil utføre, utsteder kommandoen igjen.

Grunnleggende kommandoer kan forbedre feilsøkingskompetansen din når du bestemmer hvorfor programmet fungerer i ett utviklingsmiljø, men kanskje ikke i et annet. Mange sysadmins utnytter disse kommandoene til å feilsøke problemer med systemer. Å forstå noen av disse nyttige feilsøkingskommandoene kan hjelpe deg med å kommunisere med sysadmins og løse problemer med søknaden din.

denne artikkelen ble opprinnelig publisert i juli 2017 og har blitt oppdatert av redaktøren.



+