有沒有一個linux指令可以監視新進程?
我的目標是我想查看何時gulp
調用新命令,使用類似 的命令執行命令行ps
,然後使用 對其進行過濾sed
。
重要的部分是監視新進程,因為一旦完成,我就無法找到 PID。
答案1
您可以使用該auditd
子系統來記錄系統上執行的命令。它與核心掛鉤,因此記錄執行的所有內容非常可靠。
我的範例是在 Fedora Linux 上進行的,您可能會發現一些細微的差異,具體取決於您的發行版。 (該auditd
子系統非常複雜,因此要做好這一點可能很棘手。)
首先檢查您是否已安裝並執行auditd,方法是:
$ systemctl status auditd.service
然後您可以檢查載入了哪些規則。預設情況下,在 Fedora 上,您將獲得:
$ sudo auditctl -l
-a never,task
因此,我們需要刪除這個「任務」清單(它會抑制系統呼叫)並新增一個記錄「execve」(這是執行命令的系統呼叫)的清單。
$ sudo auditctl -d never,task
$ sudo auditctl -a always,exit -F arch=b64 -S execve
完成後,所有命令都將記錄到審核系統中。
然後您可以使用命令搜尋它ausearch
。例如,要尋找所有呼叫“gulp”的執行,您可以使用:
$ sudo ausearch -c gulp
輸出將非常詳細...重點關注 type=EXECVE 行。參數將被列為a0="gulp" a1="first_argument" a2="second_argument" ...
如果您得到一長串數字而不是帶引號的字串,請使用-i
來解釋它。
記錄系統上運行的每個命令可能會非常昂貴並且會佔用大量磁碟空間!它也可能會影響性能。如果您想要撤銷這些更改,可以使用下列命令重新載入預設規則集:
$ sudo augenrules --load
您也可以對日誌記錄規則套用篩選器,例如僅記錄 /usr/bin/gulp 的執行:
$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve
所以,也許這有點矯枉過正了……但它是盡可能可靠的。我希望您能找到通過該子系統的方法auditd
,並為您提供所需的資訊!