Регистрация всех история ввода / вывода с терминала

Ubuntu 20.04 на виртуальной машине Hyper-V

Я пытаюсь сделать что-то похожее на то, что написано в в этом ответе . Я думаю, что этот ответ записывает все терминалы в определенный файл. Я хотел бы иметь возможность регистрировать все мои терминалы ввода / вывода по дням, если это возможно. Итак, когда я хочу узнать, что я делал в какой-то конкретный день, я могу зайти в файл журнала этих дней и прочитать ввод / вывод моего терминала.

1
задан 8 June 2020 в 16:56

1 ответ

Я не знаю, можно ли установить программное обеспечение на сервер, но ZSH - это FISH, альтернатива оболочке BASH. , храните метки времени в файлах истории для каждой команды. В ZSH сохраняется для каждой строки, а FISH использует две строки для каждой команды. Оба используют Unix Time Stamp. ЗШ : 1591635588: 0; ssh пользователь @ сервер ls / tmp рыбы 989 - cmd: ssh user @ server ls / tmp 990 когда: 1591387835

Я использую ZSH с установленным oh-my-zsh вместо bash. В файле истории ZSH (~ / .zsh_history) каждая команда (строка) хранится как bash, но в начале ставится временная метка Linux на момент запуска этой команды. Чтобы сохранить историю на стороне клиента, вы можете запустить команду через ssh:

$~> ssh user@server ls /tmp
$~> ssh user@server cat /etc/os-release

В ZSH она хранится примерно так:

$~> cat ~/.zsh_history
: 1591635588:0;ssh user@server ls /tmp
: 1591636831:0;ssh user@server cat /etc/os-release

Если вы запускаете AWK для файла, вы можете перевести временные метки:

$~> awk -F":" '{print strftime("%Y-%m-%d %H\:%M\:%S", $2),$3}' ~/.zsh_history 
2020-06-08 14:49:10 0;ssh user@server ls /tmp
2020-06-08 14:50:04 0;ssh user@server cat /etc/os-release

Вы можно фильтровать по дате, используя вместе с grep, например, и отправить его в файл:

$~> awk -F":" '{print strftime("%Y-%m-%d %H:%M:%S", $2),$3}' ~/.zsh_history \
| grep -E "2020-06-08" > ${HOME}/2020-06-08-history.log
0
ответ дан 19 June 2020 в 21:36

Другие вопросы по тегам:

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