Usa getent
per enumerare le home directory.
getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern"
Se le tue home directory si trovano in una posizione ben nota, potrebbe essere semplice come
grep -e "$pattern" /home/*/.bash_history
Ovviamente, se un utente utilizza una shell diversa o un diverso valore di HISTFILE
, questo non ti dirà molto. Né questo ti parlerà di comandi che non sono stati eseguiti tramite una shell, o di alias e funzioni e comandi esterni ora rimossi che erano in qualche directory utente all'inizio del $PATH
dell'utente . Se quello che vuoi sapere è quali comandi hanno eseguito gli utenti, hai bisogno di una contabilità di processo o di un sistema di controllo più elaborato; vedi Monitoraggio dell'attività sul mio computer., Come verificare per quanto tempo è stato eseguito un processo dopo il suo completamento?.
find /home -name .bash_history | xargs grep <string>
In alternativa:
grep string $(find /home -name .bash_history)
Si noti che questo copre le home directory nelle posizioni predefinite. Sarebbe meglio analizzare /etc/passwd
o invocare getent
, e analizza l'output.
for i in $(getent passwd | cut -d: -f6 ); do grep string ${i}/.bash_history; done
Potresti fare
find /home | grep bash_history | xargs grep "whatever"
Ma non credo davvero che sia molto meglio di quello che stavi pensando.