Utilisez getent
pour énumérer les répertoires personnels.
getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern"
Si vos répertoires personnels se trouvent dans un emplacement bien connu, cela peut être aussi simple que
grep -e "$pattern" /home/*/.bash_history
Bien sûr, si un utilisateur utilise un shell différent ou une valeur différente de HISTFILE
, cela ne vous dira pas grand chose. Cela ne vous renseignera pas non plus sur les commandes qui n'ont pas été exécutées via un shell, ou sur les alias et les fonctions et les commandes externes maintenant supprimées qui se trouvaient dans un répertoire utilisateur au début du $PATH
de l'utilisateur . Si ce que vous voulez savoir, ce sont les commandes que les utilisateurs ont exécutées, vous avez besoin d'une comptabilité de processus ou d'un système d'audit plus sophistiqué. voir Surveillance de l'activité sur mon ordinateur., Comment vérifier la durée d'exécution d'un processus après sa fin ?.
find /home -name .bash_history | xargs grep <string>
Ou :
grep string $(find /home -name .bash_history)
Notez que cela couvre les répertoires personnels dans les emplacements par défaut. Il serait préférable d'analyser /etc/passwd
ou invoquez getent
, et analysez la sortie de cela.
for i in $(getent passwd | cut -d: -f6 ); do grep string ${i}/.bash_history; done
Vous pourriez faire
find /home | grep bash_history | xargs grep "whatever"
Mais je ne pense pas vraiment que ce soit beaucoup mieux que ce que vous pensiez.