
Cada usuario de Linux eventualmente ejecuta un comando que no quiere conservar: curl con una contraseña codificada, exportar con una clave API o una línea de texto que confundirá a cualquier administrador de sistemas que lo lea tres meses después. Saber cómo controlar lo que pasa en el historial de bash es tanto una práctica segura como una Bloquear SSH.
Es posible que haya experimentado esto: pegar un comando con una contraseña incrustada y luego hacer clic en Ingresare inmediatamente se preguntó en cuántos lugares acababa de aterrizar esa cuerda. Bash almacena cada comando que ingresas ~/.bash_history De forma predeterminada, en la mayoría de los sistemas, cualquier persona con acceso a su cuenta puede leer este archivo. Si comparte un servidor con otros administradores, este archivo de historial será lo primero que mirarán cuando ocurra un problema.
la buena noticia es Explotar Le brinda control preciso sobre lo que se guarda, cuándo se guarda y cómo se borran las entradas individuales.
Cómo almacenar instrucciones en el historial de Bash
Antes de poder controlar el historial, es necesario comprender cuándo Explotar escribió. Por ejemplo, durante una sesión, cada comando pasa primero a la lista del historial en la memoria.
Cuando la sesión finalice limpiamente, el manifiesto se adjuntará a ~/.bash_history En el disco, esto es importante porque si tu terminal falla o lo cierras con kill, no se guardará nada en esa sesión.
Las variables clave que controlan este comportamiento existen en su entorno de shell y puede inspeccionarlas ahora:
echo $HISTFILE echo $HISTSIZE echo $HISTFILESIZE
producción:
/home/ravi/.bash_history 1000 2000
Déjame explicarte el resultado del comando:
HISTFILEAquí es donde se escribe la historia al salir.HISTSIZEControla la cantidad de comandos que el inventario de memoria guarda por sesión.HISTFILESIZEControla el número de líneas que el archivo de historial puede crecer en el disco.
La mayoría de las distribuciones por defecto 1000 neutralización de la memoria 2000 en el disco, para que sus archivos conserven la última 2000 Todos los comandos de la sesión anterior. aprender»en la memoria» y»escribir en el disco“Es por eso que las siguientes técnicas funcionan tan bien.
Cómo evitar que los comandos se guarden en el historial de Bash
La forma más sencilla de evitar que Bash guarde un comando en el historial es tan simple como agregar un espacio delante del comando.
Por ejemplo, cuando escribe un comando como este, se guarda en su historial.
export API_KEY="supersecretkey123"
Pero si agregas un espacio al principio:
export API_KEY="supersecretkey123"
Bash no registrará esta línea en absoluto, solo HISTCONTROL incluir ignorespace.
Primero verifique si ya está configurado:
echo $HISTCONTROL
producción:
ignoredups:ignorespace
si ves ignorespace o ignoreboth En el resultado, estás cubierto.
Si la variable está vacía o falta, agréguela a su ~/.bashrc:
export HISTCONTROL=ignorespace
Luego recargalo:
source ~/.bashrc
Eliminar comandos específicos del historial de Bash
El truco de los espacios iniciales solo funciona antes de ejecutar el comando, pero si ya ejecutó algo y desea que desaparezca, use el historial. -d con número de línea:
Por ejemplo, comience enumerando su historial de bash.
history
producción:
497 sudo systemctl restart nginx 498 export DB_PASS="hunter2" 499 curl 500 ls -la /etc/nginx
Eliminar línea 498:
history -d 498
producción:
497 sudo systemctl restart nginx 499 curl 500 ls -la /etc/nginx
La entrada ha desaparecido de la lista de memoria, pero aún no ha terminado. La eliminación permanece sólo en la memoria hasta que finaliza la sesión. Cuando Bash escribe el historial en el disco al salir, la brecha se cierra y su ~/.bash_history Mientras no lo ejecutes, el archivo no tendrá esa entrada. history -a Manualmente antes de cerrar el terminal.
Si desea limpiar los archivos del disco inmediatamente sin esperar a que finalice la sesión, ejecute history -w Después de la eliminación:
history -w
Esto escribirá la lista de memoria actual (sin entradas eliminadas) directamente en ~/.bash_historysobrescribiendo todo lo que existía antes.
Si esto le ayuda a comprender finalmente cómo funciona realmente el almacenamiento del historial, Compartir con colegas ¿Quién eliminó todo el archivo histórico en lugar de líneas individuales?
Ignorar comandos duplicados en el historial de Bash
Los comandos duplicados (como ls, cd, clear o git status) pueden llenar rápidamente el historial y hacer que sea más difícil encontrar los comandos que realmente te interesan.
poner HISTCONTROL llegar ignoredups Bash omitirá cualquier comando que coincida con el anterior:
export HISTCONTROL=ignoredups
Para combinar estos dos comportamientos (ignorando espacios iniciales y duplicados) use ignoreboth:
export HISTCONTROL=ignoreboth
Añade esto a tu ~/.bashrc Entonces persiste entre sesiones:
echo 'export HISTCONTROL=ignoreboth' >> ~/.bashrc source ~/.bashrc
Dejar de guardar ciertos comandos en el historial de Bash
este HISTCONTROL maneja trucos y duplicados de prefijos de espacios en blanco, pero HISTIGNORE Le permite definir patrones específicos que Bash siempre omitirá. Cualquier comando que coincida con este patrón no se ingresará en la lista del historial:
export HISTIGNORE="ls:ls -la:cd:pwd:clear:history:exit"
Cada patrón está separado por dos puntos. También puedes utilizar comodines de estilo global, por lo que export * Cada comando de exportación será suprimido:
export HISTIGNORE="ls*:cd*:pwd:clear:history:export *:curl *token*"
agregarlo a ~/.bashrc Hágalo permanente y obtenga el archivo nuevamente. Tenga cuidado de no hacer el patrón demasiado ancho; si ignoras sudo *perderá el registro de auditoría de cada comando privilegiado que haya ejecutado, lo que puede crear diferentes tipos de problemas.
Desactivar temporalmente el historial de comandos
A veces desea trabajar en un servidor sin dejar ningún rastro, como configurar credenciales, auditar configuraciones o responder a eventos en un dispositivo compartido.
poner HISTFILE llegar /dev/null Para la sesión actual:
export HISTFILE=/dev/null
A partir de este punto de la sesión, no se escribe nada en el disco. La lista en memoria aún se creará (por lo que puede usar la flecha hacia arriba), pero cuando finalice la sesión, la lista en memoria desaparecerá en lugar de borrarse al archivo.
También puedes combinarlo con unset HISTFILE Si quieres ser claro, pero señala /dev/null es más portátil y funciona de la misma manera en todas las distribuciones.
Cómo borrar archivos completos del historial
Para comenzar a limpiar, elimine el archivo histórico completo y elimine todos los comandos anteriores.
history -c && history -w
history -cBorra la lista del historial de memoria de la sesión actual.history -wLuego escribe esa lista vacía en~/.bash_historysobrescriba el archivo.
Después de ejecutar esto, cat ~/.bash_history No devuelve nada. este && operador significa que el segundo comando solo se ejecuta si el primer comando tiene éxito, por lo que si algo sale mal, no borra accidentalmente el archivo en la sesión.
Si esto le da una idea más clara de cómo mantener ordenado su entorno de shell, Envía esto a tus compañeros de equipo ¿Quién sigue editando manualmente? .bash_history y vim.
en conclusión
Ahora tienes 5 formas diferentes de controlar el historial de bash: el principal truco de espacios en blanco para instrucciones confidenciales de una sola vez, history -d Para la limpieza posterior a la ejecución, HISTCONTROL Ignorar duplicados y espacios globales, HISTIGNORE Para exclusiones permanentes basadas en patrones, y HISTFILE=/dev/null Se utiliza para la supresión de toda la sesión.
empezar con nuevo export HISTCONTROL=ignoreboth para ti ~/.bashrc Ahora. Luego piensa qué patrones te pertenecen. HISTIGNORE.
Si exporta tokens con regularidad o ejecuta curl con encabezados de autenticación, estos pertenecen allí. Sólo le llevará 5 minutos y no tendrá que limpiar datos confidenciales más adelante.
¿Alguna vez encontró una contraseña o clave API en el historial de bash de otra persona en un servidor compartido? ¿Cómo era la situación en ese momento? ¿Cómo lo manejaste? Cuéntanos en los comentarios a continuación..









