Gestión del histórico de comandos en Linux

Hola a todos buenas tardes,

Mucho tiempo hacia que no escribía nada en el blog, pero hoy me he animado. El motivo que me acerca en esta ocasión a todos vosotros es que he entrado en una de las máquinas de PRE y me he encontrado con un carajal en el historial de bash. Supongo que os sonará, comandos repetidos, múltiples entradas inútiles, un histórico hiper largo en el que es bastante incomodo buscar nada, en definitiva, ¿que necesidad tenemos de almacenar en dicho fichero todos esos comandos cuando posiblemente con el 10% de los mismos nos es mas que suficiente?

Para los que no sepais de que estoy hablando, muchos sistemas almacenan de una forma u otra el histórico de comandos ejecutados por usuario. Linux obviamente lo hace. Los almacena en modo texto y el fichero de historia de comandos varia dependiendo del interprete de comandos que estés empleado. En mi caso el mas habitual es bash, y el fichero donde se almacena dicho histórico es .bash_history en el $HOME del usuario.

La primera de las reglas que yo empleo en la consola de linux para buscar un comando es hacerlo en el historial directamente por medio de la combinación de teclas CTRL + R. Esta combinación nos permite entrar en el modo de búsqueda, de forma que la palabra que tecleamos pasa a buscarse hacia atrás en todo el historial. Podemos saltar de coincidencia en coincidencia empleando la misma combinación de teclas CTR+R.

Esta primera idea esta bien si sabes lo que andas buscando, o bien si tienes, al menos, una ligera idea de lo que buscas. ¿Pero que sucede cuando no es así?, bueno en mi caso abro a pelo el histórico de comandos y me pongo a buscar a manubrio el comando que creo necesito, entendiendo que alguno de los operadores habituales de la máquina ya habrá tenido dicha necesidad. Esto me funciona en el 99% de las ocasiones.

Para este ultimo caso es cuando realmente es importante (en mi caso) disponer de un histórico que tenga las siguientes características:

  • Evitar duplicados. Esto es super importante, ¿cuantos ls podríamos encontrar sino en un linux después de X años de funcionamiento?, puffffff
  • Con comandos que funcionen realmente (esto yo lo logro limpiando manualmente el histórico)
  • En algunas ocasiones me es importante disponer de una marca de tiempo en el histórico aquí mas info
  • Disponer de un medio rápido para evitar que un comando caiga en el histórico

Para casi todo ello en linux hay solución, se puede controlar mediante HISTCONTROL (bash man):

  • ignorespace = si la linea del comando empieza por un espacio, no es guardada en el histórico
  • ignoredups = si el último comando coincide con el anterior del histórico no es almacenado
  • ignoreboth = ignorespace + ignoredups
  • erasedups = borra todas las coincidencias del ultimo comando ejecutado dejando obviamente la ultima de ellas

Todas estas opciones pueden ayudarnos a tener un mínimo de control sobre el histórico de comandos. Para usarlas simplemente hay que incluirlas en el fichero $HOME/bashrc:

 export HISTCONTROL=ignoreboth:erasedups

Bueno pues me despido, saludos a tod@s y hasta la próxima.

You must be logged in to post a comment.