Linux-kommandon

Hur man använder Strace på Linux

Hur man använder Strace på Linux
När du arbetar med Linux-system måste du ofta inspektera och förstå de åtgärder som utförs av processer och systemanrop som utförs av deras körning.

När det gäller att utföra sådana uppgifter tillhandahåller Linux-kärnan funktioner som ptrace att felsöka och diagnostisera processer.

Den här artikeln diskuterar hur man använder strace-verktyget för att spåra, övervaka och felsöka processer som interagerar med kärnan.

Vad är systemsamtal?

Innan vi diskuterar hur man använder strace måste du förstå vad vi letar efter och hur de fungerar. Det betyder att vi ska gå igenom grunderna i Linux-systemanrop.

Ett systemanrop är en programmatisk metod genom vilken ett program kan begära en tjänst från systemets kärna. Det är den process vi kommer att använda för att inspektera åtgärderna mellan användarprocesser och Linux-kärnan.

När som helst en användare kör ett program som gör att man läser, skriver, dödar, avslutar, binder osv., begäran gör de ett systemanrop. Det finns ett brett utbud av systemanrop som används av program för att utföra olika uppgifter som nätverk, läsning och skrivning till filer, initialisering och avslutning av processer och mycket mer.

Tänk på systemanrop som funktioner - de beter sig på samma sätt - för att de kan acceptera argument och returnera värden. Huvudskillnaden mellan systemanrop och normal drift är att systemanrop kan interagera direkt med kärnan. Systemanrop använder en fällmekanism för att navigera mellan användarutrymme och kärnan.

I Linux-systemet är denna mekanism väl dold för användarna av bibliotek som Glibc.

NOTERA: Det finns mycket mer för systemanrop och kärninteraktioner än vad vi har diskuterat i den här handledningen. Se manualsidorna för mer information.

https: // linkfy.till / syscalls

https: // linkfy.till / trapmanual

Hur man installerar strace på Linux

Även om strace-verktyg inte förinstalleras som standard i större Linux-distributioner, är det tillgängligt i de flesta officiella arkiv för dessa distributioner; Du kan enkelt installera det med standardpakethanterare.

NOTERA: Även om vi inte kommer att täcka hur man installerar strace på alla system, kommer vi att diskutera hur man gör det med stora pakethanterare som apt, dnf, pacman och yum

1: Installation av Debian (apt)

Installera strace med kommandot:

apt-get install strace -y

2: RedHat Family (dnf och yum)

För att installera strace med yum-pakethanteraren anger du kommandot:

yum installera strace

För dnf-pakethanteraren anger du kommandot:

dnf installera strace

3: Arch Linux (pacman)

För Arch Linux-användare kan du installera strace med kommandot:

pacman -S strace

Nu när du har installerat och kört kan vi gå vidare och lära oss hur du använder

Grundläggande strace-användning: en guide

Låt oss diskutera grundläggande strace-användning och förstå den grundläggande utdata från kommandot och hur vi kan använda det.

NOTERA: Strace-utdata som systemanropsnamn, motsvarande argument och returvärden hanteras av standardfel-filbeskrivaren (stderr).

Det grundläggande sättet att använda strace är att ringa strace-verktyget följt av programmets namn, vars beteende vi vill förstå.

Här är ett exempel på det med kommandot ls:

Wow! Det är mycket output för ett enkelt kommando som ls.

Även om vi inte kan diskutera all produktion från strace-kommandot kan vi destillera och förstå dess innebörd.

Om du tänker på den första raden i utgången ovan kommer du att märka följande funktioner.

Därför, i första raden, är systemanropet exekverat (exekvera program med den angivna arrayen av argument), argumenten för systemanropet är (“/ bin / ls”, [“ls”, “/”], 0x7fffc4b277a8 / * 13 vars * /) och ett returvärde på 0.

https: // linkfy.att / exekvera

