Comenzi Linux

Cum se folosește Strace pe Linux

Cum se folosește Strace pe Linux
Când lucrați cu sisteme Linux, va trebui adesea să inspectați și să înțelegeți acțiunile efectuate de procese și apelurile de sistem efectuate prin executarea lor.

Când vine vorba de efectuarea unor astfel de sarcini, nucleul Linux oferă caracteristici precum ptrace pentru depanarea și diagnosticarea proceselor.

Acest articol discută despre cum să utilizați instrumentul strace pentru a urmări, monitoriza și depana procesele care interacționează cu Kernel.

Ce sunt apelurile de sistem?

Înainte de a discuta cum să folosim strace, trebuie să înțelegeți ce căutăm și cum funcționează acestea. Asta înseamnă că ar trebui să trecem peste elementele de bază ale apelurilor de sistem Linux.

Un apel de sistem este o metodă programatică prin care un program poate solicita un serviciu de la Kernel-ul sistemului. Acesta este procesul pe care îl vom folosi pentru a inspecta acțiunile dintre procesele utilizatorului și nucleul Linux.

Ori de câte ori un utilizator execută un program care face citire, scriere, ucidere, ieșire, legare etc., solicită, ei fac un apel de sistem. Există o gamă largă de apeluri de sistem utilizate de programe pentru a efectua diverse sarcini, cum ar fi rețeaua, citirea și scrierea în fișiere, inițializarea și terminarea proceselor și multe altele.

Gândiți-vă la apelurile de sistem ca la funcții - se comportă similar - pentru că pot accepta argumente și pot întoarce valori. Principala diferență între apelurile de sistem și funcționarea normală este că apelurile de sistem pot interacționa direct cu nucleul. Apelurile de sistem utilizează un mecanism de capcană pentru a naviga între spațiul utilizatorului și Kernel.

În sistemul Linux, acest mecanism este bine ascuns de utilizatori de biblioteci precum Glibc.

NOTĂ: Există mult mai multe apeluri de sistem și interacțiuni cu nucleul decât ceea ce am discutat în acest tutorial. Vă rugăm să consultați paginile manualului pentru mai multe informații.

https: // linkfy.către / syscalls

https: // linkfy.către / trapmanual

Cum se instalează strace pe Linux

Deși instrumentele strace nu vin preinstalate în mod implicit în distribuțiile Linux principale, acestea sunt disponibile în majoritatea depozitelor oficiale ale acestor distribuții; îl puteți instala cu ușurință utilizând gestionarii de pachete implicite.

NOTĂ: Deși nu vom acoperi cum se instalează strace pe toate sistemele, vom discuta despre cum să facem acest lucru cu principalii manageri de pachete, cum ar fi apt, dnf, pacman și yum

1: Instalare Debian (apt)

Instalați strace folosind comanda:

apt-get install strace -y

2: Familia RedHat (dnf și yum)

Pentru a instala strace folosind managerul de pachete yum, introduceți comanda:

yum instala strace

Pentru managerul de pachete dnf, introduceți comanda:

dnf install strace

3: Arch Linux (pacman)

Pentru utilizatorii Arch Linux, puteți instala strace cu comanda:

pacman -S strace

Acum că aveți strace instalat și rulat, putem continua și învăța cum să îl utilizați

Utilizarea de bază a straturii: un ghid de utilizare

Să discutăm despre utilizarea de bază a stracelor și să înțelegem rezultatul de bază al comenzii și cum o putem folosi.

NOTĂ: Ieșirea Strace, cum ar fi numele apelurilor de sistem, argumentele corespunzătoare și valorile returnate, sunt gestionate de descriptorul fișierului de eroare standard (stderr).

Modul de bază de a utiliza strace este apelând utilitarul strace urmat de numele programului, al cărui comportament dorim să-l înțelegem.

Iată un exemplu care folosește comanda ls:

Wow! Aceasta este o mulțime de rezultate pentru o comandă simplă, cum ar fi ls.

Deși nu putem discuta toate rezultatele din comanda strace, putem distila și înțelege semnificația acesteia.

Dacă luați în considerare prima linie din ieșirea de mai sus, veți observa următoarele caracteristici.

Prin urmare, în prima linie, apelul de sistem este execve (executați programul utilizând matricea specificată de argumente), argumentele apelului de sistem sunt („/ bin / ls”, [„ls”, „/”], 0x7fffc4b277a8 / * 13 vars * /) și o valoare returnată de 0.

https: // linkfy.la / execve

