Usa getent
para enumerar los directorios de inicio.
getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern"
Si sus directorios de inicio están en una ubicación conocida, podría ser tan simple como
grep -e "$pattern" /home/*/.bash_history
Por supuesto, si un usuario usa un shell diferente o un valor diferente de HISTFILE
, esto no te dirá mucho. Esto tampoco le informará sobre comandos que no se ejecutaron a través de un shell, o sobre alias y funciones y comandos externos ahora eliminados que estaban en algún directorio de usuario al principio del $PATH
del usuario. . Si lo que quiere saber es qué comandos han ejecutado los usuarios, necesita la contabilidad de procesos o algún sistema de auditoría más sofisticado; consulte Monitoreo de actividad en mi computadora., ¿Cómo verificar cuánto tiempo se ejecutó un proceso después de que finalizó?.
find /home -name .bash_history | xargs grep <string>
Alternativamente:
grep string $(find /home -name .bash_history)
Tenga en cuenta que esto cubre directorios de inicio en ubicaciones predeterminadas. Sería mejor analizar /etc/passwd
o invocar getent
, y analice la salida de eso.
for i in $(getent passwd | cut -d: -f6 ); do grep string ${i}/.bash_history; done
Podrías hacer
find /home | grep bash_history | xargs grep "whatever"
Pero realmente no creo que sea mucho mejor que lo que estabas pensando.