¿Cómo busco en mi historial de línea de comandos los comandos que usé antes?

186

Además de ver el historial, ¿hay alguna forma de filtrar mi historial?

¿Decir que quiero buscar un comando que comenzó con "ssh"?

Blankman
fuente

Respuestas:

271

Presione Ctrl+ Ry escriba ssh. Ctrl+ Rcomenzará la búsqueda desde el comando más reciente al anterior (búsqueda inversa). Si tiene más de un comando que comienza con ssh, presione Ctrl+ Runa y otra vez hasta que encuentre la coincidencia.

Una vez que haya encontrado la coincidencia, puede presionar Enterpara ejecutar el comando o el cursor izquierdo / derecho para simplemente seleccionar el texto del comando.

No hay una opción inversa predeterminada para que Ctrl+ Rinvierta la dirección de la búsqueda, pero aquí encontrará algunas sugerencias al respecto.

Príncipe John Wesley
fuente
90

Si solo quieres buscar en tu historial, puedes usarlo history | grep ssh, sustituyendo ssh por lo que quieras buscar.

ssmy
fuente
Utilizo este método, porque enlazo para ver en la lista cada comando que coincide con mi filtro.
Pisu
15

Hago una ligera variación de lo anterior, funciona bien para mí (si te refieres a tu historial de bash

En mi carpeta de inicio creo un archivo llamado

.inputrc

Adentro va esto

"\e[5~": history-search-backward
"\e[6~": history-search-forward

Nota: lo anterior ya no parece funcionar en 14.04, por lo que hace lo mismo:

"\e[A":history-search-backward
"\e[B":history-search-forward

Luego, escribiendo lo que desee de un comando anterior y usando los botones de página arriba / página dn busca el historial, siempre comenzando con la página arriba

Doug
fuente
si tiene permisos de root, puede editar / etc / inputrc para que esto funcione para todos los usuarios.
Wolfy
1
@doug, hmm .. Tengo Ubuntu 15.04. Esta solución funciona pero desordena las teclas Ctrl + Flecha izquierda / Ctrl + Flecha derecha. El problema se ve con la creación de un archivo .inputrc y no con entradas en él.
Ravi
No olvide volver a vincular .inputrc o cerrar la terminal
David Brossard
14

Al presionar Ctrl+ Rse iniciará el modo "reverse-i-search", al escribir "ssh" se buscarán en el historial comandos que contengan "ssh".

Sergey
fuente
10

Aquí hay otro método que usa comandos clásicos (es más probable que funcione en distribuciones). El historial de comandos se almacena en el archivo .bash_historyen su directorio de inicio, por lo que puede hacer esto:

grep "ssh" ~/.bash_history

No olvide la -ibandera si necesita una búsqueda que no distinga entre mayúsculas y minúsculas.

Cabra descontento
fuente
history | grep sshmostrará solo la sesión temporal de ssh, así que buscaría esta respuesta.
iniravpatel
3

Encontré la siguiente función en algún lugar de Internet y la he usado con gran efecto. Pon esto en tu ~/.bashrc:

hgrep () { 
    history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@"
}

Ahora volver a cargar su shell: exec bash. Ahora tiene un nuevo comando, que puede usar así:

hgrep ssh

Le mostrará una lista de comandos coincidentes de su historial. Para ejecutar un comando, escriba !seguido del número de comando. Aquí hay un ejemplo:

~:$ hgrep scp
  207  tn scp foreign-teachers __HOST__:unity.log __HOST__:compiz.log .
  421  tn scp scott-laptop __HOST__:Scott\ Severance.asc .
  422  tn scp scott-laptop __HOST__:'Scott\ Severance.asc' .
  468  tn scott-desktop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
  469  tn scott-laptop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
  470  scp -r Backgrounds/* 192.168.1.2:Pictures/Backgrounds
~:$ !207

Este enfoque me gusta más que Ctrl+ Rporque permite búsquedas mucho más flexibles y puedo ver múltiples resultados a la vez.

Scott Cesantía
fuente
2

Pon esto en tu ~/.bashrc:

alias hgrep = 'historia | grep --color = auto '

ejemplo:

hadj messaoud
fuente
1

El historial es bueno pero limitado: prefiero configurar mi entorno bash para registrar todos los comandos que he ejecutado, además del directorio en el que se ejecutaron. Luego ejecuto un comando para enumerar todos los comandos Me he ejecutado en el directorio actual, que puedo canalizar a grep, etc., se llama 'plato', vea:

https://github.com/wolfwoolford/dish

Si quieres ir al grano, solo busca esto en tu .bashrc ( https://github.com/wolfwoolford/dish/blob/master/dishrc )

También hay un comando realmente útil que obtienes de forma gratuita llamado 'dishg', o dish global, que imprime todos los comandos que se ejecutan, independientemente del directorio. Obviamente, este solo es útil cuando se usa con grep y tail, etc.

Lo he estado usando durante años y es, literalmente, lo primero que instalo cada vez que configuro una nueva caja. Registra los comandos que ejecuta en archivos de texto en un directorio oculto (~ / .dish). Nunca he tenido un problema con el espacio en disco ...

David Woolford
fuente
0

Quería escribir esto como un comentario para @ssmy pero no pude obtener el formato en el comentario para cooperar.

Después de buscar en el historial history | grep ssh, puede ejecutar el comando que desee escribiendo su número precedido por un signo de exclamación, por ejemplo !42.

Ejemplo:

$ historia | grep ssh
  5 ssh [email protected]
 13 ssh [email protected]
 42 ssh [email protected]
$! 42
magikMaker
fuente