有没有一个linux命令可以监视新进程?
我的目标是我想查看何时gulp调用新命令,使用类似 的命令执行命令行ps,然后使用 对其进行过滤sed。
重要的部分是监视新进程,因为一旦完成我就无法查找 PID。
您可以使用该auditd子系统来记录系统上运行的命令。它与内核挂钩,因此记录执行的所有内容非常可靠。
我的示例是在 Fedora Linux 上进行的,您可能会发现一些细微的差异,具体取决于您的发行版。(该auditd子系统非常复杂,因此要做好这一点可能很棘手。)
首先检查您是否已安装并运行auditd,方法是:
$ systemctl status auditd.service
Run Code Online (Sandbox Code Playgroud)
然后您可以检查加载了哪些规则。默认情况下,在 Fedora 上,您将获得:
$ sudo auditctl -l
-a never,task
Run Code Online (Sandbox Code Playgroud)
因此,我们需要删除这个“任务”列表(它会抑制系统调用)并添加一个记录“execve”(这是执行命令的系统调用)的列表。
$ sudo auditctl -d never,task
$ sudo auditctl -a always,exit -F arch=b64 -S execve
Run Code Online (Sandbox Code Playgroud)
完成后,所有命令都将记录到审核系统中。
然后您可以使用命令搜索它ausearch。例如,要查找所有调用“gulp”的执行,您可以使用:
$ sudo ausearch -c gulp
Run Code Online (Sandbox Code Playgroud)
输出将非常详细...重点关注 type=EXECVE 行。参数将被列为a0="gulp" a1="first_argument" a2="second_argument" ...
如果您得到一长串数字而不是带引号的字符串,请使用-i来解释它。
记录系统上运行的每个命令可能会非常昂贵并且会占用大量磁盘空间!它也可能会影响性能。如果您想撤消这些更改,可以使用以下命令重新加载默认规则集:
$ sudo augenrules --load
Run Code Online (Sandbox Code Playgroud)
您还可以对日志记录规则应用过滤器,例如仅记录 /usr/bin/gulp 的执行:
$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve
Run Code Online (Sandbox Code Playgroud)
所以,也许这有点矫枉过正了……但它是尽可能可靠的。我希望您能找到通过该子系统的方法auditd,并为您提供所需的信息!