Comandi Linux

Come usare Strace su Linux

Come usare Strace su Linux
Quando lavori con i sistemi Linux, dovrai spesso esaminare e comprendere le azioni eseguite dai processi e le chiamate di sistema eseguite dalla loro esecuzione.

Quando si tratta di eseguire tali attività, il kernel Linux offre funzionalità come traccia per eseguire il debug e diagnosticare i processi.

Questo articolo discute come utilizzare lo strumento strace per tracciare, monitorare ed eseguire il debug dei processi che interagiscono con il kernel.

Cosa sono le chiamate di sistema??

Prima di discutere su come usare strace, devi capire cosa stiamo cercando e come funzionano. Ciò significa che dovrei ripassare le basi delle chiamate di sistema Linux.

Una chiamata di sistema è un metodo programmatico attraverso il quale un programma può richiedere un servizio dal Kernel del sistema. Questo è il processo che useremo per ispezionare le azioni tra i processi utente e il kernel Linux.

Ogni volta che un utente esegue un programma che esegue operazioni di lettura, scrittura, kill, exit, bind, ecc., richiesta, stanno effettuando una chiamata di sistema. Esiste un'ampia gamma di chiamate di sistema utilizzate dai programmi per eseguire varie attività come networking, lettura e scrittura su file, inizializzazione e chiusura di processi e molto altro.

Pensa alle chiamate di sistema come funzioni: si comportano in modo simile perché possono accettare argomenti e restituire valori. La principale differenza tra le chiamate di sistema e il normale funzionamento è che le chiamate di sistema possono interagire direttamente con il kernel. Le chiamate di sistema usano a meccanismo di trappola per navigare tra lo spazio utente e il kernel.

Nel sistema Linux, questo meccanismo è ben nascosto agli utenti da librerie come Glibc.

NOTA: C'è molto di più nelle chiamate di sistema e nelle interazioni del kernel rispetto a quello che abbiamo discusso in questo tutorial. Si prega di fare riferimento alle pagine del manuale per ulteriori informazioni.

https://linkfy.a/syscalls

https://linkfy.a/trapmanual

Come installare strace su Linux

Sebbene gli strumenti strace non siano preinstallati di default nelle principali distribuzioni Linux, sono disponibili nella maggior parte dei repository ufficiali di queste distribuzioni; puoi installarlo facilmente usando i gestori di pacchetti predefiniti.

NOTA: Sebbene non tratteremo come installare strace su tutti i sistemi, discuteremo come farlo con i principali gestori di pacchetti come apt, dnf, pacman e yum

1: installazione di Debian (apt)

Installa strace usando il comando:

apt-get install strace -y

2: Famiglia RedHat (dnf e yum)

Per installare strace usando il gestore di pacchetti yum, inserisci il comando:

yum installa strace

Per il gestore di pacchetti dnf, inserisci il comando:

dnf install strace

3: Arch Linux (pacman)

Per gli utenti di Arch Linux, puoi installare strace con il comando:

pacman -S strace

Ora che hai strace installato e funzionante, possiamo andare avanti e imparare come usare

Utilizzo di base di Strace: una guida pratica

Discutiamo l'utilizzo di base di strace e comprendiamo l'output di base del comando e come possiamo usarlo.

NOTA: L'output di Strace come i nomi delle chiamate di sistema, gli argomenti corrispondenti e i valori restituiti vengono gestiti da il descrittore di file di errore standard (stderr).

Il modo di base per usare strace è chiamare l'utilità strace seguita dal nome del programma, di cui vogliamo capire il comportamento.

Ecco un esempio di ciò usando il comando ls:

Wow! Questo è un sacco di output per un semplice comando come ls.

Sebbene non possiamo discutere tutto l'output del comando strace, possiamo distillare e comprenderne il significato.

Se consideri la prima riga nell'output sopra, noterai le seguenti caratteristiche.

