¿Cuáles son algunos de los mejores consejos y trucos históricos de Bash (u otros shells) que todos los usuarios de Linux o Unix deben saber?

Soy bastante adicto a bash y utilizo todas las características de bash para hacer mis cosas. Los siguientes puntos se basan en mi familiaridad con bash (excluyendo lo que se incluyó en otras respuestas).

! -N donde n es cualquier número entero ejecutará nth comando desde el último.

! Alguna vez se ejecutará el último comando ‘alguna vez’, por ejemplo. !encontrar

!? Sometext ejecutará el último comando que contenga la cadena ‘Sometext’

Use comentarios junto con los comandos para que su búsqueda de historial sea más intuitiva, por ejemplo. somecmd arg1 arg2… argN # propósito_de_cmd
La próxima vez, puede obtener el comando utilizando purpose_of_cmd para buscar a través de sus comandos.

Para saber la fecha en que se usó su comando, puede usar export HISTTIMEFORMAT = ‘% F% T% t’.
Ahora, cuando ejecute el comando de historial, verá la hora del comando (útil para la auditoría)

! N ejecutará el enésimo comando de tu historial
Puedes usarlo en combinación con el comando de historial.
Ejemplo:

  $ historia |  más -3
 1 ls
 2 ecos "hola"
 3 cal

 $! 3
 California 

– Ya veo menciones sobre HISTCONTROL en una respuesta y su comentario. Aparte de ellos, también puede usar HISTCONTROL = ignororedups (ignorar duplicados consecutivos) y HISTCONTROL = erasedups (ignorar / borrar duplicados al verificar el historial completo).

historia -c borra toda la historia. Del mismo modo, la exportación HISTSIZE = 0 deshabilita el historial por completo.

history -d offset eliminará la entrada del historial en el desplazamiento particular.
Ejemplo:

  $ historia |  más -3
 1 ls
 2 echo "mi contraseña: l0lftw"
 3 cal

 $ historia -d 2

! ^ Obtiene el primer argumento del comando anterior.
Ejemplo:

  $ ls / tmp / log /.dockercfg
 $ vim! ^ # eq.  vim / tmp / log 

También puede obtener el argumento particular de cualquier comando específico.
Ejemplo:

  $ ls / tmp / log /.dockercfg
 $ cat / etc / passwd
 $ vim! ls: 1 # eq.  vim / tmp / log
 $ ls -liah! ls: 2 # eq.  a ls -liah /.dockercfg 

Un ejemplo más de tal designador:

  $ echo "hello" "world" "de" "nepal" "por" "Samar"
 hola mundo desde nepal por samar
 $ echo !!: 1-4
 echo "hola" "mundo" desde "" nepal "
 hola mundo desde nepal 

Puedes usar los modificadores para modificar el comportamiento de los designadores.

  $ cat / tpm / a / tmp / b / tmp / c
 cat: / tpm / a: No existe tal archivo o directorio
 $! -1: gs / tpm / tmp /
 cat / tmp / a / tmp / b / tmp / c 

Nota: vea el último consejo en esta respuesta para un tiempo más cómodo con los modificadores y designadores de palabras.

Cambia tu archivo histórico con la variable de entorno HISTFILE.

– Use HISTIGNORE para ignorar ciertos comandos. También puede especificar patrones (por ejemplo, para comandos de un solo carácter). Punto de bonificación: apuesto a que puede lograr el mismo efecto que los valores de HISTCONTROL especificados en uno de los puntos anteriores.
Ejemplo:
HISTIGNORE="exit:clear:ls"

Historia del hombre y historia de la ayuda . Desafortunadamente, la mayoría de nosotros olvidamos o subestimamos, pero la página de manual y la ayuda son muy útiles. Vale la pena comprobarlo.

Espero eso ayude.

Con HISTCONTROL=ignorespace establecido en su archivo ~ / .bashrc, los comandos que tienen espacio delante de ellos se ignoran y no se almacenan en el archivo histórico.

Puede habilitar fácilmente esta configuración haciendo esto
echo "HISTCONTROL=ignorespace" >>~/.bashrc

A2A

Bien, voy a jugar

Ignora las siguientes líneas idénticas, mantiene el historial un poco más limpio:
export HISTCONTROL=erasedups

Combine el historial de todos los shells abiertos en uno, en lugar de borrar todos menos el último shell cerrado:
shopt -s histappend

Guarde las líneas de comando tal como están, no divida los comandos multilínea en entradas de historial separadas (tal vez más para usuarios avanzados):
shopt -s cmdhist lithist

^ incorrecto ^ correcto vuelve a ejecutar el comando anterior sustituyendo mal con correcto. Yo uso esto más que cualquier otro atajo.

Un truco muy útil es usar “ctrl + r” para encontrar recursivamente los comandos del historial mediante una cadena común.
(reverse-i-search) `curl ‘: curl –head google.com

Investiga el comando en la historia usando CTRL + r
Permite buscar comandos ejecutados anteriormente.

Cómo buscar el historial de comandos de Shell

Ctrl + r: búsqueda inversa.