Strace: erinevus redaktsioonide vahel

Allikas: Kuutõrvaja
Mine navigeerimisribaleMine otsikasti
Jj (arutelu | kaastöö)
Resümee puudub
Jj (arutelu | kaastöö)
Resümee puudub
 
(ei näidata sama kasutaja 5 vahepealset redaktsiooni)
3. rida: 3. rida:
Täpsemalt võimaldab strace järgida, mis operatsioone ehk syscalle programmid täidavad. Linux system call või syscall on suhtlus kasutaja programmi user space ja kernel space vahel. Need vabastavad programeerija keerukatest madala taseme protseduuride kirjutamisest ning suurendavad süsteemi turvalisust
Täpsemalt võimaldab strace järgida, mis operatsioone ehk syscalle programmid täidavad. Linux system call või syscall on suhtlus kasutaja programmi user space ja kernel space vahel. Need vabastavad programeerija keerukatest madala taseme protseduuride kirjutamisest ning suurendavad süsteemi turvalisust


Syscallide tabel
[[Pilt:Syscall.png]]
 
Syscallide tähendused:


  read read bytes from a file descriptor (file, socket)
  read read bytes from a file descriptor (file, socket)
17. rida: 19. rida:
  mmap map a file to the process memory address space
  mmap map a file to the process memory address space
  brk extend the heap pointer
  brk extend the heap pointer
  fchmod change file permissions
  fchmod change file permissions
  fchown change file ownership
  fchown change file ownership
  fstat retrieve details
  fstat   retrieve details
  lseek move through file
  lseek   move through file
  statfs retrieve file system related details
  statfs retrieve file system related details


Paigaldamiseks debianis
Paigaldamiseks debianis
29. rida: 31. rida:
Vaatame milliseid teeke või programme kasutatakse käsu ls käivitiamisel
Vaatame milliseid teeke või programme kasutatakse käsu ls käivitiamisel


  # strace ls
  # '''strace ls'''
  execve("/bin/ls", ["ls"], [/* 18 vars */]) = 0
  execve("/bin/ls", ["ls"], [/* 18 vars */]) = 0
  brk(NULL)                              = 0x620000
  brk(NULL)                              = 0x620000
60. rida: 62. rida:
Väljasta PId-i 24410 puhul vaid connect() ja accept() syscallid
Väljasta PId-i 24410 puhul vaid connect() ja accept() syscallid


  # strace -econnect,accept -p 24410
  # '''strace -econnect,accept -p 24410'''
  strace: Process 24410 attached
  strace: Process 24410 attached
  accept(0, {sa_family=AF_LOCAL, NULL}, [2]) = 5
  accept(0, {sa_family=AF_LOCAL, NULL}, [2]) = 5
66. rida: 68. rida:
  accept(0, {sa_family=AF_LOCAL, NULL}, [2]) = 5
  accept(0, {sa_family=AF_LOCAL, NULL}, [2]) = 5
  connect(8, {sa_family=AF_LOCAL, sun_path="/var/run/mysqld/mysqld.sock"}, 29) = 0
  connect(8, {sa_family=AF_LOCAL, sun_path="/var/run/mysqld/mysqld.sock"}, 29) = 0


https://www.linuxnix.com/10-strace-command-examples-linuxunix/
https://www.linuxnix.com/10-strace-command-examples-linuxunix/


https://linux-audit.com/the-ultimate-strace-cheat-sheet/
https://linux-audit.com/the-ultimate-strace-cheat-sheet/

Viimane redaktsioon: 15. märts 2018, kell 16:03

Strace on diagnostika ja silumistööriist, mis aitab lahendada programmidega seotud probleeme, mis logidest välja ei tule.

Täpsemalt võimaldab strace järgida, mis operatsioone ehk syscalle programmid täidavad. Linux system call või syscall on suhtlus kasutaja programmi user space ja kernel space vahel. Need vabastavad programeerija keerukatest madala taseme protseduuride kirjutamisest ning suurendavad süsteemi turvalisust

Syscallide tähendused:

read	read bytes from a file descriptor (file, socket)
write	write bytes from a file descriptor (file, socket)
open	open a file (returns a file descriptor)
close	close a file descriptor
fork	create a new process (current process is forked)
exec	execute a new program
connect	connect to a network host
accept	accept a network connection
stat	read file statistics
ioctl	set I/O properties, or other miscellaneous functions
mmap	map a file to the process memory address space
brk	extend the heap pointer
fchmod  change file permissions
fchown  change file ownership
fstat   retrieve details
lseek   move through file
statfs  retrieve file system related details

Paigaldamiseks debianis

apt-get install strace

Vaatame milliseid teeke või programme kasutatakse käsu ls käivitiamisel

# strace ls
execve("/bin/ls", ["ls"], [/* 18 vars */]) = 0
brk(NULL)                               = 0x620000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=43121, ...}) = 0
mmap(NULL, 43121, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fc6be23a000
close(3)                                = 0
..
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Selles väljundis on näha tervet hulka erinevaid syscalle näiteks

open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3

Rida lahtiseletatuna:

  • open – system calli tüüp
  • (“/etc/ld.so.cache”, O_RDONLY|O_CLOEXEC) – systemcallile esitatud argument
  • 3 – system call täitmisele järgnenud väljund

Töötava programmi nt mingi deemoni jälgimiseks tuleb anda käsk

# strace -p <PID>

Väljasta PId-i 24410 puhul vaid connect() ja accept() syscallid

# strace -econnect,accept -p 24410
strace: Process 24410 attached
accept(0, {sa_family=AF_LOCAL, NULL}, [2]) = 5
connect(8, {sa_family=AF_LOCAL, sun_path="/var/run/mysqld/mysqld.sock"}, 29) = 0
accept(0, {sa_family=AF_LOCAL, NULL}, [2]) = 5
connect(8, {sa_family=AF_LOCAL, sun_path="/var/run/mysqld/mysqld.sock"}, 29) = 0

https://www.linuxnix.com/10-strace-command-examples-linuxunix/

https://linux-audit.com/the-ultimate-strace-cheat-sheet/