Linux-opdrachten

Hoe Strace op Linux te gebruiken

Hoe Strace op Linux te gebruiken
Wanneer u met Linux-systemen werkt, moet u vaak de acties die worden uitgevoerd door processen en de systeemaanroepen die worden uitgevoerd door hun uitvoering inspecteren en begrijpen.

Als het gaat om het uitvoeren van dergelijke taken, biedt de Linux-kernel functies zoals: ptrace om processen te debuggen en te diagnosticeren.

In dit artikel wordt besproken hoe u de strace-tool kunt gebruiken om processen te traceren, te bewaken en fouten op te sporen die met de kernel interageren.

Wat zijn systeemoproepen?

Voordat we bespreken hoe je strace kunt gebruiken, moet je begrijpen waar we naar op zoek zijn en hoe ze werken. Dat betekent dat we de basisprincipes van Linux-systeemaanroepen moeten doornemen.

Een systeemoproep is: een programmatische methode waarmee een programma een dienst kan aanvragen bij de systeemkernel. Dat is het proces dat we zullen gebruiken om de acties tussen gebruikersprocessen en de Linux-kernel te inspecteren.

Elke keer dat een gebruiker een programma uitvoert dat lezen, schrijven, doden, afsluiten, binden, enz., verzoek, ze doen een systeemoproep. Er is een breed scala aan systeemaanroepen die door programma's worden gebruikt om verschillende taken uit te voeren, zoals netwerken, lezen en schrijven naar bestanden, initialiseren en beëindigen van processen, en nog veel meer.

Zie systeemaanroepen als functies - ze gedragen zich op dezelfde manier - omdat ze argumenten kunnen accepteren en waarden kunnen retourneren return. Het belangrijkste verschil tussen systeemoproepen en normale werking is dat systeemoproepen rechtstreeks kunnen communiceren met de kernel. Systeemoproepen gebruiken a val mechanisme om te navigeren tussen de gebruikersruimte en de kernel.

In het Linux-systeem is dit mechanisme goed verborgen voor de gebruikers door bibliotheken zoals Glibc.

OPMERKING: Er komt veel meer kijken bij systeemaanroepen en kernelinteracties dan wat we in deze tutorial hebben besproken. Raadpleeg de handleidingen voor meer informatie.

https://linkfy.naar/syscalls

https://linkfy.naar/trapmanual

Hoe strace op Linux te installeren

Hoewel strace-tools niet standaard voorgeïnstalleerd zijn in de belangrijkste Linux-distributies, is het beschikbaar in de meeste officiële repositories van deze distributies; je kunt het eenvoudig installeren met behulp van standaard pakketbeheerders.

OPMERKING: Hoewel we niet bespreken hoe u strace op alle systemen installeert, zullen we bespreken hoe u dit kunt doen met grote pakketbeheerders zoals apt, dnf, pacman en yum

1: Debian (apt) Installatie

Installeer strace met de opdracht:

apt-get install strace -y

2: RedHat-familie (dnf en jammie)

Om strace te installeren met behulp van yum package manager, voer je de opdracht in:

yum install strace

Voer voor dnf-pakketbeheerder de opdracht in:

dnf install strace

3: Arch Linux (pacman)

Voor Arch Linux-gebruikers kun je strace installeren met de opdracht:

pacman -S strace

Nu je strace hebt geïnstalleerd en gebruikt, kunnen we verder gaan en leren hoe te gebruiken

Basisgebruik van strace: een handleiding

Laten we het basisgebruik van strace bespreken en de basisuitvoer van het commando begrijpen en hoe we het kunnen gebruiken.

OPMERKING: Strace-uitvoer zoals systeemaanroepen, bijbehorende argumenten en retourwaarden worden afgehandeld door: de standaard descriptor van het foutbestand (stderr).

De basismanier om strace te gebruiken is door het strace-hulpprogramma aan te roepen, gevolgd door de naam van het programma, waarvan we het gedrag willen begrijpen.

Hier is een voorbeeld van met de opdracht ls:

Wauw! Dat is veel output voor een eenvoudig commando zoals ls.

Hoewel we niet alle uitvoer van het strace-commando kunnen bespreken, kunnen we de betekenis ervan distilleren en begrijpen.

Als je kijkt naar de eerste regel in de bovenstaande uitvoer, zul je de volgende kenmerken opmerken:.

Daarom is in de eerste regel de systeemaanroep execve (voer het programma uit met behulp van de opgegeven reeks argumenten), de argumenten van de systeemaanroep zijn ("/bin/ls", ["ls", "/"], 0x7fffc4b277a8 / * 13 vars */) en een retourwaarde van 0.

https://linkfy.aan/uitvoeren

De execve-systeemaanroepen voeren het binaire bestand uit dat we willen gebruiken, in dit geval in (/bin/ls) en de array van argumenten is het pad dat we willen weergeven.

