Я знаю, что в Bash есть переменные HISTSIZE
и HISTFILESIZE
, которые контролируют, как долго сохраняется история и сколько она сохраняется. Я хотел бы сохранить архив моей истории. Однако, если я установлю одну из двух упомянутых выше переменных на очень большое число, это сделает поиск старых команд очень трудным, и через некоторое время они могут быть удалены в любом случае.
Как я могу автоматически архивировать мои файлы истории bash, как только они достигают определенного размера, и применим ли этот метод к другим файлам журналов (таким как /var/log/auth.log
)?
Чтобы ответить на ваш второй вопрос, сначала:
Файлы журналов Ubuntu уже уже обработаны logrotate
для обеспечения их управляемости и в пределах ограничений по размеру.
Вы можете даже «злоупотреблять» этим для своих файлов истории, это довольно удобно.
#!/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 ".
Это решение сохраняет с датой и временем выполнения:
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/
Вы можете использовать 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/