Linux-kommandoer

Sådan bruges Strace på Linux

Sådan bruges Strace på Linux
Når du arbejder med Linux-systemer, skal du ofte inspicere og forstå de handlinger, der udføres af processer, og systemopkaldene, der udføres af deres udførelse.

Når det kommer til at udføre sådanne opgaver, indeholder Linux-kernen funktioner som f.eks ptrace at debugge og diagnosticere processer.

Denne artikel diskuterer, hvordan man bruger strace-værktøjet til at spore, overvåge og fejle processer, der interagerer med kernen.

Hvad er systemopkald?

Før vi diskuterer, hvordan vi bruger strace, skal du forstå, hvad vi leder efter, og hvordan de fungerer. Det betyder, at vi skal gå over det grundlæggende i Linux-systemopkald.

Et systemopkald er en programmatisk metode, hvorigennem et program kan anmode om en tjeneste fra systemets kerne. Det er den proces, vi vil bruge til at inspicere handlingerne mellem brugerprocesser og Linux-kernen.

Når som helst en bruger udfører et program, der gør læsning, skrivning, dræbning, afslutning, binding osv., anmodning, foretager de et systemopkald. Der er en bred vifte af systemopkald, der bruges af programmer til at udføre forskellige opgaver såsom netværk, læsning og skrivning til filer, initialisering og afslutning af processer og meget mere.

Tænk på systemopkald som funktioner - de opfører sig på samme måde - fordi de kan acceptere argumenter og returnere værdier. Den største forskel mellem systemopkald og normal drift er, at systemopkald kan interagere direkte med kernen. Systemopkald bruger en fældemekanisme for at navigere mellem brugerrummet og kernen.

I Linux-systemet er denne mekanisme godt skjult for brugerne af biblioteker som Glibc.

BEMÆRK: Der er meget mere til systemopkald og kerneinteraktioner end hvad vi har diskuteret i denne vejledning. Se manualsiderne for mere information.

https: // linkfy.til / syscalls

https: // linkfy.til / trapmanual

Sådan installeres strace på Linux

Selvom strace-værktøjer ikke er forudinstalleret som standard i større Linux-distributioner, er de tilgængelige i de fleste officielle opbevaringssteder for disse distributioner; du kan nemt installere det ved hjælp af standardpakkeadministratorer.

BEMÆRK: Selvom vi ikke dækker, hvordan man installerer strace på alle systemer, vil vi diskutere, hvordan man gør det med større pakkehåndtering som apt, dnf, pacman og yum

1: Installation af Debian (apt)

Installer strace ved hjælp af kommandoen:

apt-get install strace -y

2: RedHat-familie (dnf og yum)

For at installere strace ved hjælp af yum pakkehåndtering skal du indtaste kommandoen:

yum installere strace

For dnf pakkehåndtering skal du indtaste kommandoen:

dnf installere strace

3: Arch Linux (pacman)

For Arch Linux-brugere kan du installere strace med kommandoen:

pacman -S strace

Nu hvor du har installeret og kører, kan vi gå videre og lære at bruge

Grundlæggende Strace-brug: En vejledning

Lad os diskutere grundlæggende strace-brug og forstå den grundlæggende output af kommandoen, og hvordan vi kan bruge den.

BEMÆRK: Strace-output såsom systemopkaldsnavne, tilsvarende argumenter og returværdier bliver håndteret af standardfejlfilbeskrivelsen (stderr).

Den grundlæggende måde at bruge strace er ved at kalde strace-hjælpeprogrammet efterfulgt af programmets navn, hvis opførsel vi vil forstå.

Her er et eksempel på det ved hjælp af kommandoen ls:

Wow! Det er meget output til en simpel kommando som ls.

Selvom vi ikke kan diskutere al output fra strace-kommandoen, kan vi destillere og forstå dens betydning.

Hvis du overvejer den første linje i output ovenfor, vil du bemærke følgende funktioner.

Derfor, i første linje, udføres systemopkaldet (udfør program ved hjælp af det angivne array af argumenter), systemopkaldets argumenter er (“/ bin / ls”, [“ls”, “/”], 0x7fffc4b277a8 / * 13 vars * /) og en returværdi på 0.

https: // linkfy.at / udføre

