Linux-Befehle

So verwenden Sie Strace unter Linux

So verwenden Sie Strace unter Linux
Wenn Sie mit Linux-Systemen arbeiten, müssen Sie häufig die von Prozessen ausgeführten Aktionen und die von ihrer Ausführung ausgeführten Systemaufrufe überprüfen und verstehen.

Um solche Aufgaben auszuführen, bietet der Linux-Kernel Funktionen wie ptrace um Prozesse zu debuggen und zu diagnostizieren.

In diesem Artikel wird beschrieben, wie Sie das strace-Tool verwenden, um Prozesse zu verfolgen, zu überwachen und zu debuggen, die mit dem Kernel interagieren.

Was sind Systemaufrufe?

Bevor wir die Verwendung von strace besprechen, müssen Sie verstehen, wonach wir suchen und wie sie funktionieren. Das heißt, wir sollten die Grundlagen der Linux-Systemaufrufe durchgehen.

Ein Systemaufruf ist eine programmatische Methode, durch die ein Programm einen Dienst vom Kernel des Systems anfordern kann. Das ist der Prozess, den wir verwenden werden, um die Aktionen zwischen Benutzerprozessen und dem Linux-Kernel zu überprüfen.

Jedes Mal, wenn ein Benutzer ein Programm ausführt, das ein Lesen, Schreiben, Töten, Beenden, Binden usw., Anfrage machen sie einen Systemaufruf. Es gibt eine Vielzahl von Systemaufrufen, die von Programmen verwendet werden, um verschiedene Aufgaben wie Netzwerken, Lesen und Schreiben in Dateien, Initialisieren und Beenden von Prozessen und vieles mehr auszuführen.

Stellen Sie sich Systemaufrufe als Funktionen vor – sie verhalten sich ähnlich – weil sie Argumente und Rückgabewerte akzeptieren können. Der Hauptunterschied zwischen Systemaufrufen und dem normalen Betrieb besteht darin, dass Systemaufrufe direkt mit dem Kernel interagieren können. Systemaufrufe verwenden a Fallenmechanismus um zwischen Userspace und Kernel zu navigieren.

Im Linux-System ist dieser Mechanismus durch Bibliotheken wie Glibc . vor den Benutzern gut verborgen.

HINWEIS: Es gibt viel mehr zu Systemaufrufen und Kernel-Interaktionen, als wir in diesem Tutorial besprochen haben. Weitere Informationen finden Sie auf den Handbuchseiten.

https://linkfy.an/syscalls

https://linkfy.to/trapmanual

So installieren Sie strace unter Linux

Obwohl strace-Tools in den wichtigsten Linux-Distributionen nicht standardmäßig vorinstalliert sind, ist es in den meisten offiziellen Repositorys dieser Distributionen verfügbar; Sie können es einfach mit Standardpaketmanagern installieren install.

HINWEIS: Obwohl wir nicht darauf eingehen, wie strace auf allen Systemen installiert wird, besprechen wir dies mit wichtigen Paketmanagern wie apt, dnf, pacman und yum

1: Debian (apt)-Installation

Installieren Sie strace mit dem Befehl:

apt-get install strace -y

2: RedHat-Familie (dnf und lecker)

Um strace mit dem Paketmanager yum zu installieren, geben Sie den Befehl ein:

yum installiere strace

Geben Sie für den dnf-Paketmanager den Befehl ein:

dnf install strace

3: Arch Linux (pacman)

Für Arch Linux-Benutzer können Sie strace mit dem Befehl installieren:

pacman -S strace

Nachdem Sie strace jetzt installiert und ausgeführt haben, können wir weitermachen und lernen, wie man es benutzt

Grundlegende Verwendung von Strace: Eine Anleitung

Lassen Sie uns die grundlegende Verwendung von strace besprechen und die grundlegende Ausgabe des Befehls verstehen und wie wir ihn verwenden können.

HINWEIS: Strace-Ausgaben wie Systemaufrufnamen, entsprechende Argumente und Rückgabewerte werden verarbeitet von handled der Standard-Fehlerdateideskriptor (stderr).

Die grundlegende Methode zur Verwendung von strace besteht darin, das Dienstprogramm strace gefolgt vom Namen des Programms aufzurufen, dessen Verhalten wir verstehen möchten.

Hier ist ein Beispiel dafür mit dem ls-Befehl:

Beeindruckend! Das ist eine Menge Ausgabe für einen einfachen Befehl wie ls.

Obwohl wir nicht die gesamte Ausgabe des Befehls strace besprechen können, können wir seine Bedeutung destillieren und verstehen.

Wenn Sie die erste Zeile in der obigen Ausgabe betrachten, werden Sie die folgenden Merkmale bemerken.

Daher ist in der ersten Zeile der Systemaufruf execve (Programm mit dem angegebenen Array von Argumenten ausführen), die Argumente des Systemaufrufs sind („/bin/ls“, [“ls“, „/“], 0x7fffc4b277a8 / * 13 vars */) und ein Rückgabewert von 0.

https://linkfy.zu/ausführen

