Как я могу автоматически вращать / архивировать журналы истории bash?

Я знаю, что в Bash есть переменные HISTSIZE и HISTFILESIZE, которые контролируют, как долго сохраняется история и сколько она сохраняется. Я хотел бы сохранить архив моей истории. Однако, если я установлю одну из двух упомянутых выше переменных на очень большое число, это сделает поиск старых команд очень трудным, и через некоторое время они могут быть удалены в любом случае.

Как я могу автоматически архивировать мои файлы истории bash, как только они достигают определенного размера, и применим ли этот метод к другим файлам журналов (таким как /var/log/auth.log)?

3
задан 30 September 2017 в 19:23

5 ответов

Чтобы ответить на ваш второй вопрос, сначала:

Файлы журналов Ubuntu уже уже обработаны logrotate для обеспечения их управляемости и в пределах ограничений по размеру.

Вы можете даже «злоупотреблять» этим для своих файлов истории, это довольно удобно.

0
ответ дан 30 September 2017 в 19:23
#!/bin/sh
# This script creates monthly backups of the bash history file. Make sure you have
# HISTSIZE set to large number (more than number of commands you can type in every
# month). It keeps last 200 commands when it "rotates" history file every month.
# Typical usage in a bash profile:
#
# HISTSIZE=90000
# source ~/bin/history-backup
#
# And to search whole history use:
# grep xyz -h --color ~/.bash_history.*
#

KEEP=200
BASH_HIST=~/.bash_history
BACKUP=$BASH_HIST.$(date +%y%m)

if [ -s "$BASH_HIST" -a "$BASH_HIST" -nt "$BACKUP" ]; then
  # history file is newer then backup
  if [[ -f $BACKUP ]]; then
    # there is already a backup
    cp -f $BASH_HIST $BACKUP
  else
    # create new backup, leave last few commands and reinitialize
    mv -f $BASH_HIST $BACKUP
    tail -n$KEEP $BACKUP > $BASH_HIST
    history -r
  fi
fi

Взято из Никогда больше не терял свою историю bash на " https://lukas.zapletalovi.com ".

0
ответ дан 30 September 2017 в 19:23

Здесь есть рекомендация bash-скрипта

.
0
ответ дан 30 September 2017 в 19:23

Это решение сохраняет с датой и временем выполнения:

mkdir ~/.logs

добавьте это в ваш .bashrc или .bash_profile:

export PROMPT_COMMAND='if [ "$(id -u)" -ne 0 ]; then echo "$(date "+%Y-%m-%d.%H:%M:%S") $(pwd) $(history 1)" >> ~/.logs/bash-history-$(date "+%Y-%m-%d").log; fi'

для поиска в типе истории:

grep -h logcat ~/.logs/bash-history-2016-04*

взято из https://spin.atomicobject.com/2016/05/28/log-bash-history/

0
ответ дан 30 September 2017 в 19:23

Вы можете использовать logrotate для резервного копирования файла ~/.bash_history.

Создайте файл конфигурации для logrotate в /etc/logrotate.d/bash_history.

/home/YOUR_USERNAME/.bash_history {
    weekly
    missingok
    rotate 5
    size 5000k
    nomail
    notifempty
    create 600 YOUR_USERNAME YOUR_USERNAME
}

Вы можете проверить, работает ли это с помощью этой команды:

sudo logrotate --force /etc/logrotate.d/bash_history

Чтобы просмотреть файлы:

ls ~/.bash_history*

Я нашел это на этой веб-странице https://kowalcj0.github.io/2019/05/13/logrotate-bash-history/

1
ответ дан 13 January 2021 в 20:17

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

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