Я могу искать историю удара через всех пользователей на сервере?

Я изменил бы экранную привязку клавиш далеко от esc до чего-то как ctrl. Я не испытал ничего как то, что Вы описываете с привязкой значения по умолчанию в .screenrc в AIX, Fedora, Debian или Ubuntu.

20
15.02.2012, 09:04
3 ответа

Использовать getent перечислить корневые каталоги.

getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern" 

Если Ваши корневые каталоги находятся в известном месте, это могло бы быть столь же просто как

grep -e "$pattern" /home/*/.bash_history

Конечно, если пользователь использует другую оболочку или другое значение HISTFILE, это не скажет Вам очень. И при этом это не скажет Вам о командах, которые не выполнялись через оболочку, или о псевдонимах и функциях и теперь удаленных внешних командах, которые были в некотором пользовательском каталоге рано в пользователе $PATH. Если то, что Вы хотите знать, - то, что управляет, чтобы пользователи работали, Вы должны обработать учет или некоторую более необычную систему аудита; посмотрите Контролирующее действие по моему компьютеру., Как проверить, сколько времени процесс бежал за законченным?.

25
27.01.2020, 19:44
  • 1
    +1 для предложения процесса, считающего вместо этого. Файлы истории действительно для пользовательского удобства и нет никаких простых способов сделать их достаточно надежными для любого вида регистрирующихся целей. –  jw013 15.02.2012, 09:45
  • 2
    @jw013 Да, у меня уже была своя заливка того, как легкий это должно отредактировать / изменяют и иначе унавоживают с историей оболочки. = | –  Wesley 15.02.2012, 18:45
  • 3
    Это - старый вопрос, но это был мой первый результат Google, который поэтому, возможно, стоит добавить к. Я изменил это, чтобы проверить, что файл существует прежде, чем попробовать к grep его: getent passwd | cut -d : -f 6 | sed "s:$:/.bash_history:" | xargs -d'\n' -I{} sh -c "[ -f {} ] && echo {}" | xargs -d'\n' grep -Hn -e "$pattern" –  BryKKan 05.10.2017, 00:03
  • 4
    @BryKKan, Игнорирующий несуществующие файлы, является хорошей идеей. Остерегайтесь этого способ, которым Вы делаете, это изворотливо: это должно работать на практике, учитывая, что имена типичного пользователя не содержат “странные” символы, но в общем использовании {} как это очень опасно. Имя файла интерполировано непосредственно в сценарии. Если у Вас есть имя файла (здесь: имя пользователя) содержащий, скажем, $(rm -rf /) или ;rm -rf /;, команда будет выполняться. Всегда передавайте имена файлов как аргументы сценариям оболочки, никогда не используйте, находят или xargs's {} механизм. –  Gilles 'SO- stop being evil' 05.10.2017, 00:13
find /home -name .bash_history | xargs grep <string>

Кроме того:

grep string $(find /home -name .bash_history)

Обратите внимание, что это покрывает корневые каталоги в местоположениях по умолчанию. Было бы лучше проанализировать /etc/passwd или вызовите getent, и проанализируйте вывод этого.

for i in $(getent passwd | cut -d: -f6 ); do grep string ${i}/.bash_history; done
4
27.01.2020, 19:44

Вы могли сделать

find /home | grep bash_history | xargs grep "whatever"

Но я действительно не думаю, что это намного лучше затем, что Вы думали.

3
27.01.2020, 19:44

Теги

Похожие вопросы