Verwenden Sie getent
um die Home-Verzeichnisse aufzuzählen.
getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern"
Wenn sich Ihre Home-Verzeichnisse an einem bekannten Ort befinden, könnte es so einfach sein wie
grep -e "$pattern" /home/*/.bash_history
Natürlich, wenn ein Benutzer eine andere Shell oder einen anderen Wert von HISTFILE
verwendet , das wird dir nicht viel sagen. Dies wird Sie auch nicht über Befehle informieren, die nicht über eine Shell ausgeführt wurden, oder über Aliase und Funktionen und jetzt entfernte externe Befehle, die sich zu Beginn des $PATH
des Benutzers in einem Benutzerverzeichnis befanden . Wenn Sie wissen möchten, welche Befehle Benutzer ausgeführt haben, benötigen Sie eine Prozessabrechnung oder ein schickeres Überwachungssystem. siehe Aktivitäten auf meinem Computer überwachen., Wie überprüfe ich, wie lange ein Prozess lief, nachdem er beendet wurde?.
find /home -name .bash_history | xargs grep <string>
Alternativ:
grep string $(find /home -name .bash_history)
Beachten Sie, dass dies Home-Verzeichnisse an Standardspeicherorten abdeckt. Es wäre besser, /etc/passwd
zu parsen oder rufen Sie getent
auf , und analysieren Sie die Ausgabe davon.
for i in $(getent passwd | cut -d: -f6 ); do grep string ${i}/.bash_history; done
Sie könnten
tunfind /home | grep bash_history | xargs grep "whatever"
Aber ich glaube nicht wirklich, dass das viel besser ist, als Sie dachten.