извлекать имена системных вызовов из вывода strace - PullRequest
0 голосов
/ 19 ноября 2018

Я использую следующую команду для извлечения имен системных вызовов из вывода strace:

strace ls 3>&1 1>&2 2>&3 3>&- | grep -P -o '^[a-z]*(?=\()'

но эта команда также включает вывод ls в вывод. как я могу предотвратить это?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Существует два варианта связывания, которые помогут вам получить то, что вы хотите:

  • -c выведет таблицу всех системных вызовов, выполняемых командой, а также количество раз, которое онибыли вызваны и загрузка процессора.
$ strace -c ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 31.07    0.000653          20        32           mmap
  9.94    0.000209          20        10           mprotect
  9.80    0.000206          12        16           read
  8.28    0.000174          15        11           close
  7.61    0.000160          16        10           fstat
  6.90    0.000145          16         9           openat
  2.47    0.000052          17         3         3 ioctl
...
  • Опция -o отправит вывод strace в файл, поэтому он не будет смешиваться с выводом вашего процесса.

Следующая команда запустит команду ls, перенаправив ее вывод в /dev/null и отправит вывод strace в сценарий awk для извлечения последнего столбца:

$ strace -o >(awk '$1 ~ /^-----/ { toprint = !toprint; next } { if (toprint) print $NF }') \
  -c ls >/dev/null 2>/dev/null
mmap
mprotect
read
close
fstat
openat
ioctl
...
0 голосов
/ 19 ноября 2018

Наконец-то я нашел решение с помощью этой ссылки: http://mywiki.wooledge.org/BashFAQ/047

strace ls 2>&1 >/dev/null | grep -P -o '^[a-z]*(?=\()'

и полезный вариант для подсчета системных вызовов:

strace ls 2>&1 >/dev/null | grep -P -o '^[a-z]*(?=\()' | sort | uniq -c | sort -nr

И лучшее решение с использованием Марк Плотник ответ:

strace -o >(grep -P -o '^[a-z]*(?=\()' | sort | uniq -c | sort -nr) ls &>/dev/null

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...