Hvordan bruke Strace på Linux

Hvordan bruke Strace på Linux
Når du jobber med Linux -systemer, må du ofte inspisere og forstå handlingene som utføres av prosesser, og systemanropene som utføres ved utførelsen.

Når det gjelder å utføre slike oppgaver, gir Linux -kjernen funksjoner som PTRACE for å feilsøke og diagnostisere prosesser.

Denne artikkelen diskuterer hvordan du bruker Strace Tool for å spore, overvåke og feilsøke prosesser som samhandler med kjernen.

Hva er systemanrop?

Før vi diskuterer hvordan du bruker Strace, må du forstå hva vi leter etter og hvordan de fungerer. Det betyr at vi bør gå over det grunnleggende i Linux -systemanropene.

En systemanrop er en programmatisk metode som et program kan be om en tjeneste fra systemets kjerne. Det er prosessen vi vil bruke for å inspisere handlingene mellom brukerprosesser og Linux -kjernen.

Når som helst en bruker utfører et program som lager en lesing, skriver, dreper, går ut, binder osv., forespørsel, de ringer en systemanrop. Det er et bredt spekter av systemanrop som brukes av programmer for å utføre forskjellige oppgaver som nettverk, lese og skrive til filer, initialisere og avslutte prosesser, og mye mer.

Tenk på systemanrop som funksjoner-de oppfører seg lignende fordi de kan akseptere argumenter og returnere verdier. Hovedforskjellen mellom systemanrop og normal drift er at systemanrop direkte kan samhandle med kjernen. Systemanrop Bruk en fellemekanisme for å navigere mellom brukerområdet og kjernen.

I Linux -systemet er denne mekanismen godt skjult for brukerne av biblioteker som GLIBC.

MERK: Det er mye mer med systemanrop og kjerneinteraksjoner enn det vi har diskutert i denne opplæringen. Vennligst referer til de manuelle sidene for mer informasjon.

https: // linkfy.til/syscalls

https: // linkfy.til/trapmanual

Hvordan installere Strace på Linux

Selv om Strace-verktøy ikke kommer forhåndsinstallert som standard i større Linux-distribusjoner, er det tilgjengelig i de fleste offisielle depoter av disse distribusjonene; Du kan installere det enkelt ved å bruke standardpakkeledere.

MERK: Selv om vi ikke vil dekke hvordan du installerer Strace på alle systemer, vil vi diskutere hvordan du gjør det med store pakkeledere som APT, DNF, Pacman og Yum

1: Debian (APT) installasjon

Installer Strace ved hjelp av kommandoen:

apt -get install Strace -y

2: Redhat Family (DNF og Yum)

For å installere Strace ved hjelp av Yum Package Manager, skriv inn kommandoen:

Yum installer Strace

For DNF -pakkebehandler, skriv inn kommandoen:

DNF installer Strace

3: Arch Linux (Pacman)

For Arch Linux -brukere kan du installere Strace med kommandoen:

Pacman -S Strace

Nå som du har installert og kjører, kan vi gå videre og lære å bruke

Basic Strace Bruk: En how-to-guide

La oss diskutere grunnleggende bruksbruk og forstå den grunnleggende utgangen til kommandoen og hvordan vi kan bruke den.

MERK: Strace output som systemanrop navn, tilsvarende argumenter og returverdier blir håndtert av standard feilfilbeskrivelsen (STDERR).

Den grunnleggende måten å bruke Strace på er ved å kalle Strace -verktøyet etterfulgt av programmets navn, hvis oppførsel vi ønsker å forstå.

Her er et eksempel på det ved å bruke LS -kommandoen:

Wow! Det er mye output for en enkel kommando som LS.

Selv om vi ikke kan diskutere all output fra Strace -kommandoen, kan vi destillere og forstå dens betydning.

Hvis du vurderer den første linjen i utdataene ovenfor, vil du legge merke til følgende funksjoner.

  • Navnet på systemanropet
  • Argumentene ble gitt til systemanropet vedlagt i parentes.
  • Returverdien fra systemanropet

