subsistema - No guardar la sesión de bash actual en el historial
guardar historial de comandos linux (7)
Aquí está su kit de herramientas de la historia de bash ...
Salir de bash sin escribir nada
kill -9 $$
Esto es hacky y agresivo. Pero es una forma divertida de terminar una sesión de espionaje.
Borrar historial de la memoria
history -c
Esto borra la memoria de toda la historia. Si golpeas la flecha hacia arriba, no obtienes nada. Tu $HISTFILE
está intacto. Puedes probar esto con ...
Recargar historial desde disco
history -r
Esto $HISTFILE
leer el $HISTFILE
y lo agrega al historial en la memoria (si hay alguno). Puede hacer esto después de history -c
para recuperar la capacidad de Ctrl + R buscar o la flecha hacia arriba para los comandos anteriores. (Puede hacer esto en lugar de cerrar la sesión y volver a iniciarla).
Nota: Si no borró el historial primero, esto simplemente se agrega al historial actual en la memoria. Esto ocultará la historia, de modo que pulsar la flecha hacia arriba unas cuantas veces le dará comodidad al pensar que lo que quería ocultar se ha ido . En realidad, solo está enterrado y se escribirá en el disco a menos que sea más profundo que su $HISTSIZE
o $HISTFILESIZE
.
Ejecutar un comando sin incluirlo en la historia.
echo foo bar baz; history -d $(history 1)
Esto usa history -d
para eliminar una entrada por número. Ya que solo se usa el primer argumento (y otros se ignoran) podemos usar la salida del history 1
(que es idéntica a history | tail -n 1
) para obtener el número de la entrada actual.
Debido a que los oneliners de bash son entradas de historial únicas, puede hacer múltiples comandos como:
echo foo; echo bar; echo baz; history -d $(history 1)
Esto también funciona:
echo foo /
bar /
baz; history -d $(history 1)
Incluso esto funciona:
for x in foo bar baz; do
echo $x
done; history -d $(history 1)
Elimine su contraseña (un comando, etc.) de su historial
Si todo lo que le preocupa es deshacerse de una sola entrada, puede usar el ejemplo anterior de manera creativa. Utilice el history
para encontrar el número de la entrada que desea eliminar. Luego bórralo por número. Por ejemplo...
$ history
1 pwd
2 date
3 sudovisudo
4 hunter2
5 man history
6 help history
7 history
$ history -d 4
Espero no tener que decirles esto, pero por si acaso: No grep el historial de su contraseña. Si usted "realmente necesita " buscar el historial, haga el history | LESSHISTFILE=/dev/null less
history | LESSHISTFILE=/dev/null less
, y explícitamente haga una /
búsqueda.
Si está realmente avergonzado y no desea que haya registro de que borre algo de la historia, puede combinar este concepto con el último.
history -d 4; history -d $(history 1)
O también para deshacerse del error original ...
for n in "$(history 1)" 4 3; do history -d $n; done
Tenga en cuenta que tiene que desplazarse por los números de entrada en orden decreciente porque cada llamada a history -d
saca la entrada de la lista y los números de todas las entradas subsiguientes disminuyen en 1. Además, tiene que hacer una doble cita de la subshell porque el history 1
regresa no solo el número, sino también el comando y sus argumentos, y cada uno obtendría un ciclo separado en el ciclo for
. Pero en este punto, esto se está convirtiendo en una lección de bash
y me detendré.
Me doy cuenta de que al abrir .bash_history
que contiene solo las entradas de mi sesión anterior, parece que la sesión actual se agrega solo al salir. ¿Hay alguna manera de evitar que la sesión actual se guarde? Incluso chocar contra bash
es una opción si uno sabe cómo hacerlo. Descubrí que puedo kill -9
el proceso, pero si hay una mejor manera de hacerlo, me encantaría saberlo.
Eso debería hacer:
HISTFILE=
Desactive el HISTFILE.
Hay otra opción, similar a history -c
, pero que no borra nada anterior a la sesión actual.
Es el history -r
, que vuelve a cargar el historial desde HISTFILE
, como si acabas de HISTFILE
sesión.
No sé si esto funciona o está disponible en cualquier versión de bash anterior a 4.3.11, pero creo que sería útil incluirlo en la lista.
Aquí hay un ejemplo que muestra la diferencia entre este comando y el comando -c
:
user@host:~$ # I Just logged in
user@host:~$ history | tail -n6 # this shows commands from the previous session, which ends at item 4682 as well as from the current one
4679 2014-08-23 17:15:29 # Previous session
4680 2014-08-23 17:15:33 # Still the previous session
4681 2014-08-23 17:15:37 # note the datetime
4682 2014-08-23 17:15:44 exit
4683 2014-08-23 17:17:25 # I Just logged in
4684 2014-08-23 17:19:54 history | tail -n6 # this shows the last command, and the ones from the previous session
user@host:~$ # This is a secret command, so I need to remove the traces of this session
user@host:~$ history -r
user@host:~$ history | tail -n5 # Note that I went back to item 4682, and there are no traces of history -r command
6242 2014-08-23 17:15:29 # Previous session
6243 2014-08-23 17:15:33 # Still the previous session
6244 2014-08-23 17:15:37 # note the datetime
6245 2014-08-23 17:15:44 exit
6246 2014-08-23 17:22:26 history | tail -n5 # Note that I went back to item 4682, and there are no traces of history -r command
user@host:~$ history -c # instead if I issue history -c
user@host:~$ history # everything disappears
5248 2014-08-23 17:23:13 history # everything disappears
user@host:~$
Lo siguiente funciona para mí.
export HISTFILE=/dev/null
Tenga en cuenta que tiene un espacio delante de ella. La mayoría de las distribuciones modernas no agregarían comandos que se ingresan después de un espacio para golpear el historial. Eso evitará que esa línea también aparezca en tu historial.
Quizás más elegante que estrellar a bash sería usar el comando history -c
para borrar el historial de la sesión actual. Entonces, no hay nada que guardar (incluso se borra de la historia).
Sé que es un viejo tema. Sólo quería añadir esto para completar:
Si solo desea que no se guarden comandos específicos, verifique si la variable HISTCONTROL
está establecida: HISTCONTROL=ignoreboth
o HISTCONTROL=ignorespace
Cada comando que comienza con un espacio inicial no se incluirá en el historial.
Sólo mis 2 centavos.
$HISTFILE
variable $HISTFILE
$ unset HISTFILE
Si HISTFILE no está configurado, o si el archivo histórico no se puede escribir, el historial no se guarda.
http://www.faqs.org/docs/bashman/bashref_106.html