Apelurile de sistem execve execută binarul pe care dorim să îl folosim, în acest caz, situat în (/ bin / ls) și matricea de argumente fiind calea pe care dorim să o listăm.

Veți observa, de asemenea, o notație atașată cu o bară directă și un asterisc. Pentru exemplul nostru:

/ * 13 vars * /

Ieșirea de mai sus indică numărul de variabile adăugate ca urmare a apelării procesului. Mediul din interiorul funcției execv este accesat utilizând variabila externă de mediu definită ca:

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

Ieșirea finală este valoarea returnată, care este 0 în acest caz.

Veți observa, de asemenea, că majoritatea liniilor de ieșire strace urmează un model similar pe care l-am discutat mai sus.

Cum să urmăriți apelurile specifice de sistem

Deși strace oferă o mulțime de informații cu privire la programele de apeluri de sistem, majoritatea cazurilor vă vor apela pentru a filtra anumite apeluri de sistem. Pentru a face acest lucru, trecem semnalul -e la comanda strace urmată de numele apelului de sistem de care avem nevoie.

Ce zici să te uiți la apelurile sistemului citit pentru comanda ls. De exemplu:

strace -e citește ls

Veți observa că acesta afișează numai apelurile de sistem citite.

Apelul de sistem citit acceptă trei argumente: descriptor de fișier, tampon și numărul de octeți. Apelul de sistem citește apoi până la numărul de octeți din argumentul descriptor de fișiere trecut în buffer.

https: // linkfy.către / readsyscall

Rezumatul apelurilor de sistem

Strace ne permite, de asemenea, să obținem un rezumat al apelurilor de sistem efectuate de un proces. Trecând argumentul -c sau -summary-only, putem obține o ieșire precum cea prezentată mai jos:

Comanda filtrează și aranjează ieșirea mai eficient decât ieșirea strace normală. Pentru a obține atât rezumatul, cât și ieșirea strace normală, treceți argumentul -C.

Cum se folosește Strace cu procesele de rulare

Alteori, veți avea nevoie de urmele unui proces care rulează. Până în acest moment, am folosit doar o singură comandă strace. Pentru a urmări un proces în execuție, putem folosi argumentul -p urmat de procesul Process ID (PID) pentru a atașa strace la acesta.

Puteți obține PID-ul unui proces în execuție utilizând topul și grep, ps, htop, pidof sau alte instrumente de monitorizare a sistemului.

De exemplu, pentru a obține PID-ul procesului apache, putem folosi:

ps -ax | grep -i apache2

Aceasta ar trebui să vă ofere PID-ul procesului apache2 (PID 3514 în acest caz) și îl putem folosi pentru a-l atașa la strace.

Aceasta ar trebui să afișeze o ieșire similară cu cea prezentată mai jos.

Strace va urmări continuu procesul atașat și va afișa ieșirea pe măsură ce procesul atașat execută apeluri de sistem. Pentru a termina urmărirea, apăsați CTRL + C, care detașează procesul de stradă.

Cum se salvează ieșirea Strace în fișiere

De asemenea, putem redirecționa ieșirea strace către un fișier ca argument. Folosind steagul -o urmat de calea fișierului ca argument, putem salva jurnale strace.

De exemplu:

strace -p 3514 -o ~ / Desktop / apache_trace

Odată ce fișierul este salvat, îl puteți monitoriza și analiza ulterior.

Concluzie

În acest ghid, am învățat cum să instalăm și să folosim strace pe distribuțiile majore Linux. Acum că înțelegeți apelurile de sistem și cum funcționează procesele, puteți utiliza strace pentru a monitoriza și a depana un proces de sistem care rulează.

Conceptele învățate în acest tutorial sunt foarte utile, în principal pentru că puteți utiliza ceea ce ați învățat pentru a monitoriza dacă cineva manipulează procesele de sistem.

Instalați cel mai recent joc de strategie OpenRA pe Ubuntu Linux
OpenRA este un motor de jocuri de strategie în timp real Libre / Free care recreează primele jocuri Westwood, cum ar fi clasicul Command & Conquer: Re...
Instalați cel mai recent Dolphin Emulator pentru Gamecube și Wii pe Linux
Emulatorul Dolphin vă permite să jucați jocurile alese de Gamecube și Wii pe computerele personale Linux (PC). Fiind un emulator de joc liber disponi...
Cum se folosește GameConqueror Cheat Engine în Linux
Articolul acoperă un ghid despre utilizarea sistemului de înșelăciune GameConqueror în Linux. Mulți utilizatori care joacă jocuri pe Windows folosesc ...