Linux-Befehl zur Ausgabe jeder neuen Prozess-PID

468
Sarke

Gibt es einen Linux-Befehl, der auf neue Prozesse achtet?

Mein Ziel dabei ist, ich möchte sehen, wenn ein neuer gulpBefehl aufgerufen wird, die Befehlszeile mit etwas ausführen lassen psund dann mit filtern sed.

Der wichtige Teil ist das Beobachten neuer Prozesse, da ich keine PID nachschlagen kann, wenn sie fertig ist.

2

1 Antwort auf die Frage

4
Filipe Brandenburger

Sie können das auditdSubsystem verwenden, um die auf Ihrem System ausgeführten Befehle zu protokollieren. Es ist mit dem Kernel verbunden, daher ist es sehr zuverlässig, alles zu protokollieren, was ausgeführt wird.

Meine Beispiele sind unter Fedora Linux. Abhängig von Ihrer Distribution können Sie kleine Unterschiede feststellen. (Das auditdSubsystem ist ziemlich komplex, daher kann es schwierig sein, dies richtig zu machen.)

Vergewissern Sie sich zunächst, dass Sie auditd bereits installiert und ausgeführt haben.

$ systemctl status auditd.service 

Dann können Sie überprüfen, welche Regeln geladen werden. Auf Fedora erhalten Sie standardmäßig Folgendes:

$ sudo auditctl -l -a never,task 

Wir müssen also diese "Task" -Liste entfernen (die Syscalls unterdrückt) und eine hinzufügen, die "Execve" protokolliert (was der Syscall ist, der Befehle ausführt.)

$ sudo auditctl -d never,task $ sudo auditctl -a always,exit -F arch=b64 -S execve 

Sobald dies geschehen ist, werden alle Befehle im Prüfsystem protokolliert.

Sie können es dann mit dem ausearchBefehl suchen . Um beispielsweise alle Ausführungen zu finden, die "gulp" aufrufen, können Sie Folgendes verwenden:

$ sudo ausearch -c gulp 

Die Ausgabe wird ziemlich ausführlich sein ... Konzentrieren Sie sich auf die Zeile type = EXECVE. Die Argumente werden als aufgeführta0="gulp" a1="first_argument" a2="second_argument" ...

Wenn Sie anstelle einer in Anführungszeichen genannten Zeichenfolge eine lange Zahlenfolge erhalten, verwenden Sie diese -izur Interpretation.

Die Protokollierung aller auf Ihrem System ausgeführten Befehle kann sehr teuer sein und viel Speicherplatz beanspruchen! Möglicherweise beeinflusst dies auch die Leistung. Wenn Sie diese Änderungen rückgängig machen möchten, können Sie die Standardregeln mit diesem Befehl erneut laden:

$ sudo augenrules --load 

Sie können auch einen Filter auf die Protokollierungsregel anwenden, um beispielsweise nur die Ausführung von / usr / bin / gulp zu protokollieren:

$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve 

Vielleicht ist das ein Übermaß ... Aber es ist so zuverlässig wie es nur geht. Ich hoffe, Sie können sich durch das auditdSubsystem zurechtfinden und erhalten die Informationen, nach denen Sie suchen.