Quindi, nella prima riga, la chiamata di sistema è execve (esegue il programma utilizzando l'array di argomenti specificato), gli argomenti della chiamata di sistema sono ("/bin/ls", ["ls", "/"], 0x7fffc4b277a8 / * 13 var */) e un valore restituito di 0.

https://linkfy.per/eseguire

Le chiamate di sistema execve eseguono il binario che vogliamo usare, in questo caso, situato in (/bin/ls) e l'array di argomenti è il percorso in cui vogliamo elencare i contenuti.

Noterai anche una notazione racchiusa tra una barra e un asterisco. Per il nostro esempio:

/* 13 variabili */

L'output sopra indica il numero di variabili aggiunte come risultato della chiamata al processo. Si accede all'ambiente all'interno della funzione execv utilizzando la variabile esterna environ definita come:

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

L'output finale è il valore restituito, che in questo caso è 0.

Noterai anche che la maggior parte delle righe dell'output di strace segue uno schema simile che abbiamo discusso sopra.

Come tracciare chiamate di sistema specifiche

Sebbene strace fornisca molte informazioni sulle chiamate di sistema dei programmi, la maggior parte delle istanze ti chiederà di filtrare specifiche chiamate di sistema. Per fare ciò, passiamo il flag -e al comando strace seguito dal nome della chiamata di sistema di cui abbiamo bisogno.

Che ne dici di guardare le chiamate di sistema lette per il comando ls?. Per esempio:

strace -e leggi ls

Noterai che questo mostra solo le chiamate di sistema lette.

La chiamata di sistema read accetta tre argomenti: descrittore di file, buffer e numero di byte. La chiamata di sistema quindi legge fino al conteggio dei byte dall'argomento del descrittore di file passato nel buffer.

https://linkfy.to/readsyscall

Riepilogo delle chiamate di sistema

Strace ci consente anche di ottenere un riepilogo delle chiamate di sistema effettuate da un processo. Passando l'argomento -c o -summary-only, possiamo ottenere un output come quello mostrato di seguito:

Il comando filtra e organizza l'output in modo più efficiente rispetto al normale output strace. Per ottenere sia l'output di riepilogo che di strace normale, passare l'argomento -C.

Come usare Strace con i processi in esecuzione

Altre volte, avrai bisogno di una traccia di un processo in esecuzione. Fino a questo punto, abbiamo usato strace solo un singolo comando. Per tracciare un processo in esecuzione, possiamo usare l'argomento -p seguito dal processo Process ID (PID) per allegare strace ad esso.

Puoi ottenere il PID di un processo in esecuzione utilizzando top e grep, ps, htop, pidof o altri strumenti di monitoraggio del sistema.

Ad esempio, per ottenere il PID del processo apache, possiamo usare:

ps -ax | grep -i apache2

Questo dovrebbe darti il ​​PID del processo apache2 (PID 3514 in questo caso) e possiamo usarlo per collegarlo a strace.

Dovrebbe visualizzare un output simile a quello mostrato di seguito.

Strace traccerà continuamente il processo collegato e mostrerà l'output mentre il processo collegato esegue le chiamate di sistema. Per terminare la traccia, premere CTRL + C, che stacca il processo dalla strace.

Come salvare l'output di Strace su file

Possiamo anche reindirizzare l'output di strace su un file come argomento. Usando il flag -o seguito dal percorso del file come argomento, possiamo salvare i log strace.

Per esempio:

strace -p 3514 -o ~/Desktop/apache_trace

Una volta salvato il file, puoi monitorarlo e analizzarlo in seguito.

Conclusione

In questa guida, abbiamo imparato come installare e utilizzare strace sulle principali distribuzioni Linux. Ora che hai compreso le chiamate di sistema e il funzionamento dei processi, puoi utilizzare strace per monitorare ed eseguire il debug di un processo di sistema in esecuzione.

I concetti appresi in questo tutorial sono molto utili, principalmente perché puoi utilizzare ciò che hai imparato per monitorare se qualcuno sta manomettendo i processi di sistema.

Come sviluppare un gioco su Linux
Un decennio fa, non molti utenti Linux avrebbero previsto che il loro sistema operativo preferito un giorno sarebbe diventato una piattaforma di gioco...
Porte open source di motori di gioco commerciali
Ricreazioni del motore di gioco gratuite, open source e multipiattaforma possono essere utilizzate per riprodurre titoli di giochi vecchi e abbastanza...
I migliori giochi da riga di comando per Linux
La riga di comando non è solo il tuo più grande alleato quando usi Linux, ma può anche essere una fonte di intrattenimento perché puoi usarla per gioc...