Linux 从strace输出中提取系统调用名

Linux 从strace输出中提取系统调用名,linux,bash,grep,strace,lookahead,Linux,Bash,Grep,Strace,Lookahead,我使用以下命令从strace输出中提取syscall名称: strace ls 3>&11>&22>&33>&-|grep-p-o'^[a-z]*(?=\()” 但该命令还包括输出中的ls输出。 如何防止这种情况发生?最后,我在这个链接的帮助下找到了一个解决方案: strace ls 2>&1>/dev/null | grep-p-o'^[a-z]*(?=\()” 和一个有用的变量来计算系统调用: strace ls 2>&1>/dev/null | grep-p-o'^[a-z]*(?=\()

我使用以下命令从strace输出中提取syscall名称:

strace ls 3>&11>&22>&33>&-|grep-p-o'^[a-z]*(?=\()”

但该命令还包括输出中的ls输出。
如何防止这种情况发生?

最后,我在这个链接的帮助下找到了一个解决方案:

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

和一个有用的变量来计算系统调用:

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

还有一个更好的解决方案,使用Mark Plotnick的答案:


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

strace有两个选项可以帮助您获得所需:

  • -c
    将输出一个由命令运行的所有系统调用的表,以及它们被调用的次数和CPU使用情况
mmap 保护 阅读 关闭 fstat 开放式 ioctl ...
欢迎来到Stack Overflow!是针对编程问题,而不是关于使用或配置Linux及其应用程序的问题。或者是针对此类问题的更好地方。感谢您的建议,但这是一个bash编程问题。Stack Overflow中有许多这样的问题。中也有许多这样的问题。这只是about在命令行上使用bash重定向操作符,而不是真正的编程。 $ 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 ...
$ 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 ...