Linux / Comando / history / Comando para mostrar una lista de comandos previamente ejecutados
En Linux, el comando history en Bash muestra el historial de comandos gestionado por la shell actual junto con números. Puedes consultar el historial para encontrar comandos anteriores o reejecutarlos, y el rango y guardado del historial dependen de la configuración de la shell.
Comprobando el historial de comandos
Ingrese el siguiente comando en un terminal Bash interactivo. history es un comando integrado de Bash que muestra la lista de historial de la shell actual.
history
La salida muestra el número de cada elemento y el comando. Por ejemplo, una línea que muestra 42 pwd significa que el elemento número 42 en el historial de la shell es pwd. Los números y el contenido varían según la cuenta, la sesión y la configuración del historial, así que no use directamente los números del ejemplo. El comando que ingrese se registra, no el resultado de la ejecución.
Para ver solo los elementos recientes, especifique un número. El siguiente comando muestra las últimas 10 entradas en el historial.
history 10
Este comando history 10 en sí mismo puede incluirse en la lista. Si el comando deseado no aparece, verifica la función de historial, el tamaño de almacenamiento y la configuración de exclusión.
Buscar y volver a ejecutar comandos
En la entrada interactiva predeterminada de Bash, presionar la tecla de flecha hacia arriba permite recordar y editar entradas anteriores. Presione Ctrl+R e ingrese un término de búsqueda para buscar en el historial hacia atrás. Puede verificar el contenido del comando encontrado y luego ejecutarlo o modificarlo.
En Bash interactivo con la expansión del historial habilitada, !! se expande a la entrada anterior del historial. !n se refiere al elemento con número n en la lista. Por ejemplo, el siguiente comando ejecuta el elemento si el número 42 está en la lista actual.
!42
Asegúrate de que el número coincida primero con el historial real. La expansión del historial generalmente se ejecuta inmediatamente después de la entrada, así que ten especial cuidado con comandos como eliminación de archivos o cambios de configuración. En shells no interactivos, la expansión del historial generalmente está deshabilitada por defecto, y el comportamiento puede diferir en otros shells.
Para ver solo el resultado de la expansión de la entrada anterior sin ejecutarla, enciérrala entre comillas simples e introdúcela de la siguiente manera. El comando que se muestra en la pantalla no se ejecutará.
history -p '!!'
Si configuras shopt -s histverify, el comando expandido se mostrará en la línea de edición en un Bash interactivo usando Readline, lo que te permite revisarlo antes de la ejecución. Para revertir la configuración en la shell actual, usa shopt -u histverify. Para más detalles, consulta la documentación de expansión del historial en Bash.
Dónde y cuándo se guarda el historial
Bash maneja el historial como una lista en la memoria y lee el historial desde el archivo especificado por HISTFILE al inicio. El archivo predeterminado típico es ~/.bash_history, pero esto puede variar dependiendo del entorno o del modo POSIX. Puedes verificar la configuración actual con el siguiente comando.
printf '%s\n' "$HISTFILE"
Cuando una shell con historial activo termina, se guarda en un archivo, pero si el archivo no se puede escribir, HISTFILE no se establece, o está vacío, no se guardará. Múltiples terminales tienen memorias de historial separadas, por lo que los comandos ejecutados en uno pueden no aparecer inmediatamente en otro. Según la opción histappend, el historial se añadirá al archivo o este se sobrescribirá al salir, y el resultado varía según la configuración y las sesiones simultáneas.
history -a agrega nuevas entradas que aún no se han añadido en la sesión actual al archivo de historial. Por otro lado, history -w sobrescribe el archivo de historial con la lista actual, lo que puede resultar en la pérdida de historial de otras sesiones. Si utilizas múltiples terminales, verifica esta diferencia antes de usarlo. El comportamiento de guardado se puede encontrar en la documentación de la función de historial de Bash.
Verificar el tamaño del historial y la configuración de exclusión
HISTSIZE controla el número de entradas de historial en la memoria, mientras que HISTFILESIZE controla el número máximo de líneas en el archivo de historial. Las entradas de varias líneas son excepciones al conteo de líneas en el archivo. Los valores actuales se pueden verificar de la siguiente manera.
printf 'HISTSIZE=%s\nHISTFILESIZE=%s\nHISTCONTROL=%s\nHISTIGNORE=%s\n' "$HISTSIZE" "$HISTFILESIZE" "$HISTCONTROL" "$HISTIGNORE"
HISTCONTROL y HISTIGNORE pueden determinar qué entradas excluir del historial. Por ejemplo, si HISTCONTROL incluye ignorespace, las entradas que comiencen con un espacio pueden ser excluidas de la lista de historial. Esto es solo una configuración relacionada con el historial del shell y no borra el historial almacenado en otros registros o programas.
Eliminando historial e información sensible
history -d n elimina el ítem número n de la lista de historial del shell actual. Primero, verifica el número real con history. history -c limpia toda la lista actual, por lo que debe usarse con precaución. Estos dos comandos no borran automáticamente el archivo de historial ya guardado ni las listas de otros shells.
Evite ingresar contraseñas o tokens directamente en la línea de comandos, ya que pueden quedar en el historial o en otros lugares. Si la información secreta ya ha sido expuesta, no asuma que simplemente eliminar el historial resuelve el problema; en su lugar, reemplace las credenciales y verifique el alcance de la exposición relacionada.




