Cómo usar el comando history en Linux

Contenidos

Un indicador de terminal en una computadora portátil con Linux.

El shell de Linux guarda un historial de los comandos que ejecuta, y puede buscarlo para repetir los comandos que ha ejecutado en el pasado. Una vez que comprenda el comando de historial de Linux y cómo usarlo, puede incrementar significativamente su productividad.

Manipular la historia

Como George Santayana dijo la famosa, «Aquellos que no pueden recordar el pasado están condenados a repetirlo». Desafortunadamente, en Linux, si no puede recordar el pasado, no puede repetirlo, inclusive si lo desea.

Fue entonces cuando Linux history El comando es útil. Te posibilita revisar y repetir tus comandos anteriores. Esto no tiene la intención de promover la pereza o ahorrar tiempo; además hay un factor de eficiencia (y precisión) en juego. Cuanto más largo y complicado sea un comando, más difícil será recordarlo y escribirlo sin cometer un error. Hay dos tipos de errores: uno que impide que el comando funcione y otro que posibilita que el comando funcione, pero hace que haga algo inesperado.

los history comando elimina esos problemas. Como la mayoría de los comandos de Linux, hay más de lo que piensas. A pesar de esto, si aprende a usar el history comando, puede mejorar su uso de la línea de comandos de Linux, todos los días. Es una buena inversión de tu tiempo. Hay formas mucho mejores de usar history comando que simplemente presionar la flecha hacia arriba repetidamente.

El comando de la historia

En su forma más simple, puede usar el history comando simplemente escribiendo su nombre:

history

La lista de comandos utilizados previamente se escribe en la ventana del terminal.

Los comandos están numerados, con los usados ​​más recientemente (aquellos con los números más altos) al final de la lista.

Para ver un cierto número de comandos, puede pasar un número a history en la línea de comando. A modo de ejemplo, para ver los últimos 10 comandos que ha utilizado, escriba lo siguiente:

history 10

Puede lograr el mismo resultado si canaliza history a través de tail mando. Para hacerlo, escriba lo siguiente:

history | tail -n 10

RELACIONADO: Cómo utilizar Pipes en Linux

Comandos repetidos

Si desea reutilizar un comando de la lista del historial, escriba un signo de exclamación (!) Y el número del comando sin espacios en el medio.

A modo de ejemplo, para repetir el comando número 37, debe escribir este comando:

!37

Para repetir el último comando, escriba dos signos de exclamación, nuevamente, sin espacios:

!!

Esto puede ser útil cuando emite un comando y se olvida de utilizar sudo . Escribe sudo, un espacio, los signos de exclamación dobles y posteriormente presione Enter.

Para el siguiente ejemplo, escribimos un comando que necesita sudo. En lugar de volver a escribir toda la línea, podemos guardar un montón de pulsaciones de teclas y simplemente escribir sudo !!, Como se muestra abajo:

mv ./my_script.sh /usr/local/bin/
sudo !!

Por eso, puede escribir el número respectivo de la lista para repetir un comando o utilizar los signos de exclamación dobles para repetir el último comando que utilizó. A pesar de esto, ¿qué sucede si desea repetir el quinto u octavo comando?

Puede utilizar un signo de exclamación, un guión (-) y el número de cualquier comando anterior (nuevamente, sin espacios) para repetirlo.

Para repetir el decimotercer comando anterior, debe escribir lo siguiente:

!-13

Búsqueda de comandos por cadena

Para repetir el último comando que comienza con una cadena en particular, puede escribir un signo de exclamación y posteriormente la cadena sin espacios y posteriormente presionar Enter.

A modo de ejemplo, para repetir el último comando que comenzó con sudo, escribirías este comando:

!sudo

A pesar de esto, hay un elemento de peligro en esto. Si el último comando que comenzó con sudo no es el que crees que es, ejecutarás el comando incorrecto.

A pesar de esto, para proporcionar una red de seguridad, puede usar el :p (imprimir) modificador, como se muestra a continuación:

!sudo:p

Esto instruye history para imprimir el comando en la ventana del terminal, en lugar de ejecutarlo. Esto le posibilita ver el comando antes de usarlo. Si es el comando que desea, presione la flecha hacia arriba y posteriormente presione Entrar para usarlo.

Si desea hallar un comando que contenga una cadena en particular, puede utilizar un signo de exclamación y un signo de interrogación.

A modo de ejemplo, para buscar y ejecutar el primer comando coincidente que contiene la palabra «alias», debe escribir este comando:

!?aliases

Esto encontrará cualquier comando que contenga la cadena «alias», sin tener en cuenta dónde aparezca en la cadena.

Búsqueda interactiva

Una búsqueda interactiva le posibilita recorrer una lista de comandos coincidentes y repetir el que desee.

Simplemente presione Ctrl + r para iniciar la búsqueda.

Una ventana de terminal después de presionar "Ctrl + r".

