historial infinito en bash
index | OSiUX | archive | charlas | docs | links
dot
|
git
|
img
|
plt
|
tty
|
uml
historial numérico
Por defecto bash mantiene un historial numérico, lo cual presenta de manera ordenada la secuencia de comandos ejecutados:
1786 ls -lht | head 1787 du -hs 1788 rm -f /tmp/* 1789 ls
historial para recordar
Mucho mejor es poder contar con un historial que además registre la fecha y hora de cada comando ejecutado:
22922 2021-03-17 22:47 c history_aliases | cclip 22923 2021-03-17 22:47 cd 22924 2021-03-17 22:47 cd bash/ 22925 2021-03-17 22:47 cdc 22926 2021-03-17 22:47 gir hist * 22927 2021-03-17 22:47 hhy 22928 2021-03-17 22:47 jn @blog 22929 2021-03-17 22:47 pwd 22930 2021-03-17 22:48 ff bash 22931 2021-03-17 22:48 ll 22932 2021-03-17 22:49 pomo 22933 2021-03-17 22:49 pomodoro
historial para no olvidar nada
Entonces, por un lado necesitamos registrar con un mejor formato cada
comando ejecutado y por otro lado queremos que el comando history
recuerde muchas líneas
1 y que además guarde
inmediatamente cada comando ejecutado
2, por si nos
quedamos sin batería o se cuelga el comando ejecutado :P
## Allow a larger history file export HISTSIZE=1000000 export HISTFILESIZE=1000000 ## Record timestamps export HISTTIMEFORMAT='%Y-%m-%d %H:%M ' ## Don’t store specific lines HISTCONTROL=ignoreboth ## Append history instead of rewriting it shopt -s histappend shopt -s checkwinsize ## Store history immediately export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
alias de historial
Algunos alias de historial me permiten ver rápidamente que hice hoy o ayer para asi poder registrar mejor las tareas o resolver algún misterio.
alias today='date +%Y-%m-%d' alias yesterday='echo $(date --date="yesterday" +%Y-%m-%d)' alias hh='history | grep $(today) | cut -c 19- | sort -u' alias hhy='history | grep $(yesterday) | cut -c 19- | sort -u'
archivando el historial
Hace años que tengo en el crontab
un script archive_bash_history
que se ocupa de archivar mi historial de bash a un archivo por cada
día, asi luego puedo auditar o divertime generando estadísticas :P
#!/bin/bash # This script comes with ABSOLUTELY NO WARRANTY, use at own risk # Copyright (C) 2014 Osiris Alejandro Gomez <osiux@osiux.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. YESTERDAY=$(date --date 'yesterday' +%F) DIR="$HOME/history" mkdir -p "$DIR" DAY="$YESTERDAY" [[ ! -z "$1" ]] && DAY="$1" BAK="$DIR/${DAY}.log" TMP="$DIR/${DAY}.tmp" cat "$HOME/.bash_history" | while read -r LINE do if [[ "$LINE" =~ ^#[0-9]+ ]] then EPOC="$(echo "$LINE" | tr -d "#")" DATE="$(date -d @$EPOC +%Y-%m-%d)" TIME="$(date -d @$EPOC +%H:%M)" BAK="$DIR/${DATE}.log" TMP="$DIR/${DATE}.tmp" else [[ "$DAY" = "$DATE" ]] && echo "$DATE $TIME $LINE" >> "$BAK" fi done sort -u "$BAK" > "$TMP" && mv -f "$TMP" "$BAK"
ChangeLog
2022-11-13 20:39
agregar y actualizar tags OpenGraph2021-03-17 23:54
agregar historial infinito enbash