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 -y2: RedHat Family (dnf och yum)
För att installera strace med yum-pakethanteraren anger du kommandot:
yum installera straceFör dnf-pakethanteraren anger du kommandot:
dnf installera strace3: Arch Linux (pacman)
För Arch Linux-användare kan du installera strace med kommandot:
pacman -S straceNu 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.
- Namnet på systemanropet
- Argumenten som skickas till systemanropet inom parentes.
- Returvärdet från systemanropet
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 apache2Det 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_traceNä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.