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