Die execve-Systemaufrufe führen die Binärdatei aus, die wir verwenden möchten, in diesem Fall in (/bin/ls) und das Array der Argumente ist der Pfad, den wir auflisten möchten.

Sie werden auch eine Notation bemerken, die mit einem Schrägstrich und einem Sternchen eingeschlossen ist. Für unser Beispiel:

/* 13 Variablen */

Die obige Ausgabe gibt die Anzahl der Variablen an, die als Ergebnis des Aufrufs des Prozesses hinzugefügt wurden. Auf die Umgebung innerhalb der execv-Funktion wird über die externe Variable environ zugegriffen, die wie folgt definiert ist:

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

Die letzte Ausgabe ist der Rückgabewert, der in diesem Fall 0 ist.

Sie werden auch feststellen, dass die meisten Zeilen der strace-Ausgabe einem ähnlichen Muster folgen, das wir oben besprochen haben.

So verfolgen Sie bestimmte Systemaufrufe

Obwohl strace viele Informationen zu Systemaufrufen von Programmen liefert, werden Sie in den meisten Fällen aufgefordert, bestimmte Systemaufrufe zu filtern. Dazu übergeben wir das Flag -e an den Befehl strace gefolgt vom Namen des benötigten Systemaufrufs.

Wie wäre es mit einem Blick auf die Lesesystemaufrufe für den ls-Befehl?. Beispielsweise:

strace -e lesen ls

Sie werden feststellen, dass hier nur gelesene Systemaufrufe angezeigt werden.

Der Systemaufruf read akzeptiert drei Argumente: Dateideskriptor, Puffer und die Anzahl der Bytes. Der Systemaufruf liest dann die Anzahl der Bytes aus dem übergebenen Dateideskriptorargument in den Puffer.

https://linkfy.to/readsyscall

Zusammenfassung der Systemaufrufe

Mit Strace können wir auch eine Zusammenfassung der Systemaufrufe eines Prozesses abrufen a. Durch Übergabe des Arguments -c oder -summary-only erhalten wir eine Ausgabe wie die unten gezeigte:

Der Befehl filtert und ordnet die Ausgabe effizienter als die normale Ausgabe von strace. Um sowohl eine Zusammenfassung als auch eine normale strace-Ausgabe zu erhalten, übergeben Sie das Argument -C.

So verwenden Sie Strace mit laufenden Prozessen

Zu anderen Zeiten benötigen Sie eine Spur eines laufenden Prozesses. Bisher haben wir strace nur einen einzigen Befehl verwendet. Um einen laufenden Prozess zu verfolgen, können wir das Argument -p gefolgt vom Prozess ID (PID) verwenden, um strace daran anzuhängen.

Sie können die PID eines laufenden Prozesses abrufen, indem Sie top und grep, ps, htop, pidof oder andere Systemüberwachungstools verwenden.

Um beispielsweise die PID des Apache-Prozesses zu erhalten, können wir Folgendes verwenden:

ps -ax | grep -i apache2

Das sollte Ihnen die PID des Apache2-Prozesses (in diesem Fall PID 3514) geben, und wir können sie verwenden, um sie an strace anzuhängen.

Das sollte eine Ausgabe ähnlich der unten gezeigten anzeigen.

Strace verfolgt den angehängten Prozess kontinuierlich und zeigt die Ausgabe an, während der angehängte Prozess Systemaufrufe ausführt. Um die Ablaufverfolgung zu beenden, drücken Sie STRG + C, wodurch der Prozess von der Ablaufverfolgung getrennt wird.

So speichern Sie die Ausgabe von Strace in Dateien

Wir können die Ausgabe von strace auch als Argument in eine Datei umleiten. Mit dem Flag -o gefolgt vom Dateipfad als Argument können wir strace-Protokolle speichern.

Beispielsweise:

strace -p 3514 -o ~/Desktop/apache_trace

Sobald die Datei gespeichert ist, können Sie sie später überwachen und analysieren.

Fazit

In diesem Handbuch haben wir gelernt, wie man strace auf den wichtigsten Linux-Distributionen installiert und verwendet. Nachdem Sie nun Systemaufrufe und die Funktionsweise von Prozessen verstanden haben, können Sie strace verwenden, um einen laufenden Systemprozess zu überwachen und zu debuggen.

Die in diesem Tutorial erlernten Konzepte sind sehr nützlich, vor allem, weil Sie das Gelernte verwenden können, um zu überwachen, ob jemand Systemprozesse manipuliert.

Battle for Wesnoth-Tutorial
The Battle for Wesnoth ist eines der beliebtesten Open-Source-Strategiespiele, die Sie derzeit spielen können. Dieses Spiel befindet sich nicht nur se...
0 A.D. Lernprogramm
Von den vielen Strategiespielen da draußen, 0 A.D. schafft es, sich trotz Open Source als umfassender Titel und sehr tiefgehendes, taktisches Spiel ab...
Unity3D-Tutorial
Einführung in Unity 3D Unity 3D ist eine leistungsstarke Engine für die Spieleentwicklung. Es ist plattformübergreifend, das heißt, Sie können Spiele ...