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 -y2: 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 straceA dnf csomagkezelőnél írja be a következő parancsot:
dnf install strace3: Arch Linux (pacman)
Arch Linux felhasználók számára a strace a következő paranccsal telepíthető:
pacman -S straceMost, 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.
- A rendszerhívás neve
- A rendszerhíváshoz zárójelbe zárt argumentumok.
- A rendszerhívás visszatérési értéke
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 apache2Ennek 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_traceA 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.