A medida que escribe la pista de búsqueda, aparecerá el primer comando coincidente. Las letras que escribe aparecen entre la comilla invertida (`) y el apóstrofo (‘). Los comandos coincidentes se actualizan a medida que escribe cada letra.

Una búsqueda "Ctrl + r" con "sudo" escrito como pista de búsqueda.

Cada vez que presiona Ctrl + r, busca hacia atrás el siguiente comando coincidente, que aparece en la ventana de la terminal.

Cuando presione Entrar, se ejecutará el comando mostrado.

Para editar un comando antes de ejecutarlo, presione la tecla de flecha izquierda o derecha.

El comando aparece en la línea de comandos y puede editarlo.

Un comando en la línea de comandos con la edición habilitada.

Puede usar otras herramientas de Linux para buscar en el listado del historial. A modo de ejemplo, para canalizar la salida de history dentro grep y buscar comandos que contengan la cadena «Alias» puede usar este comando:

history | grep aliases

Modificar el último comando

Si necesita corregir un error tipográfico y posteriormente repetir el comando, puede utilizar el signo de intercalación (^) para modificarlo. Este es un gran truco para tener bajo la manga cada vez que escribe mal un comando o desea volver a ejecutar uno con una opción o parámetro de línea de comandos distinto.

Para usarlo, escriba (sin espacios) un signo de intercalación, el texto que desea reemplazar, otro signo de intercalación, el texto con el que desea reemplazarlo, otro signo de intercalación y posteriormente presione Entrar.

A modo de ejemplo, suponga que escribe el siguiente comando, escribiendo accidentalmente «shhd» en lugar de «sshd»:

sudo systemctl start shhd

Puede corregir esto fácilmente escribiendo lo siguiente:

^shhd^sshd^

El comando se ejecuta con «shhd» corregido a «sshd».

Eliminación de comandos de la lista del historial

Además puede quitar comandos de la lista del historial con el -d (quitar) opción. No hay razón para mantener su comando mal escrito en el listado del historial.

Puedes utilizar grep para encontrarlo, pase su número a history con el -d opción para eliminarlo, y posteriormente buscar nuevamente para asegurarse de que haya desaparecido:

history | grep shhd
history -d 83
history | grep shhd

Además puede pasar una serie de comandos al -d opción. Para quitar todas las entradas de la lista de 22 a 32 (inclusive), escriba este comando:

history -d 22 32

Para quitar solo los últimos cinco comandos, puede escribir un número negativo, así:

history -d -5

Actualización manual del archivo de historial

Cuando inicia sesión o abre una sesión de terminal, la lista del historial se lee desde el archivo de historial. En Bash, el archivo histórico predeterminado es .bash_history.

Cualquier cambio que realice en la sesión actual de la ventana de la terminal solo se escribe en el archivo de historial cuando cierra la ventana de la terminal o cierra la sesión.

Suponga que desea abrir otra ventana de terminal para tener acceso a la lista completa del historial, incluidos los comandos que escribió en la primera ventana de terminal. los -a La opción (todo) le posibilita hacer esto en la primera ventana de terminal antes de abrir la segunda.

Para usarlo, escriba lo siguiente:

history -a

Los comandos se escriben silenciosamente en el archivo histórico.

Si desea escribir todos los cambios de la lista del historial en el archivo de historial (si eliminó algunos comandos antiguos, a modo de ejemplo), puede utilizar el -w (escribir) opción, así:

history -w

Eliminar la lista del historial

Para eliminar todos los comandos de la lista del historial, puede utilizar el -c (eliminar) opción, de la próxima manera:

history -c

Si al mismo tiempo desea forzar estos cambios en el archivo de historial, use el -w opción, así:

history -w

Seguridad e historial de archivos

Si utiliza alguna aplicación que requiera que escriba información confidencial (como contraseñas) en la línea de comando, recuerde que esto además se guardará en el archivo de historial. Si no desea que se guarde cierta información, puede utilizar la próxima estructura de comandos para eliminarla de la lista del historial de inmediato:

special-app my-secret-password;history -d $(history 1)
history 5

Esta estructura incluye dos comandos separados por punto y coma (;). Analicemos esto:

  • aplicación especial: El nombre del programa que estamos usando.
  • mi-contraseña-secreta: La contraseña secreta que debemos proporcionar para la aplicación en la línea de comando. Este es el final del comando uno.
  • historia -d: En el comando dos, invocamos el -d (eliminar) opción de history. Lo que vamos a quitar se encuentra en la próxima parte del comando.
  • $ (historial 1): Esto utiliza una sustitución de comando. La parte del comando contenida en el $() se ejecuta en una subcapa. El resultado de esa ejecución se publica como texto en el comando original. los history 1 comando devuelve el comando anterior. Por eso, puede pensar en el segundo comando como history -d «último comando aquí».

Puedes utilizar el history 5 comando para asegurarse de que el comando que contiene la contraseña se eliminó de la lista del historial.

A pesar de esto, hay una forma aún más sencilla de hacer esto. Debido a que Bash ignora las líneas que comienzan con un espacio de forma predeterminada, solo incluya un espacio al comienzo de la línea, de la próxima manera:

 special-app another-password
history 5

El comando con la contraseña no se agrega a la lista del historial. El motivo por la que este truco funciona está contenida en el .bashrc expediente.

El archivo .bashrc

los .bashrc El archivo se ejecuta cada vez que inicia sesión o abre una ventana de terminal. Además contiene algunos valores que controlan el comportamiento del history mando. Editemos este archivo con gedit.

Escriba lo siguiente:

gedit .bashrc

Cerca de la parte de arriba del archivo, verá dos entradas:

  • HISTSIZE: El número máximo de entradas que puede contener la lista del historial.
  • HISTFILESIZE: El límite para el número de líneas que puede contener un archivo histórico.

".bashrc" en el editor gedit.

Estos dos valores interactúan de las siguientes formas:

  • Cuando inicia sesión o inicia una sesión de ventana de terminal, la lista del historial se completa desde el .bash_history expediente.
  • Cuando cierra una ventana de terminal, el número máximo de comandos establecidos en HISTSIZE se guardan en el .bash_history expediente.
  • Si el histappend La opción de shell está habilitada, los comandos se añaden a .bash_history. Si histappend no está configurado, .bash_history se sobrescribe.
  • Después de guardar los comandos de la lista del historial para .bash_history , el archivo de historial se trunca para contener no más de HISTFILESIZE líneas.

Además cerca de la parte de arriba del archivo, verá una entrada para el HISTCONTROL valor.

La entrada "HISTCONTROL" en el archivo ".bashrc" en gedit.

Puede determinar este valor para realizar cualquiera de las siguientes acciones:

  • ignorespaces:Las líneas que comienzan con un espacio no se agregan a la lista del historial.
  • ignoredups:Los comandos duplicados no se agregan al archivo de historial.
  • ignoreboth:Habilita ambos de los anteriores.

Además puede enumerar comandos específicos que no desea agregar a su lista de historial. Sepárelos con dos puntos (:) y póngalos entre comillas (“…”).

Seguiría esta estructura para agregar una línea a su .bashrc archivo y sustituya los comandos que desea que se ignoren:

export HISTIGNORE="ls:history"

Un comando "export HISTIGNORE =" ls: history "en gedit.

Utilizar marcas de tiempo

Si desea agregar marcas de tiempo a la lista del historial, puede utilizar el HISTIMEFORMAT configuración. Para hacerlo, simplemente agregue una línea como la próxima a su .bashrc expediente:

export HISTTIMEFORMAT="%c "

Tenga en cuenta que hay un espacio antes de las comillas de cierre. Esto evita que la marca de tiempo coincida con los comandos de la lista de comandos.

Un comando "export HISTTIMEFORMAT ="% c "en gedit.

Ahora, cuando ejecuta el comando history, ve las marcas de fecha y hora. Tenga en cuenta que todos los comandos que estaban en el listado del historial antes de agregar las marcas de tiempo se marcarán con la fecha y la hora del primer comando que reciba una marca de tiempo. En este ejemplo que se muestra a continuación, este fue el comando 118.

Esa es una marca de tiempo muy larga. A pesar de esto, puede usar tokens distintos a %c para refinarlo. Los otros tokens que puede utilizar son:

  • %d: Día
  • %m: Mes
  • %y: Año
  • %H: Hora
  • %M: Minutos
  • %S: Segundos
  • %F: Fecha completa (formato año-mes-fecha)
  • %T: Hora (formato de hora: minutos: segundos)
  • %c: Sello completo de fecha y hora (formatos de día-fecha-mes-año y hora: minutos: segundos)

Experimentemos y usemos algunos tokens diferentes:

export HISTTIMEFORMAT="%d n%m %T "

El comando export HISTTIMEFORMAT = "% dn% m% T" en gedit.

La salida utiliza el día, el mes y la hora.

A pesar de esto, si eliminamos el día y el mes, solo mostrará la hora.

Cualquier cambio que realice en HISTIMEFORMAT se aplican a toda la lista del historial. Esto es factible debido a que el tiempo de cada comando se almacena como número de segundos desde la época de Unix. los HISTTIMEFORMATLa directiva simplemente especifica el formato utilizado para convertir esa cantidad de segundos en un estilo legible por humanos, como:

export HISTTIMEFORMAT="%T "

El comando "export HISTTIMEFORMAT ="% T "en gedit.

Nuestra producción ahora es más manejable.

Además puede usar el history comando para auditar. A veces, revisar los comandos que ha usado en el pasado puede ayudarlo a identificar qué pudo haber generado un obstáculo.

Tal como puede en la vida, en Linux, puede utilizar el history Mando a revivir los buenos tiempos y aprender de los malos.

RELACIONADO: 37 comandos importantes de Linux que debe conocer

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.