I den første linjen er systemanropet Execve (Execute -programmet ved hjelp av den spesifiserte rekke argumenter), argumentene til systemanropet er (“/bin/ls”, [“ls”, “/”], 0x7fffc4b277a8/ * 13 vars */) og en returverdi på 0.

https: // linkfy.å/utføre

Execve -systemet ringer utfører det binære vi ønsker å bruke, i dette tilfellet, som ligger i (/bin/ls) og utvalget av argumenter er banen vi ønsker å liste innholdet.

Du vil også legge merke til en notasjon vedlagt en fremover skråstrek og en stjerne. For vårt eksempel:

/ * 13 vars */

Ovennevnte utgang indikerer antall variabler lagt til som et resultat av å ringe prosessen. Miljøet i EXECV -funksjonen får tilgang til ved å bruke Environ External Variable definert som:

int main (int argc, char *argv [], char *envp [])

Den endelige utgangen er returverdien, som er 0 i dette tilfellet.

Du vil også merke at de fleste linjer i Strace -utgangen følger et lignende mønster vi diskuterte ovenfor.

Hvordan spore spesifikke systemanrop

Selv om Strace gir mye informasjon angående programsanrop, vil de fleste forekomster be deg om å filtrere spesifikke systemanrop. For å gjøre dette, passerer vi -e -flagget til Strace -kommandoen etterfulgt av navnet på systemanropet vi trenger.

Hva med å se på lesesystemet krever LS -kommandoen. For eksempel:

Strace -e Les LS

Du vil legge merke til at dette bare viser bare leste systemanrop.

Lesesystemanropet godtar tre argumenter: filbeskrivende, buffer og antall byte. Systemanropet leser deretter opp til grevbyte fra det vedtatte filbeskrivelsesargumentet inn i bufferen.

https: // linkfy.til/readsyscall

Sammendrag av systemanrop

Strace lar oss også få et sammendrag av systemanropene som er laget av en prosess. Ved å passere -c eller -summary -bare argumentet, kan vi få en utdata som den som er vist nedenfor:

Kommandoen filtrerer og ordner utgangen mer effektivt enn den normale Strace -utgangen. For å få både sammendrag og normal strace output, pass -c -argumentet.

Hvordan bruke Strace med løpeprosesser

Andre ganger trenger du et spor av en løpsprosess. Frem til dette punktet har vi bare brukt Strace en enkelt kommando. For å spore en løpsprosess, kan vi bruke -p -argumentet etterfulgt av prosess -ID (PID) -prosessen for å knytte Strace til den.

Du kan få PID i en løpsprosess ved å bruke topp- og grep, PS, HTOP, PIDOF eller andre systemovervåkningsverktøy.

For å få PID i Apache -prosessen kan vi for eksempel bruke:

PS -AX | grep -i apache2

Det skal gi deg PID i Apache2 -prosessen (PID 3514 i dette tilfellet), og vi kan bruke den til å knytte den til å strake.

Som skal vise en utgang som ligner den som er vist nedenfor.

Strace vil kontinuerlig spore den vedlagte prosessen og vise utdata når den vedlagte prosessen utfører systemanrop. For å avslutte sporet, trykk CTRL + C, som løsner prosessen fra Strace.

Hvordan lagre Strace -utgangen på filer

Vi kan også omdirigere utdataene fra Strace til en fil som et argument. Ved å bruke -o -flagget etterfulgt av filstien som et argument, kan vi lagre Strace -logger.

For eksempel:

Strace -P 3514 -O ~/Desktop/Apache_Trace

Når filen er lagret, kan du senere overvåke og analysere den.

Konklusjon

I denne guiden lærte vi å installere og bruke Strace på større Linux -distribusjoner. Nå som du forstår systemanrop og hvordan prosesser fungerer, kan du bruke Strace til å overvåke og feilsøke en kjørende systemprosess som kjører.

Konseptene som læres i denne opplæringen er veldig nyttige, hovedsakelig fordi du kan bruke det du har lært å overvåke hvis noen tukler med systemprosesser.