所以我想知道文件是如何按zsh
、.xinitrc
、.xprofile
、.zprofile
以及确切的顺序打开的。因此,我决定使用该命令进行处理,strace
以查看如何调用系统调用,最终我可以决定和订购如何加载这些文件。zsh
grep
open
我的命令:
strace zsh | grep open
但是当我运行这个程序时,它一直向我显示输出zsh
并且grep
不起作用。当我结束该过程时ctrl+d
也没有任何反应。
那么有什么方法可以grep
在这种过程中获得这样的输出吗?
答案1
strace
默认情况下将其输出发送到 stderr。
在这里,你可以这样做:
strace -o >(grep --color open >&2) zsh
运行时查看名称、参数或返回值中任意位置zsh
的所有系统调用,或者:open
strace -e /open zsh
( 的缩写strace -e trace=/open zsh
)或:
查看open
名称中包含的系统调用(例如 open、openat、pidfd_open、mq_open、open_by_handle_at、perf_event_open 列表可能不准确,具体取决于您所在的系统及其版本)。
或者:
strace -e open,openat zsh
仅适用于这两个系统调用。
该输出与 shell 的提示符和命令输出一起发送到终端。您可能更愿意将其发送到稍后可以检查的文件或位于单独的终端或screen
/tmux
窗格中:
strace -o >(grep --color open > strace.log) zsh
strace -e /open -o strace.log zsh
要还跟踪在子进程中进行的调用(包括在子进程及其子进程中执行的命令),您需要该-f
选项。
因此,请查看什么打开了您的系统~/.xinitrc
(与 无关zsh
)以及何时可以使用该audit
系统(默认情况下您的系统上可能未安装/启用)。