U zult ook een notatie opmerken die is omsloten door een schuine streep en een asterisk. Voor ons voorbeeld:

/* 13 verschillende */

De bovenstaande uitvoer geeft het aantal variabelen aan dat is toegevoegd als gevolg van het aanroepen van het proces. De omgeving binnen de execv-functie is toegankelijk met behulp van de externe variabele environ gedefinieerd als:

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

De uiteindelijke uitvoer is de retourwaarde, die in dit geval 0 is.

Je zult ook merken dat de meeste regels van de strace-uitvoer een soortgelijk patroon volgen dat we hierboven hebben besproken.

Specifieke systeemoproepen traceren

Hoewel strace veel informatie geeft over systeemaanroepen van programma's, zullen de meeste instanties een beroep doen op u om specifieke systeemaanroepen te filteren. Om dit te doen, geven we de vlag -e door aan het strace-commando gevolgd door de naam van de systeemaanroep die we nodig hebben.

Hoe zit het met het kijken naar de leessysteemaanroepen voor het ls-commando?. Bijvoorbeeld:

strace -e lees ls

U zult merken dat hier alleen leessysteemaanroepen worden weergegeven.

De read-systeemaanroep accepteert drie argumenten: bestandsdescriptor, buffer en het aantal bytes. De systeemaanroep leest dan tot het aantal bytes van het doorgegeven bestandsdescriptorargument in de buffer.

https://linkfy.naar/readsyscall

Overzicht van systeemoproepen

Met Strace kunnen we ook een samenvatting krijgen van systeemaanroepen die door een proces zijn gedaan. Door het argument -c of -summary-only door te geven, kunnen we een uitvoer krijgen zoals hieronder weergegeven:

De opdracht filtert en rangschikt de uitvoer efficiënter dan de normale strace-uitvoer. Om zowel samenvatting als normale strace-uitvoer te krijgen, geeft u het argument -C doorC.

Hoe Strace te gebruiken met lopende processen Process

Op andere momenten heb je een spoor van een lopend proces nodig. Tot nu toe hebben we alleen strace een enkele opdracht gebruikt. Om een ​​lopend proces te traceren, kunnen we het argument -p gebruiken, gevolgd door het proces-ID (PID)-proces om er een strace aan toe te voegen.

U kunt de PID van een lopend proces verkrijgen door de top en grep, ps, htop, pidof of andere systeembewakingstools te gebruiken.

Om bijvoorbeeld de PID van het apache-proces te krijgen, kunnen we gebruiken:

ps -ax | grep -i apache2

Dat zou je de PID van het apache2-proces moeten geven (in dit geval PID 3514), en we kunnen het gebruiken om het aan strace te koppelen.

Dat zou een uitvoer moeten weergeven die lijkt op die hieronder:.

Strace zal continu het gekoppelde proces volgen en output tonen terwijl het gekoppelde proces systeemaanroepen uitvoert. Om de trace te beëindigen, drukt u op CTRL + C, waardoor het proces wordt losgekoppeld van de trace.

Hoe u Strace-uitvoer naar bestanden kunt opslaan

We kunnen de uitvoer van strace ook omleiden naar een bestand als argument. Door de vlag -o gevolgd door het bestandspad als argument te gebruiken, kunnen we strace-logboeken opslaan.

Bijvoorbeeld:

strace -p 3514 -o ~/Desktop/apache_trace

Zodra het bestand is opgeslagen, kunt u het later controleren en analyseren.

Conclusie

In deze handleiding hebben we geleerd hoe we strace kunnen installeren en gebruiken op grote Linux-distributies. Nu u systeemaanroepen begrijpt en begrijpt hoe processen werken, kunt u strace gebruiken om een ​​lopend systeemproces dat wordt uitgevoerd te controleren en te debuggen.

De concepten die in deze tutorial zijn geleerd, zijn erg handig, vooral omdat je kunt gebruiken wat je hebt geleerd om te controleren of iemand met systeemprocessen knoeit.

Strijd om Wesnoth 1.13.6 Ontwikkeling vrijgegeven
Strijd om Wesnoth 1.13.6 die vorige maand werd uitgebracht, is de zesde ontwikkelingsrelease in de 1.13.x-serie en het levert een aantal verbeteringen...
Hoe League Of Legends op Ubuntu 14 te installeren.04
Als je fan bent van League of Legends, dan is dit een kans voor jou om League of Legends te testen. Merk op dat LOL wordt ondersteund op PlayOnLinux a...
Installeer de nieuwste OpenRA Strategy Game op Ubuntu Linux
OpenRA is een Libre/Free Real Time Strategy-game-engine die de vroege Westwood-games nabootst, zoals de klassieke Command & Conquer: Red Alert. Gedist...