Cómo guardar un historial de comandos Bash prácticamente ilimitado en Linux
Configura Bash para no recortar el historial, conservar comandos entre sesiones y evitar que varias terminales sobrescriban tu archivo de history.
Bash guarda los comandos que escribes para que puedas recuperarlos posteriormente con las flechas del teclado, history o la búsqueda inversa. Sin embargo, la configuración predeterminada limita cuántos comandos conserva y, dependiendo de cómo esté configurado el shell, varias sesiones de terminal también pueden terminar sobrescribiendo parte del historial.
GNU Bash permite eliminar prácticamente esos límites mediante HISTSIZE y HISTFILESIZE. Si ambas variables reciben un valor numérico negativo, Bash deja de imponer un máximo de entradas en memoria y deja de truncar el archivo de historial. Activar además histappend evita que una sesión sobrescriba el archivo completo cuando termina.
Comprueba primero que realmente utilizas Bash
Esta configuración es específica de Bash. No debes copiarla directamente si utilizas Zsh, Fish u otro shell.
En una terminal ejecuta:
printf '%sn' "$BASH_VERSION"
Si aparece un número de versión de Bash, puedes continuar. Si la variable está vacía, comprueba qué shell estás utilizando antes de modificar archivos de configuración.
Comprueba cómo está configurado ahora tu historial
Antes de realizar cambios puedes ver los valores actuales:
printf 'HISTSIZE=%snHISTFILESIZE=%snHISTFILE=%sn' "$HISTSIZE" "$HISTFILESIZE" "$HISTFILE"
shopt -p histappend
Normalmente, el archivo utilizado para guardar el historial es ~/.bash_history.
HISTSIZE y HISTFILESIZE controlan cosas diferentes, por lo que conviene configurar ambos.
Qué diferencia hay entre HISTSIZE y HISTFILESIZE
HISTSIZE establece cuántos comandos mantiene Bash en la lista de historial de la sesión actual.
HISTFILESIZE controla el tamaño máximo del archivo de historial almacenado en disco.
Por ejemplo, tener un HISTSIZE muy grande pero un HISTFILESIZE pequeño puede provocar que parte del historial termine desapareciendo del archivo cuando Bash lo guarda.
GNU Bash documenta que un valor numérico inferior a cero elimina el límite de HISTSIZE. En el caso de HISTFILESIZE, un valor negativo impide que Bash trunque el archivo de historial.
Cómo configurar un historial Bash sin límite fijo
La configuración habitual de Bash para una cuenta de usuario se encuentra en ~/.bashrc.
Antes de modificarlo puedes crear una copia de seguridad:
cp ~/.bashrc ~/.bashrc.backup
Después abre el archivo con tu editor preferido. Por ejemplo:
nano ~/.bashrc
Añade estas líneas:
HISTSIZE=-1
HISTFILESIZE=-1
shopt -s histappend
Guarda el archivo y cierra el editor.
Qué hace exactamente esta configuración
La primera línea:
HISTSIZE=-1
indica a Bash que no aplique un límite numérico a la cantidad de comandos que conserva en su lista de historial.
La segunda:
HISTFILESIZE=-1
evita que Bash recorte ~/.bash_history a un número máximo de líneas cuando guarda el historial.
Finalmente:
shopt -s histappend
hace que Bash añada las nuevas entradas al archivo de historial al salir de una sesión en lugar de sustituir el contenido existente por la lista de esa sesión.
Aplica los cambios sin cerrar la terminal
Puedes abrir una terminal nueva o volver a cargar ~/.bashrc en la sesión actual:
source ~/.bashrc
Comprueba después los nuevos valores:
printf 'HISTSIZE=%snHISTFILESIZE=%sn' "$HISTSIZE" "$HISTFILESIZE"
shopt -p histappend
Deberías ver valores negativos para las dos variables y una salida indicando que histappend está activado.
Por qué histappend es importante si abres varias terminales
Bash carga normalmente el historial desde HISTFILE cuando comienza una sesión. Al salir, guarda el historial de esa sesión.
Si histappend está desactivado, Bash puede escribir su propia lista sustituyendo el contenido anterior del archivo. Esto es especialmente problemático cuando tienes varias terminales abiertas simultáneamente.
Con histappend, las nuevas entradas se añaden al archivo existente en lugar de sobrescribirlo.
Cómo guardar inmediatamente los comandos de la sesión actual
Incluso con histappend, no necesitas esperar siempre a cerrar Bash para escribir los nuevos comandos en el archivo.
GNU Bash incluye:
history -a
Este comando añade a HISTFILE las líneas nuevas introducidas durante la sesión actual que todavía no se habían guardado.
Puede resultar útil antes de cerrar una terminal de forma poco habitual, trabajar mediante SSH o realizar una operación después de la que quieres asegurarte de conservar inmediatamente el historial.
Cómo cargar comandos guardados por otra terminal
Si tienes varias sesiones de Bash abiertas, puedes leer las nuevas entradas que otras sesiones hayan añadido al archivo mediante:
history -n
GNU Bash define history -n precisamente para leer las líneas del archivo de historial que la sesión actual todavía no había cargado.
Una combinación útil cuando trabajas con varias terminales es:
history -a
history -n
La primera orden guarda los comandos nuevos de la terminal actual y la segunda incorpora los que otras sesiones hayan añadido al mismo archivo.
No reemplaces PROMPT_COMMAND a ciegas
Es posible automatizar history -a y history -n para ejecutarlos cada vez que aparece el prompt. Sin embargo, muchas distribuciones, herramientas de desarrollo y configuraciones personalizadas ya utilizan la variable PROMPT_COMMAND.
Por eso no conviene copiar una línea de Internet que sustituya completamente esa variable sin revisar antes su contenido:
printf '%sn' "$PROMPT_COMMAND"
Si necesitas sincronización automática entre múltiples terminales, integra las operaciones de history conservando cualquier configuración existente en lugar de sobrescribirla.
Cómo guardar también la fecha y hora de los comandos
Puedes hacer que history muestre la fecha y la hora asociadas a las entradas definiendo HISTTIMEFORMAT.
Por ejemplo, añade a ~/.bashrc:
HISTTIMEFORMAT='%F %T '
Después recarga la configuración:
source ~/.bashrc
Al ejecutar:
history
las entradas pueden mostrarse con un formato similar a:
2026-10-07 22:15:03 ls -lah
2026-10-07 22:15:10 git status
GNU Bash también utiliza esta información para conservar marcas de tiempo asociadas a las entradas en el archivo de historial.
Un historial ilimitado también puede guardar contraseñas y claves API
Conservar prácticamente todos los comandos tiene una consecuencia de seguridad importante: cualquier secreto escrito directamente en la línea de comandos puede terminar almacenado durante años en ~/.bash_history.
Esto puede incluir:
- claves API;
- tokens de acceso;
- contraseñas escritas como argumentos;
- URLs que contienen credenciales;
- comandos con secretos de bases de datos;
- credenciales utilizadas con herramientas HTTP o servicios en la nube.
Siempre que sea posible, evita escribir secretos literalmente en un comando. Utiliza mecanismos específicos de credenciales, variables de entorno gestionadas de forma segura, archivos protegidos o entrada interactiva cuando la herramienta lo permita.
Puedes evitar que algunos comandos entren en el historial
Bash dispone de HISTCONTROL para decidir qué comandos deben conservarse.
Una configuración habitual es:
HISTCONTROL=ignoreboth
ignoreboth combina dos comportamientos: evita guardar comandos duplicados consecutivos y excluye las líneas que comienzan con un espacio.
Con esa opción activa, un comando iniciado deliberadamente con un espacio puede quedar fuera del historial:
comando-sensible
Sin embargo, no debes tratar esto como un gestor de secretos. Solo evita que esa línea entre en el historial de Bash cuando se cumplen las condiciones correspondientes. El comando todavía puede dejar información en otros lugares, como registros de la aplicación, archivos temporales o la lista de procesos.
Si ya tienes una configuración personalizada de HISTCONTROL, revísala antes de sustituirla.
Cómo borrar un comando sensible que ya aparece en el historial
Primero localiza la entrada:
history
Después elimina el número correspondiente de la lista actual:
history -d NUMERO
Por ejemplo:
history -d 1542
El builtin history también permite escribir la lista actual al archivo mediante history -w, pero esta operación sobrescribe el archivo con la lista que tiene cargada esa sesión. Si trabajas con varias terminales simultáneamente, evita utilizarla sin entender el efecto sobre el historial compartido.
Y si el comando contenía una contraseña, token o clave API real, eliminarlo del historial no vuelve seguro automáticamente ese secreto. Si existe la posibilidad de que haya quedado expuesto, revócalo o cámbialo.
Comprueba los permisos de.bash_history
El historial puede contener rutas, nombres de servidores, comandos administrativos y otra información sensible. Comprueba sus permisos con:
ls -l ~/.bash_history
Si necesitas restringir el archivo para que solo tu usuario pueda leerlo y escribirlo:
chmod 600 ~/.bash_history
Esto no protege el historial frente a un usuario que ya tenga acceso administrativo al sistema, pero evita permisos excesivamente abiertos sobre el archivo.
Cuánto puede crecer un historial sin límite
Usar valores negativos no significa que Bash borre nunca automáticamente las entradas antiguas por tamaño. El archivo puede continuar creciendo mientras sigas utilizando el mismo usuario.
Para la mayoría de usuarios, el texto de los comandos ocupa relativamente poco espacio frente a otros archivos, pero en sistemas utilizados durante muchos años o con una actividad muy elevada conviene revisar periódicamente:
du -h ~/.bash_history
wc -l ~/.bash_history
Si prefieres evitar un archivo que crezca indefinidamente, puedes sustituir los valores negativos por un límite alto, por ejemplo decenas o cientos de miles de entradas.
Configuración recomendada para conservar el historial
Si quieres una configuración sencilla que no aplique un límite fijo y reduzca el riesgo de que una sesión sobrescriba las anteriores, las líneas esenciales en ~/.bashrc son:
HISTSIZE=-1
HISTFILESIZE=-1
shopt -s histappend
Después utiliza history -a cuando quieras escribir inmediatamente los comandos nuevos y history -n cuando necesites importar entradas guardadas por otras sesiones.
La contrapartida de conservar más historial es también conservar más información potencialmente sensible. Antes de convertir ~/.bash_history en un registro de años de trabajo, revisa cómo introduces contraseñas, tokens y claves API y protege adecuadamente el archivo.