Creo que existen muchos significados distintos para «modo ninja», a lo que me refiero es evitar que se escriba en el historial de bash el comando que utilizamos
Existen ciertas distribuciones donde basta escribir el comando precedido por un espacio para que este no se guarde en el historial, este es el método más simple pero no funciona en todas las distribuciones por defecto, tal como lo comentan en este post tenemos un comando que nos permite evitar que un comando se guarde en el historial y que sirve en todas las distribuciones, aunque es un poco largo el comando es el siguiente:
history -d $HISTCMD && comando_a_ejecutar
Vamos a explicarlo por partes
history -d <número>
Este comando elimina la entrada <número> del historial, como recordaran cuando usamos el comando history este nos muestra un número seguido del comando, y al usar la opción -d <número> borraremos el comando que use la posición indicada, por ejemplo tengo este historial
#history | tail -n 3 504 history | tail -n 3 505 sudo pacman -Syu 506 history | tail -n 3
Si quisiera eliminar el comando 505, o sea «sudo pacman -Syu» haría un
history -d 505
y ya con eso se elimina el comando
$ history | tail -n 3 505 history | tail -n 3 506 history -d 505 507 history | tail -n 3
Sin embargo queda en el histórico que borramos una linea y eso puede levantar sospechas, ya veremos como atacar este punto
Luego tenemos una variable llamada HISTCMD, esta variable nos muestra cual será el número que se asignó al comando que ejecutamos como pueden ver en este ejemplo
$ echo $HISTCMD 510 $ history | tail -n 2 510 echo $HISTCMD 511 history | tail -n 2
y ya el resto, es historia
con el doble ampersand (&&) podemos hacer que se ejecute un comando después de un primer comando, por ejemplo
$ echo "1" && echo "2" 1 2 $
si se fijan, en la primera linea coloque 2 comandos que se ejecutaron en cadena, si quisiera hacer lo mismo sin el doble ampersand tendría que ser algo así
$ echo "1" 1 $ echo "2" 2 $
pero esto nos guardaría ambos comandos en el registro histórico. como pueden ver en este ejemplo
history | tail -3 ✔ 447 history | tail -n 2 448 echo "1" 449 echo "2"
Y es por eso que ejecutamos nuestro comando ninja con doble ampersand
history -d $HISTCMD && comando_a_ejecutar
Existen varias formas de «ocultar» la ejecución de comandos, esta en lo particular me ha gustado bastante, incluso podemos evitar escribir tanto simplemente asignándole un alias que se elimina al cerrar la sesión de terminal, obviamente este alias lo usamos en conjunto a este truco para evitar dejar rastro en el historial.
Comenten cuales son sus técnicas ninjas para ocultar comandos, o que comandos han ejecutado
fuente: