Cómo ejecutar comandos de Linux sin guardarlos en el historial
Por defecto, cada comando que ejecutas en tu terminal es almacenado por la shell (intérprete de comandos) en un determinado archivo llamado archivo histórico o historial de comandos de la shell. En Bash (la shell más popular en Linux), por defecto, el número de comandos que persisten en el historial es de 1000. Algunas distribuciones de Linux tienen 500.
Para comprobar el tamaño del historial en Bash, ejecuta este comando:
$ echo $HISTSIZE
1000
Para ver los comandos más antiguos que se han ejecutado, puedes usar el comando history
para mostrar el historial de comandos de la shell:
$ history
1 tar cvf passwords.tar /etc/
2 cp /etc/passwd /backup
3 ps -ef | grep http
4 service sshd restart
5 /usr/local/apache2/bin/apachectl restart
A veces, puedes querer desactivar la shell para que no guarde los comandos en el historial. Puedes hacerlo de la siguiente manera.
Borrar un comando de Linux del historial después de ejecutarlo
Puedes eliminar un comando inmediatamente del historial de la shell después de ejecutarlo en la terminal con el comando history -d $(history 1)
.
El subcomando $(history 1)
recupera la última entrada del historial en la sesión actual de la terminal, donde 1 es el desplazamiento y la opción -d (delete) la borra.
Cualquier comando ejecutado normalmente se guarda en el historial de la shell.
$ echo "Este comando se guarda en el historial"
Este comando se guarda en el historial
$
$ history | tail
1 tar cvf passwords.tar /etc/
2 cp /etc/passwd /backup
3 ps -ef | grep http
4 service sshd restart
5 /usr/local/apache2/bin/apachectl restart
6 echo "Este comando se guarda en el historial"
7 history | tail
Sin embargo, cuando añades el comando history -d $(history 1)
a la línea del comando a ejecutar, ésta se borra directamente del historial de la shell:
$ echo "Este comando NO se guarda en el historial"; history -d $(history 1)
Este comando NO se guarda en el historial
$
$ history | tail
1 tar cvf passwords.tar /etc/
2 cp /etc/passwd /backup
3 ps -ef | grep http
4 service sshd restart
5 /usr/local/apache2/bin/apachectl restart
6 echo "Este comando se guarda en el historial"
7 history | tail
Otra forma de evitar que la shell guarde un comando en el historial es poner un espacio antes del comando. Pero esto depende totalmente del valor de la variable $HISTCONTROL
definida en el archivo ~/.bashrc
. Debe tener uno de los valores ignorespace
o ignoreboth
para que este método funcione.
Puedes comprobar el valor de la variable $HISTCONTROL
de las siguientes dos formas:
$ echo $HISTCONTROL
ignoreboth
$
$ cat ~/.bashrc | grep $HISTCONTROL
HISTCONTROL=ignoreboth
Si la variable está declarada e introduces un espacio antes del comando, ese comando no se guardará en el historial dificultando, por ejemplo, la respuesta a incidentes ante un ataque. Fácil, ¿no?: