Linux parancsok

A Strace használata Linuxon

A Strace használata Linuxon
Amikor Linux rendszerekkel dolgozik, gyakran meg kell vizsgálnia és meg kell értenie a folyamatok által végrehajtott műveleteket és a végrehajtásuk által végrehajtott rendszerhívásokat.

Amikor ilyen feladatokat kell végrehajtani, a Linux kern olyan szolgáltatásokat nyújt, mint például ptrace a folyamatok hibakereséséhez és diagnosztizálásához.

Ez a cikk a strace eszköz használatával foglalkozik a kernellel kölcsönhatásban lévő folyamatok nyomon követésére, figyelemmel kísérésére és hibakeresésére.

Mik azok a rendszerhívások?

Mielőtt megbeszélnénk a strace használatát, meg kell értenie, mit keresünk és hogyan működnek. Ez azt jelenti, hogy át kell mennünk a Linux rendszer hívásainak alapjain.

A rendszerhívás az olyan programozási módszer, amelyen keresztül egy program szolgáltatást kérhet a rendszer kerneljétől. Ezt a folyamatot fogjuk használni a felhasználói folyamatok és a Linux kernel közötti műveletek ellenőrzésére.

Bármikor, amikor a felhasználó végrehajt egy programot, amely olvasást, írást, megölést, kilépést, kötést stb., kérésre rendszerhívást hajtanak végre. A programok által használt számos rendszerhívás különféle feladatok elvégzésére szolgál, például hálózatépítés, fájlokba olvasás és írás, folyamatok inicializálása és befejezése, és még sok más.

Gondoljon a rendszerhívásokra mint függvényekre - hasonlóan viselkednek -, mert elfogadhatnak argumentumokat és visszaadhatják az értékeket. A rendszerhívások és a normál működés közötti fő különbség az, hogy a rendszerhívások közvetlenül kölcsönhatásba léphetnek a kernellel. A rendszerhívások a csapda mechanizmus navigálni a felhasználói tér és a Kernel között.

A Linux rendszerben ezt a mechanizmust olyan könyvtárak, mint például a Glibc, jól elrejtik a felhasználók elől.

JEGYZET: Sokkal több a rendszerhívás és a kernel interakció, mint amit ebben az oktatóanyagban tárgyaltunk. További információt a kézikönyv oldalain talál.

https: // linkfy.to / syscalls

https: // linkfy.to / trapmanual

A strace telepítése Linuxon

Bár a strace eszközök alapértelmezés szerint nincsenek előre telepítve a főbb Linux disztribúciókban, ezeknek a disztribúcióknak a legtöbb hivatalos tárházában elérhetők; az alapértelmezett csomagkezelők segítségével egyszerűen telepítheti.

JEGYZET: Noha nem foglalkozunk a strace minden rendszerre történő telepítésével, megvitatjuk ennek a főbb csomagkezelőkkel, például apt, dnf, pacman és yum

1: Debian (apt) telepítés

Telepítse a strace parancsot:

apt-get install strace -y

2: RedHat család (dnf és yum)

A strace telepítéséhez a yum csomagkezelő használatával írja be a következő parancsot:

yum install strace

A dnf csomagkezelőnél írja be a következő parancsot:

dnf install strace

3: Arch Linux (pacman)

Arch Linux felhasználók számára a strace a következő paranccsal telepíthető:

pacman -S strace

Most, hogy a strace telepítve van és fut, továbbléphetünk és megtanulhatjuk a használatát

Alapvető Strace Használat: Útmutató

Beszéljük meg a strace alaphasználatát, és ismerjük meg a parancs alapvető kimenetét és használatát.

JEGYZET: A strace kimenet, például a rendszerhívások nevei, a megfelelő argumentumok és a visszatérési értékek kezelhetők a standard hibafájl-leíró (stderr).

A strace használatának alapvető módja a strace segédprogram hívása, majd a program neve, amelynek viselkedését meg akarjuk érteni.

Íme egy példa erre az ls paranccsal:

Azta! Ez sok kimenet egy egyszerű parancshoz, mint például az ls.

Bár nem tudjuk megvitatni a strace parancs összes kimenetét, de lepároljuk és megértjük annak jelentését.

Ha figyelembe vesszük a fenti kimenet első sorát, akkor a következő jellemzőket veszi észre.

Ezért az első sorban a rendszerhívás végrehajtásra kerül (a program végrehajtása a megadott argumentumtömb felhasználásával), a rendszerhívás argumentumai a következők: „/ bin / ls”, [„ls”, „/”], 0x7fffc4b277a8 / * 13 vars * /) és 0 visszatérési érték.

https: // linkfy.végrehajtani

Az execve rendszerhívások végrehajtják az általunk használni kívánt bináris fájlt, amely ebben az esetben a (/ bin / ls) könyvtárban található, és az argumentumok tömbje az az útvonal, amelyhez a tartalmat fel akarjuk sorolni.

Ezenkívül észrevesz egy jelölést, amelyhez perjel és csillag tartozik. Például:

/ * 13 variáció * /

A fenti kimenet jelzi a folyamat meghívása eredményeként hozzáadott változók számát. Az execv függvényen belüli környezethez a következőképpen definiált környezeti külső változóval férhet hozzá:

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

A végső kimenet a visszatérési érték, amely ebben az esetben 0.

Azt is észreveszi, hogy a strace kimenet legtöbb sora hasonló mintát követ, amelyet fentebb tárgyaltunk.

Hogyan lehet nyomon követni az adott rendszerhívásokat

Bár a strace sok információt ad a programrendszeri hívásokról, a legtöbb esetben a rendszerhívások szűrésére szólítja fel Önt. Ehhez átadjuk a -e jelzőt a strace parancsnak, amelyet a szükséges rendszerhívás neve követ.

Mi lenne, ha megnéznéd az olvasott rendszer hívásait az ls parancsra. Például:

strace -e olvasni ls

Észre fogja venni, hogy ez csak az olvasott rendszerhívásokat jeleníti meg.

Az olvasott rendszerhívás három argumentumot fogad el: fájlleíró, puffer és bájtok száma. Ezután a rendszerhívás beolvassa a továbbított fájlleíró argumentumból a számláló bájtokat a pufferbe.

https: // linkfy.to / readsyscall

A rendszerhívások összefoglalása

A Strace lehetővé teszi számunkra, hogy összefoglalót kapjunk egy folyamat által végrehajtott rendszerhívásokról. A -c vagy -summary-argumentum átadásával olyan kimenetet kaphatunk, mint amely az alábbiakban látható:

A parancs hatékonyabban szűri és rendezi a kimenetet, mint a normál strace kimenet. Az összefoglaló és a normál strace kimenet megszerzéséhez adja át a -C argumentumot.

A Strace használata futó folyamatokkal

Máskor szükséged lesz egy futó folyamat nyomára. Eddig a ponthoz csak egyetlen parancsot használtunk. Egy futó folyamat nyomon követéséhez használhatjuk a -p argumentumot, amelyet a Process ID (PID) folyamat követ, hogy csatoljunk hozzá.

A futó folyamat PID-jét a top és a grep, ps, htop, pidof vagy más rendszerfigyelő eszközök használatával szerezheti be.

Például az apache folyamat PID-jének megszerzéséhez használhatjuk:

ps -ax | grep -i apache2

Ennek meg kell adnia az apache2 folyamat PID-jét (ebben az esetben PID 3514), és használhatjuk a csatoláshoz.

Ennek az alább láthatóhoz hasonló kimenetet kell megjelenítenie.

A Strace folyamatosan nyomon követi a csatolt folyamatot és megjeleníti a kimenetet, amikor a csatolt folyamat rendszerhívásokat hajt végre. A nyomkövetés befejezéséhez nyomja le a CTRL + C billentyűkombinációt, amely leválasztja a folyamatot a vonaltól.

Strace kimenet fájlokba mentése

A strace kimenetét argumentumként át is irányíthatjuk egy fájlra. Az -o jelzőt, amelyet a fájl elérési útja követel argumentumként, menthetünk strace naplókat.

Például:

strace -p 3514 -o ~ / Desktop / apache_trace

A fájl mentése után később figyelemmel kísérheti és elemezheti.

Következtetés

Ebben az útmutatóban megtanultuk a strace telepítését és használatát a Linux fő terjesztésein. Most, hogy megértette a rendszerhívásokat és a folyamatok működését, a strace segítségével figyelheti és hibakeresheti a futó rendszerfolyamatokat.

Az ebben az oktatóanyagban tanult fogalmak nagyon hasznosak, főleg azért, mert a tanultakat figyelemmel kísérheti, ha valaki manipulálja a rendszer folyamatait.

Telepítse a legújabb OpenRA stratégiai játékot az Ubuntu Linux rendszerre
Az OpenRA egy ingyenes / ingyenes valós idejű stratégiai játékmotor, amely újjáépíti a korai Westwood játékokat, mint például a klasszikus Command & C...
Telepítse a legújabb Dolphin Emulator for Gamecube & Wii szoftvert Linuxra
A Dolphin Emulator segítségével a kiválasztott Gamecube & Wii játékokat játszhatja Linux személyi számítógépeken (PC). Mivel a Dolphin Emulator szaba...
A GameConqueror Cheat Engine használata Linux alatt
A cikk tartalmaz egy útmutatót a GameConqueror csaló motor Linux alatt történő használatáról. Sok olyan felhasználó, aki Windows-on játszik játékot, g...