Što se tiče izvođenja takvih zadataka, Linux kernel pruža značajke kao što su ptrace za otklanjanje pogrešaka i dijagnosticiranje procesa.
Ovaj članak raspravlja o tome kako koristiti alat za praćenje za praćenje, nadgledanje i uklanjanje pogrešaka u procesima koji djeluju s jezgrom.
Što su sistemski pozivi?
Prije nego što razgovaramo o tome kako koristiti strace, morate razumjeti što tražimo i kako oni djeluju. To znači da bismo trebali proučiti osnove Linux sistemskih poziva.
Sistemski poziv je programska metoda putem koje program može zatražiti uslugu od jezgre sustava. To je postupak koji ćemo koristiti za inspekciju radnji između korisničkih procesa i Linux jezgre.
Kad god korisnik izvrši program koji čini čitanje, pisanje, ubijanje, izlazak, povezivanje itd., zahtjev, upućuju sistemski poziv. Širok je raspon sistemskih poziva koje programi koriste za obavljanje različitih zadataka kao što su umrežavanje, čitanje i pisanje u datoteke, inicijalizacija i završavanje procesa i još mnogo toga.
Sistemske pozive smatrajte funkcijama - oni se ponašaju slično - jer mogu prihvatiti argumente i vratiti vrijednosti. Glavna razlika između sistemskih poziva i normalnog rada je u tome što sistemski pozivi mogu izravno komunicirati s jezgrom. Sistemski pozivi koriste a mehanizam zamke za navigaciju između korisničkog prostora i kernela.
U Linux sustavu ovaj su mehanizam biblioteke poput Glibca dobro skrivale od korisnika.
BILJEŠKA: Puno je više sistemskih poziva i interakcija jezgre od onoga o čemu smo raspravljali u ovom vodiču. Dodatne informacije potražite na stranicama priručnika.
https: // linkfy.na / syscalls
https: // linkfy.do / trapmanual
Kako instalirati strace na Linux
Iako strace alati nisu unaprijed instalirani u glavnim Linux distribucijama, on je dostupan u većini službenih spremišta tih distribucija; možete ga jednostavno instalirati pomoću zadanih upravitelja paketa.
BILJEŠKA: Iako nećemo opisivati kako instalirati strace na sve sustave, razgovarat ćemo o tome kako to učiniti s glavnim upraviteljima paketa, kao što su apt, dnf, pacman i yum
1: Debian (apt) instalacija
Instalirajte strace pomoću naredbe:
apt-get instalacija strace -y2: RedHat obitelj (dnf i yum)
Da biste instalirali strace pomoću upravitelja paketa yum, unesite naredbu:
njam instaliraj straceZa dnf manager paketa unesite naredbu:
dnf instaliraj strace3: Arch Linux (pacman)
Za korisnike Arch Linuxa, strace možete instalirati naredbom:
pacman -S straceSad kad ste instalirali i pokrenuli strace, možemo ići dalje i naučiti kako se koristiti
Osnovna upotreba stracea: Vodič s uputama
Razgovarajmo o osnovnoj upotrebi stracea i shvatimo osnovni izlaz naredbe i kako ga možemo koristiti.
BILJEŠKA: Izlazom stracea poput imena sistemskih poziva, odgovarajućih argumenata i povratnih vrijednosti obrađuje se standardni deskriptor datoteke pogreške (stderr).
Osnovni način upotrebe stracea je pozivanje uslužnog programa strace iza kojeg slijedi naziv programa, čije ponašanje želimo razumjeti.
Evo primjera toga pomoću naredbe ls:
Vau! To je puno rezultata za jednostavnu naredbu kao što je ls.
Iako ne možemo razgovarati o svim rezultatima naredbe strace, možemo destilirati i razumjeti njegovo značenje.
Ako uzmete u obzir prvi redak u gornjem izlazu, primijetit ćete sljedeće značajke.
- Naziv sistemskog poziva
- Argumenti proslijeđeni sistemskom pozivu priloženom u zagradama.
- Povratna vrijednost iz sistemskog poziva
Dakle, u prvom je retku sistemski poziv execve (izvršava program pomoću navedenog niza argumenata), argumenti sistemskog poziva su (“/ bin / ls”, [“ls”, “/”], 0x7fffc4b277a8 / * 13 vars * /) i povratna vrijednost 0.
https: // linkfy.do / izvršiti
Sistemski pozivi execve izvršavaju binarnu datoteku koju želimo koristiti, u ovom se slučaju nalazi u (/ bin / ls), a niz argumenata je put koji želimo navesti sadržaj.
Također ćete primijetiti oznaku priloženu kosom crtom i zvjezdicom. Za naš primjer:
/ * 13 vars * /Gornji izlaz pokazuje broj varijabli dodanih kao rezultat poziva. Okolišu unutar funkcije execv pristupa se pomoću vanjske varijable environment definirane kao:
int glavni (int argc, char * argv [], char * envp [])Konačni izlaz je povratna vrijednost, koja je u ovom slučaju 0.
Također ćete primijetiti da većina redaka izlaza prati sličan obrazac koji smo gore raspravljali.
Kako pratiti određene sistemske pozive
Iako strace daje puno informacija u vezi s programskim sistemskim pozivima, većina instanci pozvat će vas da filtrirate određene sistemske pozive. Da bismo to učinili, prosljeđujemo zastavicu -e naredbi strace nakon koje slijedi naziv sistemskog poziva koji nam treba.
Kako bi bilo da pogledate sistemske pozive za čitanje za naredbu ls. Na primjer:
strace -e čitati ls
Primijetit ćete da ovo prikazuje samo pročitane sistemske pozive.
Sistemski poziv za čitanje prihvaća tri argumenta: deskriptor datoteke, međuspremnik i broj bajtova. Potom sistemski poziv očitava brojeve bajtova iz prosljeđenog argumenta deskriptora datoteke u međuspremnik.
https: // linkfy.na / readyscall
Sažetak sistemskih poziva
Strace nam također omogućuje sažetak sistemskih poziva upućenih postupkom. Prosljeđivanjem argumenta -c ili -summary-only možemo dobiti izlaz kakav je prikazan u nastavku:
Naredba filtrira i raspoređuje izlaz učinkovitije od uobičajenog strace izlaza. Da biste dobili i sažetak i normalan izlaz stracea, dodajte argument -C.
Kako koristiti Strace s tekućim procesima
U drugim slučajevima trebat će vam trag pokrenutog postupka. Do ovog trenutka koristili smo samo jednu naredbu strace. Da bismo pratili pokrenut postupak, možemo upotrijebiti argument -p nakon kojeg slijedi proces ID procesa (PID) da bismo mu pridružili strace.
PID tekućeg postupka možete dobiti pomoću vrha i grep, ps, htop, pidof ili drugih alata za nadzor sustava.
Na primjer, da bismo dobili PID procesa apache, možemo koristiti:
ps -os | grep -i apache2To bi vam trebalo dati PID postupka apache2 (u ovom slučaju PID 3514), a mi ga možemo koristiti za pričvršćivanje na strace.
To bi trebalo prikazati izlaz sličan onome prikazanom u nastavku.
Strace će kontinuirano pratiti pridruženi proces i prikazivati izlaz dok pridruženi proces izvršava sistemske pozive. Da biste prekinuli trag, pritisnite CTRL + C, čime se postupak odvaja od sloja.
Kako spremiti izlaz Strace u datoteke
Izlaz stracea također možemo preusmjeriti u datoteku kao argument. Koristeći zastavicu -o praćenu stazom datoteke kao argument, možemo spremiti zapise stracea.
Na primjer:
strace -p 3514 -o ~ / Desktop / apache_traceNakon što je datoteka spremljena, kasnije je možete nadgledati i analizirati.
Zaključak
U ovom smo vodiču naučili kako instalirati i koristiti strace na glavnim Linux distribucijama. Sada kada razumijete sistemske pozive i kako procesi rade, možete koristiti strace za nadgledanje i uklanjanje pogrešaka pokrenutog sistemskog procesa.
Koncepti naučeni u ovom vodiču vrlo su korisni, uglavnom zato što ono što ste naučili možete koristiti za praćenje ako netko petlja u sistemske procese.