Como posso rotacionar / arquivar automaticamente meus logs do histórico bash?

2

Eu sei que o Bash tem as variáveis HISTSIZE e HISTFILESIZE que controlam por quanto tempo o histórico é salvo e quanto dele é salvo. Eu gostaria de manter um arquivo da minha história. No entanto, se eu definir uma das duas variáveis mencionadas acima para um número muito grande, dificultará a pesquisa por comandos antigos e, após um tempo suficiente, eles poderão ser excluídos de qualquer maneira.

Como posso arquivar automaticamente meus arquivos de histórico bash quando eles atingem um determinado tamanho, e esse método é aplicável a outros arquivos de log (como /var/log/auth.log )?

    
por fouric 03.11.2013 / 18:43

4 respostas

4

#!/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

Extraído de Nunca mais perdi sua história de bash em " link ".

    
por eggonlegs 17.01.2014 / 03:46
1

Para responder à sua segunda pergunta primeiro:

Os arquivos de log do Ubuntu são processados por logrotate para mantê-los gerenciáveis e dentro dos limites de tamanho.

Você pode até mesmo "abusar" dele para seus arquivos de histórico, é bastante conveniente.

    
por thom 04.11.2013 / 03:41
0

Existe uma recomendação de script bash aqui

    
por ubuntu_tr 03.11.2013 / 18:51
0

Esta solução salva com data e hora de execução:

mkdir ~/.logs

adicione isso ao seu .bashrc ou .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'

para pesquisar no tipo de histórico:

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

tirada de link

    
por nurp 16.05.2018 / 13:55