Cómo usar el comando de historial en Linux
El shell de Linux mantiene un historial de los comandos que ha ejecutado, que puede buscar 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 aumentar significativamente su productividad.
manipulación de la historia
como George Santayana dijo célebremente, «Aquellos que no pueden recordar el pasado están condenados a repetirlo». Desafortunadamente, en Linux, si no puedes recordar el pasado, no puedes repetirlo, incluso si quisieras.
En este momento Linuxhistory
Los comandos son útiles. Le permite ver y repetir sus comandos anteriores. No se trata solo de fomentar la pereza o ahorrar tiempo: hay un factor de eficiencia (y precisión) en juego. Cuanto más largo y complejo sea el comando, más difícil será recordarlo y escribirlo sin cometer errores. Hay dos tipos de errores: los que impiden que el comando funcione y los que permiten que el comando funcione pero hacen que haga algo inesperado.
Deberíahistory
comando elimina estos problemas. Como la mayoría de los comandos de Linux, más de lo que piensas. Sin embargo, si aprende a usar elhistory
comandos que mejoran su uso de la línea de comandos de Linux todos los días.history
Esta es una buena inversión de su tiempo. Hay más de clics repetidos en la flecha hacia arribaMejor manera de usar este comando.
orden historico
En su forma más simple, ustedhistory
Simplemente escriba el nombre del comando para usar el comando:
historia
Luego, escriba una lista de los comandos utilizados anteriormente en la ventana del terminal.
Los comandos están numerados, con el comando utilizado más recientemente (el comando con el número más alto) al final de la lista.
Para ver un cierto número de comandos, puedehistory
Pase un número en la línea de comando. Por ejemplo, para ver sus últimos 10 comandos, escriba:
Historia 10
history
si pasastubería, puede lograr el mismo resultado con tail
Ordenar. Para hacer esto, escriba lo siguiente:
historia |cola -n 10
repetir comando
Si desea reutilizar un comando en la lista del historial, escriba un signo de exclamación (!) y el número del comando sin espacios.
Por ejemplo, para repetir el comando 37, escribiría:
!37
Para repetir el comando anterior, escriba dos signos de exclamación nuevamente, sin espacios:
! !
Esto es útil cuando emite un comando y se olvida de usarsudo
.escribesudo
, un espacio, dos signos de exclamación y presione Entrar.
Para el siguiente ejemplo, escribimos un requeridosudo
. En lugar de volver a escribir toda la línea, podemos guardar un montón de pulsaciones de teclas y simplemente escribirsudo !!
,Como sigue:
mv./mi_script.sh /usr/local/bin/
Sudo!
Así que puedes repetir un comando escribiendo el número correspondiente de la lista, o usar un signo de exclamación doble para repetir el último comando que usaste. Pero, ¿y si quieres repetir el quinto u octavo pedido?
Puede repetirlo con un signo de exclamación, un guión (-) y el número de cualquier comando anterior (nuevamente, sin espacios).
Para repetir el decimotercer comando anterior, escribiría lo siguiente:
!-13
Buscar comandos por cadena
Para repetir el último comando comenzando con una cadena específica, puede escribir un signo de exclamación, luego la cadena sin espacios y presionar Entrar.
Por ejemplo, para repetir el último comando comenzando consudo
, puede escribir el siguiente comando:
!sudo
Sin embargo, hay un elemento de peligro en esto. Si el último comando comenzósudo
No es el que crees que es, estás lanzando el comando equivocado.
Sin embargo, para proporcionar una red de seguridad, puede utilizar:p
(imprimir) modificador, de la siguiente manera:
! sudo:p
esto indicahistory
Imprima el comando en la ventana del terminal en lugar de ejecutarlo. Esto le permite ver los comandos antes de usarlos. Si ese es el comando que desea, presione la flecha hacia arriba y presione Entrar para usarlo.
Si desea buscar comandos que contengan una cadena específica, puede usar signos de exclamación e interrogación.
Por ejemplo, para buscar y ejecutar el primer comando coincidente que contenga la palabra «alias», escribiría:
!? Alias
Esto encontrará cualquier comando que contenga la cadena «alias», sin importar dónde aparezca en la cadena.
búsqueda interactiva
La búsqueda interactiva le permite omitir la lista de comandos coincidentes y repetir los que desee.
Simplemente presione Ctrl+r para comenzar a buscar.
A medida que escribe una pista de búsqueda, aparecerá el primer comando coincidente. Las letras que escribe aparecen entre comillas graves (`) y apóstrofes (‘). A medida que escribe cada letra, se actualizan los comandos coincidentes.
Cada vez que presiona Ctrl+r, busca hacia atrás el siguiente comando coincidente, que aparece en la ventana del terminal.
Cuando presiona Enter, se ejecuta 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 comando y puede editarlo.
Puede usar otras herramientas de Linux para buscar en la lista de historial. Por ejemplo, para canalizar la salidahistory
llegargrep
y Buscar comandos que contengan la cadena «alias» puede usar este comando:
historia |alias de grep
Modificar el último comando
Si necesita corregir un error tipográfico y luego repetir el comando, puede modificarlo con un signo de intercalación (^). Este es un buen truco cada vez que escribe mal un comando o desea volver a ejecutar un comando con diferentes opciones o argumentos en la línea de comandos.
Para usarlo, escriba (sin espacios) un signo de intercalación, el texto a reemplazar, otro signo de intercalación, el texto a reemplazar, otro signo de intercalación y presione Entrar.
Por ejemplo, suponga que escribe el siguiente comando y accidentalmente escribe «shhd» en lugar de «sshd»:
sudo systemctl start shhd
Puede corregir esto fácilmente escribiendo:
^shhd^sshd^
Se corrigió «shhd» a «sshd» al ejecutar el comando.
eliminar comando de la lista de historial
También puedes usar-d
La opción (eliminar) elimina un comando de la lista del historial. No hay razón para mantener los comandos mal escritos en la lista del historial.
puedes usarlogrep
Encuéntralo, pasa su número para borrarlohistory
de-d
opción, luego busque de nuevo para asegurarse de que se ha ido:
historia |grep shhd
historia -d 83
historia |grep shhd
También puede pasar una secuencia de comandos al-d
opcionesPara eliminar todas las entradas de la lista de 22 a 32 inclusive, escriba el siguiente comando:
historia -d 22 32
Para eliminar solo los últimos cinco comandos, puede escribir un número negativo, como este:
historia -d -5
Actualizar manualmente los archivos de historial
Cuando inicia sesión o abre una sesión de terminal, la lista de historial se lee desde el archivo de historial. En Bash, el archivo de historial predeterminado es.bash_history
.
Cualquier cambio que realice en la sesión actual de la ventana del terminal solo se escribe en el archivo de historial cuando cierra la ventana del terminal o cierra la sesión.
Suponga que desea abrir otra ventana de terminal para acceder a la lista completa del historial, incluidos los comandos que escribió en la primera ventana de terminal.(-a
all) le permite hacer esto en la primera ventana de terminal antes de abrir la segunda.
Para usarlo, escribe lo siguiente:
historia-a
El comando escribe silenciosamente en el archivo de historial.
Si desea escribir todos los cambios en la lista de historial en el archivo de historial (por ejemplo, si elimina algunos comandos antiguos), puede usar-w
(escribir) opción, de la siguiente manera:
historia-w
borrar lista de historial
Para borrar todos los comandos de la lista del historial, puede utilizar-c
opción (clara), de la siguiente manera:
historia-c
Si también desea forzar estos cambios en el archivo de historial, use el-w
opciones, de la siguiente manera:
historia-w
Seguridad y Documentos Históricos
Si usa alguna aplicación que requiere que ingrese información confidencial (como contraseñas) en la línea de comando, recuerde que esto también se guarda en el archivo de historial. Si no desea guardar alguna información, puede usar la siguiente estructura de comandos para eliminarla de la lista de historial inmediatamente:
aplicaciones especiales mi contraseña secreta; historial -d $ (historial1)
historia 5
Esta estructura consta de dos comandos separados por un punto y coma (;). Vamos a desglosarlo:
- aplicación especial: El nombre del programa que estamos usando.
- mi codigo secreto: Necesitamos la contraseña secreta dada a la aplicación en la línea de comando. Este es el final de la orden uno.
- historia-d: En el comando dos, llamamos
-d
(eliminar) opciónhistory
. Lo que queremos eliminar está en la siguiente parte del comando. - $(historia1): Esto utiliza la sustitución de comandos.parte del comando
$()
Ejecutar en una subcapa. El resultado de esta ejecución se publica como texto en el comando original. Deberíahistory 1
comando vuelve al comando anterior. Entonces puede pensar en el segundo comando como history -d «último comando aquí».
Puedes usar elhistory 5
comando para asegurarse de que los comandos que contienen contraseñas se eliminen de la lista del historial.
Sin embargo, hay una manera más fácil de hacer esto. Debido a que Bash ignora las líneas que comienzan con un espacio en blanco de manera predeterminada, simplemente incluya un espacio al comienzo de la línea, como este:
Otra contraseña para aplicaciones especiales
historia 5
Los comandos con contraseña no se agregan a la lista del historial. La razón por la que este truco funciona está contenida en el.bashrc
en el archivo.
archivo.bashrc
.bashrc
Se ejecuta cada vez que inicia sesión o abre una ventana de terminalEl documento. También contiene algunos controles.history
El valor del comportamiento del comando. Editemos este archivo congedit
.
Introduzca la siguiente:
editor.bashrc
Cerca de la parte superior del archivo, verá dos entradas:
HISTSIZE
: El número máximo de entradas que puede contener la lista de historial.HISTFILESIZE
: Un límite en el número de líneas que puede contener un archivo de historial.
Estos dos valores interactúan de la siguiente manera:
- Cuando inicie sesión o inicie una sesión de ventana de terminal, la lista de historial comenzará desde el
.bash_history
rellenado el expediente. - Cuando cierre una ventana de terminal, establezca el número máximo de comandos
HISTSIZE
guardará en.bash_history
en el archivo. - si
histappend
Con la opción de shell habilitada, el comando se agregará a.bash_history
.sihistappend
no establecido,.bash_history
se sobrescribe. - Después de guardar los comandos en la lista de historial para
.bash_history
, el archivo de historial se trunca para contener solo unos pocosHISTFILESIZE
Fila.
También cerca de la parte superior del archivo, verá elHISTCONTROL
entrada de valor.
Puede establecer este valor para realizar cualquiera de las siguientes acciones:
ignorespaces:
Las líneas que comienzan con espacios no se agregan a la lista de historial.ignoredups:
Los comandos duplicados no se agregan al archivo de historial.ignoreboth:
Habilite los dos anteriores.
También puede enumerar comandos específicos que no desea que se agreguen a la lista del historial. Sepárelos con dos puntos (:) y escríbalos entre comillas («…»).
Seguirás esta estructura en.bashrc
Agregue una línea al archivo y reemplace los comandos que desea ignorar:
exportar HISTIGNORE="ls:historial"
usar marca de tiempo
Si desea agregar una marca de tiempo a la lista de historial, puede usar elHISTIMEFORMAT
configurar. Para hacer esto, solo necesita ingresar el.bashrc
Agregue la siguiente línea al archivo:
exportar HISTTIMEFORMAT="%c"
Tenga en cuenta que hay un espacio antes de la cita de cierre. Esto evita que las marcas de tiempo se acoplen con comandos en la lista de comandos.
Ahora, cuando ejecute el comando de historial, verá la marca de fecha y hora. Tenga en cuenta que cualquier comando en la lista de historial antes de agregar la marca de tiempo utilizará la fecha y la hora del primer comando que recibió la marca de tiempo como marca de tiempo. En el ejemplo que se muestra a continuación, este es el comando 118.
Esta es una marca de tiempo muy detallada. Sin embargo, puedes usar otros tokens%c
para optimizarlo. Otros tokens que puedes usar son:
%d
: cielo%m
: luna%y
: año%H
: Hora%M
: minuto%S
: segundo%F
: Fecha completa (formato año-mes-día)%T
: Hora (hora:minuto:segundo formato)%c
: Marca de fecha y hora completa (formato DD-DD-MM-AAAA y HH:MM:SS)
Experimentemos y usemos algunos tokens diferentes:
exportar HISTTIMEFORMAT="%dn%m %T"
La salida utiliza el día, el mes y la hora.
Sin embargo, si quitamos el día y el mes, solo muestra la hora.
Cualquier cambio que haga seráHISTIMEFORMAT
Se aplica a toda la lista de historial. Esto es posible porque el tiempo para cada comando se almacena como segundos desde la época de Unix. DeberíaHISTTIMEFORMAT
Las directivas solo especifican el formato utilizado para representar los segundos en un estilo legible por humanos, por ejemplo:
exportar HISTTIMEFORMAT="%T"
Nuestra producción ahora es más manejable.
también puede usarhistory
comando para auditar. A veces, mirar los comandos que ha usado en el pasado puede ayudarlo a identificar qué podría estar causando un problema.
Como en la vida, en Linux puedes usarhistory
Comando para revivir los buenos tiempos y aprender las lecciones.
comandos de linux | ||
documento | asfalto · fotovoltaica · gato · táctica · modo de cambio · grep · diferencia · sed · Arkansas · hombre · para empujar · ventana emergente · fsck · disco de prueba · número de serie · f.d. · pandoc · CD · $ruta · awk · participar · jq · doblar · Único · diarioctl · Cola · estado · ls · mesa de estabilidad · eco · menos · chgrp · Chon · Velocidad de rotación · Mirar · cuerda · escribe · cambiar nombre · compresión · abrir la cremallera · Montaña · desinstalar · Instalar · disco · mkfs · RM · Tabla de contenido · Sincronizar · paradero · gpg · seis · Nano · Tabla de contenido · Du · existir · reparar · intercambio · clon · arrancar · Srm | |
proceso | alias · Pantalla · óptimo · OK · agradable · Progreso · pista · sistema · multiplexor · chsh · historia · existir · lote · libre · cual · dmesg · Franco suizo · módulo de usuario · posdata · chroot · xargs · Terminal · dedo meñique · lsof · Estadísticas de máquinas virtuales · pausa · pared · Sí · matar · dormir · Sudo · demandar · tiempo · dirección de grupo · módulo de usuario · grupo · lshw · cierre · reiniciar · deténgase · cerrar · clave · lscpu · Lista de tareas cronometradas · fecha · antecedentes · fg | |
redes | estadísticas de la red · plano · pista de ruta · propiedad intelectual · SS · Quien es · fail2ban · bmón · excavar · dedo · mapa · FTP · ondulado · wget · Quién · quién soy · w · iptables · ssh-keygen · ufw |