Eliminar el historial de ~ / .bash_history


8

Tengo un par de preguntas sobre el terminal o el historial de la línea de comandos que está almacenado ~/.bash_history.

  1. Puedo ver el archivo en el terminal con el historycomando pero si trato de abrirlo con gedit bash_historyel archivo está completamente vacío. ¿Por qué?

  2. He encontrado cómo eliminar una cierta cantidad de líneas en el archivo desde el terminal con esta línea de código:

    for i in {1..N}; do history -d N; done

    donde N es el número de líneas (o comandos) que desea eliminar, pero ahora el archivo de historial muestra este último comando y eso no es muy inteligente si está tratando de cubrir sus cosas. Entonces la pregunta es: ¿cómo puedo dar la última línea de código y asegurarme de que no se grabe?



Para una nota futura, si inicia cualquier comando con un espacio, ese comando no se guardará en su historial.
Paddy Landau

Respuestas:


18
  1. Acaba de olvidar el punto anterior, el comando para abrir su archivo de historial de terminal (bash) es

    gedit ~/.bash_history

    Este archivo solo se actualiza cuando cierra una terminal.

  2. Para eliminar las últimas 10 líneas de este archivo y no registrar este comando, abra una nueva terminal y ejecute la siguiente cadena de comandos:

    sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit

    o

    for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit

    o

    head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit

    sedo headrespectivamente elimina las líneas seleccionadas de ~/.bash_history, history -cborra el historial del terminal y lo exitcierra.


Una alternativa más corta y con suerte más rápida a for+ sed: head -n -Ndonde mayúscula Nes el número de líneas que se eliminarán. stackoverflow.com/a/13380679/711006
Melebius

2
@Melebius Parece prometedor, pero ¿cómo redirige la salida al archivo de entrada sobrescribiéndola? head -n -N testfile > testfilesolo borra el archivo! Agregué una solución alternativa, sin embargo, ciertamente no es más corta.
postre

Tienes razón, olvidé que headno puede funcionar en el lugar como sed. Principalmente buscaba un solo sedcomando que reemplazara tu forciclo. Hay algunas opciones en la página que vinculé, pero no parecen tan comprensibles como su código.
Melebius

@Melebius Vea sed1line.txt para eso: lo agregué arriba, no es realmente más corto pero debería ser más rápido.
postre

4

El archivo bash_history es un archivo oculto, que comienza con un punto. Necesitas hacer

gedit ~/.bash_history

Esto abrirá el archivo en gedit.


1

Si desea eliminar solo ciertas partes de su registro de comandos, entonces los métodos anteriores están bien. Si desea detener el registro de comandos para una sesión de bash en particular, emita el comando

unset HISTFILE

Para ser más drástico, si no desea que se registre ninguno de sus comandos , puede hacerlo

rm ~/.bash_history
ln -s /dev/null ~/.bash_history

Tenga en cuenta que el primer método estaría en vigor solo para una sola sesión, mientras que el segundo método detendría el registro de comandos para todas las sesiones futuras.


1

Me doy cuenta de que esto ya tiene una respuesta aceptada, pero así es como lo he estado haciendo desde los años 80. Es una excelente manera de ocultar sus pistas y es un enfoque de múltiples fases. En su mayor parte, es uno que no se nota a menos que uno realmente esté prestando atención. Así es como se hace.

Abra una terminal / shell / sesión y haga:

 chmod 444 ~/.bash_history

salga del shell, abra un terminal / shell / sesión y haga: Aquí hay algunas formas creativas de borrar el historial de forma permanente

1:

 vi ~/.bash_history
 9999999 dd
 <esc>wq!

2 (crear un historial falso)

 sudo echo "which ls" > ~/.bash_history
 sudo echo "cd ~/;ls" >> ~/.bash_history

entonces por si acaso:

 chmod 444 ~/.bash_history

salir de la cáscara

abra un nuevo shell y escriba

 history

lo que lo hace menos notable es que si uno hace un ls -ratl, el ~ / .bash_history eventualmente desaparecerá en el traqueteo de la lista del directorio. No aparecerá como un enlace que atraería atención innecesaria. La mayoría de las personas no hacen un -a en su raíz, lo cual es útil cuando se desea la emulación.

La desventaja de este enfoque es que pierde su capacidad de regresar y recuperar su historial. el archivo ~ / .bash_history real también podría terminar en la parte superior de una lista de directorios, ya que puede terminar con una fecha de modificación realmente antigua con el tiempo, lo que en sí mismo podría conducir al descubrimiento de que algo anda mal.


si usas 9999999 ddpara eliminar todas las líneas del archivo :%d, :1,$do dGtrabajas mucho mejor
phuclv

0

1) correr sh; esto genera una subshell de cenizas, que no registra el historial en absoluto. Editar desde allí

2) Agregue la línea HISTCONTROL=ignorebotha .bashrc, y haga exec bashpara reemplazar permanentemente el shell actual con uno reinicializado, luego realice todos los comandos que no desea que se registren con un espacio inicial.


0

Como todavía no puedo comentar, agregaré mis comentarios como respuesta:

man history lo responderé todo.

La respuesta a # 1 es que la historia está en la memoria. history -apara guardar en el archivo de inmediato.history -wtambién guardará pero podría estropear otras sesiones.

respuesta # 2:, history -agedit, borra las líneas que quieras,history -r


0

El historial no se guarda hasta que cierre la sesión del shell. Intente cerrar sesión en el shell y luego vuelva a mirar .bash_history. El historial de comandos debe estar allí.


Editado como se sugiere ¿Lo suficientemente bueno ahora?
The Lightning Stalker
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.