Время и дата в bash history
Часто при обращении клиентов с какими-то проблемами на серверах возникает вопрос, а кто и какие команды выполнял в операционной системе перед тем, как произошел инцидент. Для этого мы используем время в Bash History. По умолчанию в bash список последних команд ограничен 500-ми строками и показывает в bash history только команды, которые выполнялись под пользователем, под которым в данный момент выполняется команда
history
Что такое Bash History
Bash History — это журнал команд, вводимых пользователем в оболочке Bash. Он позволяет быстро повторить ранее введённые команды, сэкономив время на их повторный ввод. Однако, по умолчанию в history записываются только команды, без указания времени и даты их выполнения. Это может быть неудобно, если необходимо узнать, когда именно была выполнена конкретная команда.
Зачем нужна запись времени и даты
Добавление времени и даты в bash history может быть полезным в следующих случаях:
- Отладка и анализ: Вы можете понять, в какой момент была выполнена команда.
- Безопасность: Легче отслеживать действия пользователей, что важно для аудита.
- Удобство: Если команда вызвала ошибку, вы сможете сопоставить её с другими событиями в системе.
Как включить запись времени и даты в bash history
Для включения записи времени и даты выполнения команд необходимо настроить переменную окружения HISTTIMEFORMAT
. Она определяет формат временной метки, добавляемой к каждой команде.
Шаги настройки для Debian и Gentoo:
для Debian
Открываем для редактирования файл /etc/bash.bashrc
# vim /etc/bash.bashrc
И добавляем в него следующий код:
original_user=${SUDO_USER:-$(pstree -Alsu "$$" | sed -n "s/.*(\([^)]*\)).*($USER)[^(]*$/\1/p")}
export HISTTIMEFORMAT="<%F %T> (${original_user:-$USER}) [$$] "
export HISTSIZE=5000 # Количество команд в текущем сеансе
export HISTFILESIZE=5000 # Количество команд, сохраняемых в файле history
export HISTIGNORE="ls:history:w:htop:pwd:top:ifconfig:netstat"
export HISTCONTROL=ignoredups # Отключение дублирующихся записей
shopt -s histappend # Сохранение истории между сеансами
Здесь:
%F
— выводит дату в форматеYYYY-MM-DD
.%T
— выводит время в форматеHH:MM:SS
.
При этом надо не забыть установить утилиту pstree, что бы показывались пользователи выполнившие команды через sudo :
# apt install psmisc
для Gentoo
Создаем файл /etc/bash/bashrc.d/20-history.bash
vim /etc/bash/bashrc.d/20-history.bash
и добавляем в него следующий код :
export HISTTIMEFORMAT="%h %d %H:%M:%S "
export HISTSIZE=5000 # Количество команд в текущем сеансе
export HISTFILESIZE=5000 # Количество команд, сохраняемых в файле history
export HISTIGNORE="ls:history:w:htop:pwd:top:ifconfig:netstat"
export HISTCONTROL=ignoredups # Отключение дублирующихся записей
shopt -s histappend # Сохранение истории между сеансами
Здесь:
%F
— выводит дату в форматеYYYY-MM-DD
.%T
— выводит время в форматеHH:MM:SS
.
После этого нам нужно зайти заново и мы увидем совсем другой вывод информации по команде history
Полезные команды для работы с Bash History
- Поиск по истории:
НажмитеCtrl+R
и начните вводить искомую команду. Bash будет искать соответствия в истории. - Очистка истории:
Для удаления всех записей из истории выполните:
history -c
- Сохранение истории в файл вручную:
history -w
Вывод
Добавление времени и даты в bash history — это простой, но эффективный способ сделать работу в терминале более удобной и безопасной. Настройка занимает всего несколько минут, но может значительно облегчить анализ выполненных команд в будущем. Используйте эти настройки, чтобы сделать ваш рабочий процесс более прозрачным и организованным.