i en verden sprængfyldt med nye værktøjer og forskellige udviklingsmiljøer, er det praktisk talt en nødvendighed for enhver udvikler eller ingeniør til at lære nogle grundlæggende sysadmin kommandoer. Specifikke kommandoer og pakker kan hjælpe udviklere med at organisere, fejlfinde og optimere deres applikationer og—når ting går galt—give værdifulde triage-oplysninger til operatører og sysadmins.
uanset om du er en ny udvikler eller vil administrere din egen applikation, kan følgende 20 grundlæggende sysadmin-kommandoer hjælpe dig med bedre at forstå dine applikationer. De kan også hjælpe dig med at beskrive problemer til sysadmins fejlfinding hvorfor et program kan arbejde lokalt, men ikke på en ekstern vært. Disse kommandoer gælder for udviklingsmiljøer, containere, virtuelle maskiner (VM ‘ er) og bare metal.
curl
curl overfører en URL. Brug denne kommando til at teste et programs slutpunkt eller forbindelse til et opstrøms serviceendepunkt. curl kan være nyttigt til at bestemme, om din applikation kan nå en anden tjeneste, såsom en database, eller kontrollere, om din tjeneste er sund.
forestil dig, at din applikation kaster en HTTP 500-fejl, der angiver, at den ikke kan nå en MongoDB-database:
$ curl -I -s myapplication:5000
HTTP/1.0 500 INTERNAL SERVER ERROR
indstillingen-i viser overskriftsoplysningerne, og indstillingen-s dæmper svarlegemet. Kontrol af slutpunktet for din database fra dit lokale skrivebord:
$ curl -I -s database:27017
HTTP/1.0 200 OK
så hvad kunne være problemet? Kontroller, om din applikation kan komme til andre steder udover databasen fra applikationsværten:
$ curl -I -s https://opensource.com
HTTP/1.1 200 OK
det ser ud til at være okay. Prøv nu at nå databasen fra applikationsværten. Din applikation bruger databasens værtsnavn, så prøv det først:
$ curl database:27017
curl: (6) Couldn't resolve host 'database'
dette indikerer, at din applikation ikke kan løse databasen, fordi databasens URL ikke er tilgængelig, eller værten (container eller VM) ikke har en navneserver, den kan bruge til at løse værtsnavnet.
python-m json.8152 >
når du har udstedt curl, kan outputtet fra API-opkaldet være svært at læse. Nogle gange vil du smukt udskrive JSON-output for at finde en bestemt post. Python har et indbygget JSON-bibliotek, der kan hjælpe med dette. Du bruger python-m json.værktøj til at indrykke og organisere JSON. For at bruge Pythons JSON-modul, rør output fra en JSON-fil ind i python-m json.værktøj 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 at bruge Python-biblioteket, rør output til Python med indstillingen-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 mere avanceret JSON parsing kan du installere JK. JK giver nogle muligheder, der udtrækker specifikke værdier fra JSON-input. Hvis du vil udskrive som Python-modulet ovenfor, skal du blot anvende JK på output.
$ 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 lister filer i en mappe. Sysadmins og udviklere udsteder denne kommando ganske ofte. I containerrummet kan denne kommando hjælpe med at bestemme dit containerbilledets bibliotek og filer. Udover at slå dine filer op, kan ls hjælpe dig med at undersøge dine tilladelser. I eksemplet nedenfor kan du ikke køre myapp på grund af et tilladelsesproblem. Når du kontrollerer tilladelserne ved hjælp af ls-l, indser du, at tilladelserne ikke har en “r” i-R-R -, som kun læses og skrives.
$ ./myapp
bash: ./myapp: Permission denied
$ ls -l myapp
-rw-r--r--. 1 root root 33 Jul 21 18:36 myapp
tail
tail viser den sidste del af en fil. Du har normalt ikke brug for hver loglinje for at foretage fejlfinding. I stedet vil du kontrollere, hvad dine logfiler siger om den seneste anmodning til din ansøgning. For eksempel kan du bruge tail til at kontrollere, hvad der sker i logfilerne, når du foretager en anmodning til din Apache HTTP-server.
eksempel_tail.png
brug tail-f til at følge Apache HTTP-logfiler og se anmodningerne, når de sker.
indstillingen-f angiver indstillingen” følg”, som udsender loglinjerne, når de skrives til filen. Eksemplet har et baggrundsskript, der får adgang til slutpunktet hvert par sekunder, og loggen registrerer anmodningen. I stedet for at følge loggen i realtid kan du også bruge tail til at se de sidste 100 linjer i filen med indstillingen-n.
$ tail -n 100 /var/log/httpd/access_log
kat
kat sammenkæder og udskriver filer. Du kan udstede cat for at kontrollere indholdet af din afhængighedsfil eller for at bekræfte den version af programmet, du allerede har bygget lokalt.
$ cat requirements.txt
flask
flask_pymongo
eksemplet ovenfor kontrollerer, om din Python-kolbe-applikation har kolbe opført som en afhængighed.
grep
grep søger filmønstre. Hvis du leder efter et specifikt mønster i output fra en anden kommando, fremhæver grep de relevante linjer. Brug denne kommando til at søge i logfiler, specifikke processer og meget mere. Hvis du vil se, om Apache Tomcat starter, kan du blive overvældet af antallet af linjer. Ved at rør, der udsendes til grep-kommandoen, isolerer du de linjer, der angiver serverstart.
$ 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 af procps-ng-pakken, der indeholder nyttige kommandoer til undersøgelse af proces-id ‘ er, viser status for en kørende proces. Brug denne kommando til at bestemme et kørende program eller bekræfte en forventet proces. Hvis du f.eks. vil tjekke for en kørende Tomcat-Server, bruger du ps med dens muligheder for at få proces-ID ‘ et 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 endnu mere læsbarhed, brug ps og rør det til grep.
$ ps -ef | grep tomcat
root 1 0 1 18:55 ? 00:00:02 /docker-java-home/jre/bi
env
env giver dig mulighed for at indstille eller udskrive miljøvariablerne. Under fejlfinding kan du finde det nyttigt at kontrollere, om den forkerte miljøvariabel forhindrer din applikation i at starte. I eksemplet nedenfor bruges denne kommando til at kontrollere de miljøvariabler, der er indstillet på din applikations vært.
$ 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
Bemærk, at applikationen bruger Python og har miljøvariabler til at oprette forbindelse til en MongoDB-database.
top
top displays og opdateringer sorterede procesoplysninger. Brug dette overvågningsværktøj til at bestemme, hvilke processer der kører, og hvor meget hukommelse og CPU de bruger. En almindelig sag opstår, når du kører et program, og det dør et minut senere. Først kontrollerer du programmets returfejl, hvilket er en hukommelsesfejl.
$ tail myapp.log
Traceback (most recent call last):
MemoryError
er din ansøgning virkelig ude af hukommelsen? For at bekræfte skal du bruge top til at bestemme, hvor meget CPU og hukommelse din applikation bruger. Når du udsteder top, bemærker du en Python-applikation, der bruger det meste af CPU ‘ en, med dens hukommelsesforbrug klatring, og har mistanke om, at det er din applikation. Mens den kører, trykker du på” C ” -tasten for at se den fulde kommando og reverse-engineer, hvis processen er din ansøgning. Det viser sig at være din hukommelsesintensive applikation (memeater.py). når din applikation er løbet tør for hukommelse, dræber systemet det med en OOM-fejl (out-of-memory).
eksempel_top.PNG
hukommelsen og CPU-brugen af applikationen øges, til sidst bliver oom-dræbt.
eksempel_top MEDC.png
ved at trykke på” C ” – tasten kan du se den fulde kommando, der startede applikationen.
ud over at kontrollere din egen applikation kan du bruge top til at debugge andre processer, der bruger CPU eller hukommelse.
netstat
netstat viser netværksstatus. Denne kommando viser netværksporte i brug og deres indgående forbindelser. Netstat kommer dog ikke ud af boksen. Hvis du har brug for at installere det, kan du finde det i net-tools-pakken. Som udvikler, der eksperimenterer lokalt eller skubber et program til en vært, kan du modtage en fejl, at en port allerede er tildelt, eller en adresse allerede er i brug. Brug af netstat med protokol -, proces-og portindstillinger viser, at Apache HTTP-server allerede bruger port 80 på nedenstående vært.
eksempel_netstat.png
brug af netstat-tulpn viser, at Apache allerede bruger port 80 på denne maskine.
ip
hvis ip-adressen ikke virker på din vært, skal den installeres med iproute2-pakken. Underkommandoadressen (eller bare ip A for kort) viser grænsefladerne og IP-adresserne på din applikations vært. Du bruger ip-adresse til at bekræfte din container eller værts IP-adresse. For eksempel, når din container er knyttet til to netværk, kan ip-adresse vise, hvilken grænseflade der forbinder til hvilket netværk. For en simpel kontrol kan du altid bruge kommandoen ip-adresse til at få værtsens IP-adresse. Eksemplet nedenfor viser, at lagerbeholderen har en IP-adresse på 172.17.0.2 på interface 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 åbne filer, der er knyttet til din applikation. På nogle billeder skal du installere lsof med lsof-pakken. Næsten enhver interaktion med systemet behandles som en fil. Som et resultat, hvis din applikation skriver til en fil eller åbner en netværksforbindelse, vil lsof afspejle denne interaktion som en fil. I lighed med netstat kan du bruge lsof til at kontrollere, om der er lytteporte. Vil kontrollere, om port 80 er i brug, bruger du lsof til at kontrollere, hvilken proces der bruger den. Nedenfor kan du se, at httpd (Apache) lytter på port 80. Du kan også bruge lsof til at kontrollere proces-ID ‘ et for httpd og undersøge, hvor internetserverens binære fil befinder sig (/usr/sbin/httpd).
eksempel_lsof.png
Lsof viser, at httpd lytter på port 80. Undersøgelse httpd proces-ID viser også alle de filer httpd behov for at køre.
navnet på den åbne fil i listen over åbne filer hjælper lokalisere oprindelsen af processen, specifikt Apache.
df
du kan bruge df (vis ledig diskplads) til fejlfinding af problemer med diskplads. Når du kører din applikation på en containerorkestrator, får du muligvis en fejlmeddelelse, der signalerer manglende ledig plads på containerværten. Mens diskplads skal styres og optimeres af en sysadmin, kan du bruge df til at finde ud af den eksisterende plads i en mappe og bekræfte, om du faktisk er ude af plads.
$ 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
indstillingen-h udskriver oplysningerne i menneskeligt læsbart format. Som standard, som i eksemplet, giver df resultater for alt under rodmappen, men du kan også begrænse resultaterne ved at angive en mappe som en del af din kommando (f.eks.
du
for at hente mere detaljerede oplysninger om, hvilke filer der bruger diskpladsen i en mappe, kan du bruge du-kommandoen. Ville finde ud af, hvilken log der optager mest plads i mappen /var/log, kan du bruge du med indstillingen-h (menneskelig læsbar) og indstillingen-s for den samlede størrelse.
$ 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 afslører den største mappe under /var/log til at være /var/log/audit. Du kan bruge du sammen med df til at bestemme, hvad der bruger diskpladsen på din applikations vært.
id
for at kontrollere brugeren, der kører applikationen, skal du bruge id-kommandoen til at returnere brugeridentiteten. Eksemplet nedenfor bruger Vagrant til at teste applikationen og isolere dens udviklingsmiljø. Når du har logget ind i Vagrant-boksen, hvis du forsøger at installere Apache HTTP Server (en afhængighed), angiver systemet, at du ikke kan udføre kommandoen som root. For at kontrollere din bruger og gruppe skal du udstede id-kommandoen og bemærke, at du kører som “vagrant” – brugeren 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 at rette op på dette skal du køre kommandoen som en superbruger, som giver forhøjede privilegier.
chmod
når du kører din ansøgning binary for første gang på din vært, kan du modtage fejlmeddelelsen “tilladelse nægtet.”Som det ses i eksemplet for ls, kan du kontrollere tilladelserne til din ansøgning 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 eksekveringsrettigheder (ingen “H”) til at køre binær. chmod kan rette tilladelserne for at gøre det muligt for din bruger at kø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 opdaterer dette tilladelserne med eksekveringsrettigheder. Nu når du forsøger at udføre din binære, kaster applikationen ikke en tilladelsesnægtet fejl. Chmod kan være nyttigt, når du også lægger en binær i en container. Det sikrer, at din container har de korrekte tilladelser til at udføre din binære.
dig / nslookup
en domænenavnsserver (DNS) hjælper med at løse en URL til et sæt applikationsservere. Du kan dog opleve, at en URL ikke løser, hvilket forårsager et forbindelsesproblem for din applikation. Sig for eksempel, at du forsøger at få adgang til din database på MYDATABASE-URL ‘ en fra din applikations vært. I stedet modtager du en” kan ikke løse ” fejl. For at foretage fejlfinding skal du prøve at bruge dig (DNS lookup utility) eller nslookup (forespørgsel Internet navneservere) for at finde ud af, hvorfor applikationen ikke ser ud til at løse databasen.
$ nslookup mydatabase
Server: 10.0.2.3
Address: 10.0.2.3#53
** server can't find mydatabase: NXDOMAIN
brug af nslookup viser, at mydatabase ikke kan løses. Forsøger at løse med dig giver det 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 fejl kan være forårsaget af mange forskellige problemer. Hvis du ikke kan fejlsøge grundårsagen, skal du kontakte din sysadmin for mere undersøgelse. Til lokal test kan dette problem indikere, at din værts navneservere ikke er konfigureret korrekt. For at bruge disse kommandoer skal du installere BIND Utilities-pakken.
brandvæg-cmd
traditionelt blev brandvægge konfigureret på iptables-kommandoen, og mens den bevarer sin allestedsnærværende, er den faktisk stort set blevet erstattet af nftables. En venlig front-end for nftables, og den, der leveres med mange distributioner som standard, er brandvæg-cmd. Denne kommando hjælper dig med at oprette regler for, hvilken netværkstrafik, både udgående og indgående, din computer tillader. Disse regler kan grupperes i områder, så du hurtigt og nemt kan flytte fra et sæt regler til et andet, afhængigt af dine krav.
kommandosyntaksen er ligetil. Du bruger kommandoen og et antal muligheder, som alle er navngivet på måder, der hjælper dig med næsten at konstruere en menneskelig læsbar sætning. For eksempel for at se, hvilket område du er i øjeblikket:
$ sudo firewall-cmd --get-active-zones``
corp
interfaces: ens0
dmz
interfaces: ens1
i dette eksempel har din computer to netværksenheder, og den ene er tildelt corp
– området, mens den anden er tildelt dmz
– området.
for at se, hvad hvert område tillader, kan du bruge --list-all
indstillingen:
$ sudo firewall-cmd --zone corp --list-all
corp
target: default
interfaces: ens0
services: cockpit dhcpv6-client ssh
ports:
protocols:
tilføjelse af tjenester er lige så let:
$ sudo firewall-cmd --add-service http --permanent
$ sudo firewall-cmd --reload
det er designet til at være intuitivt, og det har en omfattende samling af foruddefinerede tjenester, plus evnen til at skrive NFT-regler direkte. Når du begynder at bruge
sestatus
du finder normalt, at Sestatus håndhæves på en applikationsvært, der administreres af en virksomhed.
$ 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
outputtet ovenfor angiver, at programmets vært er aktiveret. På din lokale udviklingsmiljø, kan du opdatere
historie
når du udsteder så mange kommandoer til test og fejlfinding, kan du glemme de nyttige! Hver skal har en variant af historikkommandoen. Det viser historien om kommandoer, du har udstedt siden starten af sessionen. Du kan bruge historik til at logge, hvilke kommandoer du brugte til fejlfinding af din applikation. For eksempel, når du udsteder historie i løbet af denne artikel, viser den de forskellige kommandoer, du eksperimenterede med og lærte.
$ history
1 clear
2 df -h
3 du
hvad hvis du vil udføre en kommando i din tidligere historie, men du ikke vil indtaste den igen? Brug ! før kommandonummeret skal udføres igen.
eksempel_historie.png
tilføjelse ! før det kommandonummer, du vil udføre, udsteder kommandoen igen.
grundlæggende kommandoer kan forbedre din fejlfindingskompetence, når du bestemmer, hvorfor din applikation fungerer i et udviklingsmiljø, men måske ikke i et andet. Mange sysadmins udnytter disse kommandoer til at fejle problemer med systemer. Forståelse af nogle af disse nyttige fejlfindingskommandoer kan hjælpe dig med at kommunikere med sysadmins og løse problemer med din applikation.
denne artikel blev oprindeligt offentliggjort i Juli 2017 og er blevet opdateret af redaktøren.