¿Por qué eliminar bash history no es suficiente?

15

Solía ​​pensar que borrar mi historial de bash era suficiente para borrar mi historial de bash, pero ayer mi gato estaba jugando en el lado derecho de mi teclado y cuando volví a mi computadora vi algo que escribí hace un mes, luego comencé a presione todas las teclas como loco buscando lo que podría haberlo activado. Resulta que la tecla ARRIBA muestra mi historial de bash incluso después de eliminar .bash_history.

¿Cómo puedo eliminar mi historial de bash de verdad?

Bunden
fuente
8
.bash_history se sobrescribe cada vez que cierra un bash shell. Entonces, si comienza bash, elimina .bash_history y cierra la sesión, no habrá logrado exactamente nada.
Shadur
14
Tu gato merece una gran recompensa. ¿Ha estado usando bash durante cuánto tiempo sin descubrir que tiene recuperación y edición de línea de comandos? ¿Simplemente vuelve a escribir cada línea de comando desde cero cada vez o algo así? Eso haría que la carcasa sea muy desagradable de usar.
cas
@cas diez años. Ahora que lo dice, presiono Uparrow para repetir comandos, pero lo entendí como una especie de memoria de "corto plazo" de no más de unas pocas líneas de largo. No me advirtieron que eliminar .bash_history no eliminará el historial de bash.
bunden
La eliminación ~/.bash_historyrealmente elimina ~/.bash_history... pero (a menos que tome medidas para evitarlo, como borrar el historial en memoria ejecutándose history -cjusto antes de cerrar sesión o configurarlo HISTFILE=/dev/nullo simplemente unsetiniciarlo) bash simplemente guardará su historial actual nuevamente cuando salga . Por cierto, HISTSIZEenv var le dice a bash cuántas líneas del historial se deben guardar en la memoria, y HISTFILESIZEle dice a bash el número máximo de líneas del historial para guardar. ambos se pueden configurar en, por ejemplo, su ~/.bashrc. PD: tu gato merece una segunda recompensa por enseñarte una valiosa lección :)
cas
@cas Creo que eliminar .bash_history debería eliminar el historial de bash. Me parece intuitivo. Lo que no parece intitivo es historia -c, historia -w, variables inestables ... eso es una locura desde la perspectiva de la experiencia del usuario.
bunden

Respuestas:

26

En algunos casos (algunas versiones bash), hacer un:

$ history -c; history -w

O simplemente

$ history -cw

Borrará la historia en la memoria (hacia arriba y flecha hacia abajo tendrá ningún comando a la lista) y luego escribir que el $HISTFILEarchivo (si el $HISTFILEse trunca por la instancia de fiesta en ejecución).

A veces, bash elige no truncar el $HISTFILEarchivo incluso con la histappendopción sin configurar y $HISFILEZIZEestablecida en 0.

En tales casos, la opción nuclear siempre funciona:

history -c; >$HISTFILE

Eso borra la lista del historial de comandos grabados en la memoria y todos los comandos grabados previamente en el archivo. Eso asegurará que el shell en ejecución no tenga un historial grabado en la memoria o en el disco, sin embargo, otras instancias en ejecución de bash (donde el historial está activo) pueden tener una copia completa de los comandos leídos desde $HISTFILEque se inició bash (o cuando history -rse ejecuta a) .

Si también se requiere que nada más (sin comandos nuevos) de la sesión actual se escriba en el archivo de historial, unset HISTFILEevitará dicho registro.

Isaac
fuente
1
Editar HISTFILE y hacer history -c && history -rreemplazaría su historial actual con un historial modificado manualmente. En algunos casos, eso puede ser mejor que tirar toda la historia.
Mikko Rantalainen
9

bashtiene un historial de sesión en la memoria que se escribe en el archivo si la variable de shell HISTFILEse establece en un nombre de archivo cuando bashsale.

Si elimina el archivo señalado por HISTFILE, desactive esa variable y salga bash, esa sesión de shell no dejará ningún historial persistente.

Si no se desarma la HISTFILEvariable pero se elimina el archivo, se vaciaría el historial persistente, pero el historial de la sesión actual se guardaría cuando salga el shell.

Kusalananda
fuente
3
A history -c; history -wborrará la memoria y el historial de archivos. Desarmar HISTFILE solo es necesario si no se deben registrar más comandos en el historial (no es exactamente lo que se le pidió IMhO).
Isaac
-1

"¿Cómo puedo borrar mi historial de bash de verdad?"

Salga de bash, inicie un shell diferente, elimine el archivo de historial de bash.

o

cerrar sesión, iniciar sesión en una cuenta diferente que tenga permiso de escritura en el archivo de historial, eliminar el archivo de historial.

usuario
fuente
-2

Mientras abandonas el caparazón, hazlo todo de una vez, como

echo "" > ~/.bash_history && history -c && exit
usuario853069
fuente
@roaima, tienes toda la razón, gracias. Corregido
user853069