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.