Execve-systemanropen exekverar det binära som vi vill använda, i det här fallet ligger i (/ bin / ls) och arrayen av argument är den sökväg vi vill visa innehåll.

Du kommer också att märka en notering med ett snedstreck framåt och en asterisk. För vårt exempel:

/ * 13 vars * /

Ovanstående output anger antalet variabler som läggs till som ett resultat av att anropa processen. Miljön inuti execv-funktionen nås genom att använda den externa miljövariabeln definierad som:

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

Den slutliga utgången är returvärdet, vilket är 0 i detta fall.

Du kommer också att märka att de flesta raderna i strace-utdata följer ett liknande mönster som vi diskuterade ovan.

Så här spårar du specifika systemanrop

Även om strace ger mycket information om programmets systemanrop, kommer de flesta fall att uppmana dig att filtrera specifika systemsamtal. För att göra detta skickar vi flaggan -e till strace-kommandot följt av namnet på det systemanrop vi behöver.

Vad sägs om att titta på det lästa systemet kräver kommandot ls. Till exempel:

strace -e läser ls

Du kommer att märka att detta endast visar endast lästa systemanrop.

Det lästa systemanropet accepterar tre argument: filbeskrivare, buffert och antalet byte. Systemanropet läser sedan upp till antalet byte från det skickade filbeskrivningsargumentet i bufferten.

https: // linkfy.till / lässkall

Sammanfattning av systemanrop

Med Strace kan vi också få en sammanfattning av systemanrop som görs av en process. Genom att skicka argumentet -c eller -summary-only kan vi få en utdata som den som visas nedan:

Kommandot filtrerar och ordnar utmatningen mer effektivt än den normala sträckutgången. För att få både sammanfattning och normal strace-utmatning, skicka argumentet -C.

Hur man använder Strace med löpande processer

Vid andra tillfällen behöver du ett spår av en pågående process. Fram till denna punkt har vi bara använt strace ett enda kommando. För att spåra en pågående process kan vi använda argumentet -p följt av Process ID (PID) -processen för att fästa strace till det.

Du kan få PID för en pågående process genom att använda topp- och grep-, ps-, htop-, pidof- eller andra systemövervakningsverktyg.

För att till exempel få PID för apache-processen kan vi använda:

ps -ax | grep -i apache2

Det borde ge dig PID för apache2-processen (PID 3514 i det här fallet), och vi kan använda den för att fästa den för att spåra.

Det ska visa en utdata som liknar den som visas nedan.

Strace spårar kontinuerligt den bifogade processen och visar utdata när den bifogade processen utför systemanrop. För att avsluta spårningen, tryck på CTRL + C, som kopplar bort processen från spåret.

Hur man sparar Strace-utdata till filer

Vi kan också omdirigera strace-utdata till en fil som ett argument. Med flaggan -o följt av filvägen som ett argument kan vi spara spårloggar.

Till exempel:

strace -p 3514 -o ~ / Desktop / apache_trace

När filen har sparats kan du senare övervaka och analysera den.

Slutsats

I den här guiden lärde vi oss hur man installerar och använder strace på Major Linux-distributioner. Nu när du förstår systemanrop och hur processer fungerar kan du använda strace för att övervaka och felsöka en pågående systemprocess som körs.

Begreppen som lärt sig i denna handledning är mycket användbara, främst för att du kan använda det du har lärt dig för att övervaka om någon manipulerar med systemprocesser.

SuperTuxKart för Linux
SuperTuxKart är en fantastisk titel som är utformad för att ge dig Mario Kart-upplevelsen gratis på ditt Linux-system. Det är ganska utmanande och rol...
Battle for Wesnoth Tutorial
Slaget om Wesnoth är ett av de mest populära open source-strategispel som du kan spela just nu. Det här spelet har inte bara utvecklats under mycket l...
0 A.D. Handledning
Av de många strategispelen där ute, 0 A.D. lyckas framstå som en omfattande titel och ett mycket djupt, taktiskt spel trots att det är öppen källkod. ...