Execve-systemopkaldene udfører den binære, vi vil bruge, i dette tilfælde placeret i (/ bin / ls), og argumenterne er den sti, vi vil vise indhold.

Du vil også bemærke en notation vedlagt en skråstreg fremad og en stjerne. For vores eksempel:

/ * 13 vars * /

Ovenstående output angiver antallet af tilføjede variabler som et resultat af opkald til processen. Miljøet inde i execv-funktionen tilgås ved hjælp af den eksterne miljøvariabel defineret som:

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

Den endelige output er returværdien, som i dette tilfælde er 0.

Du vil også bemærke, at de fleste linjer i strace-output følger et lignende mønster, som vi diskuterede ovenfor.

Sådan spores specifikke systemopkald

Selvom strace giver en masse information om programmer systemopkald, vil de fleste tilfælde opfordre dig til at filtrere specifikke systemopkald. For at gøre dette sender vi -e-flag til strace-kommandoen efterfulgt af navnet på det systemopkald, vi har brug for.

Hvad med at se på det læste systemopkald til ls-kommandoen. For eksempel:

strace -e læse ls

Du vil bemærke, at dette kun viser kun læst systemopkald.

Det læste systemopkald accepterer tre argumenter: filbeskrivelse, buffer og antallet af byte. Systemopkaldet læser derefter op til optællingsbyte fra det bestemte filbeskrivelsesargument i bufferen.

https: // linkfy.til / readyscall

Oversigt over systemopkald

Strace giver os også mulighed for at få et resumé af systemopkald foretaget af en proces. Ved at videregive argumentet -c eller -summary-only kan vi få en output som den vist nedenfor:

Kommandoen filtrerer og arrangerer output mere effektivt end den normale strace-output. For at få både resumé og normal strace output skal du videregive argumentet -C.

Sådan bruges Strace med kørende processer

På andre tidspunkter har du brug for et spor af en kørende proces. Indtil dette tidspunkt har vi kun brugt strace en enkelt kommando. For at spore en kørende proces kan vi bruge -p-argumentet efterfulgt af Process ID (PID) -processen til at knytte strace til det.

Du kan få PID for en kørende proces ved hjælp af top- og grep-, ps-, htop-, pidof- eller andre systemovervågningsværktøjer.

For eksempel for at få PID for apache-processen kan vi bruge:

ps -ax | grep -i apache2

Det skulle give dig PID for apache2-processen (PID 3514 i dette tilfælde), og vi kan bruge den til at vedhæfte den for at strække.

Det skal vise en output svarende til den, der er vist nedenfor.

Strace sporer kontinuerligt den vedhæftede proces og viser output, når den vedhæftede proces udfører systemopkald. For at afslutte sporet skal du trykke på CTRL + C, som frigør processen fra sporet.

Sådan gemmes Strace-output til filer

Vi kan også omdirigere output af strace til en fil som et argument. Ved hjælp af -o-flaget efterfulgt af filstien som et argument kan vi gemme trace-logfiler.

For eksempel:

strace -p 3514 -o ~ / Desktop / apache_trace

Når filen er gemt, kan du senere overvåge og analysere den.

Konklusion

I denne vejledning lærte vi, hvordan man installerer og bruger strace på Major Linux-distributioner. Nu hvor du forstår systemopkald, og hvordan processer fungerer, kan du bruge strace til at overvåge og debugge en kørende systemproces, der kører.

Begreberne lært i denne vejledning er meget nyttige, hovedsageligt fordi du kan bruge det, du har lært til at overvåge, hvis nogen manipulerer med systemprocesser.

Bedste apps til Gamepad Mapping til Linux
Hvis du kan lide at spille spil på Linux med en gamepad i stedet for et typisk tastatur- og musesystem, er der nogle nyttige apps til dig. Mange pc-sp...
Nyttige værktøjer til Linux-spillere
Hvis du kan lide at spille spil på Linux, er chancerne for, at du måske har brugt apps og hjælpeprogrammer som Wine, Lutris og OBS Studio for at forbe...
HD Remastered-spil til Linux, der aldrig tidligere havde haft en Linux-udgivelse
Mange spiludviklere og udgivere kommer med HD-remaster af gamle spil for at forlænge franchisens levetid. Venligst fans, der anmoder om kompatibilitet...