Este artículo fue publicado originalmente en go2linux.org el 20 de diciembre de 2008. El dominio ya no me pertenece, pero soy el autor original. Lo republico aquí en garron.me con correcciones y mejoras.
history es uno de esos comandos que uso todos los días. Una vez que aprendes algunos trucos con él, te preguntarás cómo trabajabas sin ellos.
Uso básico
Solo escribe history y obtienes una lista numerada de tus comandos recientes:
501 docker compose up -d
502 git status
503 grep -r "foo" .
504 history
El número a la izquierda es la posición del comando en el historial — lo necesitarás más adelante.
Lista tus comandos más usados
Este one-liner lo uso desde hace años. Te dice exactamente en qué comandos te apoyas más:
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10
Pasa la salida de history a awk, que extrae solo el nombre del comando, luego cuenta y ordena por frecuencia. La salida se ve así:
142 git
98 docker
67 ls
45 cd
32 grep
Buscar en el historial
Si recuerdas haber ejecutado un comando pero no la sintaxis exacta, filtra history con grep:
history | grep mount
Esto es útil para comandos largos que no quieres volver a escribir, como:
mount 192.168.1.1:/home/user /media/nfs
Re-ejecutar comandos
Una vez que encuentras el comando que buscas en el historial, no hace falta copiarlo y pegarlo.
Ejecutar el último comando de nuevo:
!!
Ejecutar un comando por su número en el historial:
!503
Ejecutar el último comando que empieza con una cadena:
!grep
Este último ejecuta el comando más reciente que empezaba con grep. Es útil, pero hay que tener cuidado — se ejecuta de inmediato sin pedir confirmación, y eso puede causar daño si estás en un directorio diferente. Por ejemplo, si antes ejecutaste rm *.log en /tmp y ahora estás en /etc, ten mucho cuidado.
Búsqueda inversa con Ctrl+R
Probablemente mi atajo de teclado favorito del shell. Presiona Ctrl+R y empieza a escribir cualquier parte de un comando:
(reverse-i-search)`mount': mount 192.168.1.1:/home/user /media/nfs
El shell busca hacia atrás en tu historial mientras escribes. Presiona Ctrl+R de nuevo para ir a la coincidencia anterior, y Enter para ejecutarlo. Presiona Ctrl+C para cancelar sin ejecutar nada.
Controlar el tamaño del historial
Dos variables de entorno controlan cuánto historial se guarda. Agrégalas a tu ~/.bashrc:
HISTSIZE=10000 # comandos guardados en memoria durante la sesión
HISTFILESIZE=20000 # comandos guardados en ~/.bash_history en disco
Los valores por defecto suelen ser 500 y 1000, que se llenan rápido. Yo los mantengo mucho más grandes.
Evitar duplicados y comandos ruidosos
HISTCONTROL te permite limpiar lo que se guarda:
HISTCONTROL=ignoredups # no guarda comandos duplicados consecutivos
HISTCONTROL=ignorespace # no guarda comandos que empiezan con espacio
HISTCONTROL=ignoreboth # ambas opciones anteriores
HISTCONTROL=erasedups # elimina todos los duplicados anteriores, no solo los consecutivos
El truco de ignorespace es útil cuando necesitas ejecutar un comando con una contraseña o argumento sensible — solo agrega un espacio al inicio y no se guardará en el historial.
Agregar marcas de tiempo al historial
Por defecto history no muestra fechas. Puedes cambiarlo así:
HISTTIMEFORMAT="%Y-%m-%d %H:%M "
Después de configurarlo, la salida de history se ve así:
501 2026-05-20 09:14 docker compose up -d
502 2026-05-21 14:33 git status
503 2026-05-27 10:02 grep -r "foo" .
Nota: las marcas de tiempo solo aplican a los comandos ejecutados después de configurar esta variable. Las entradas antiguas mostrarán la fecha epoch.
Limpiar el historial
Si necesitas borrar el historial de tu sesión:
history -c
Para borrar también el archivo de historial en disco:
history -c && history -w
Es un comando que uso mucho. Tengo muy mala memoria — si eres como yo, vas a amar history.