¿Hay alguna forma de evitar que se agregue un comando a su historial? Tengo un comando que quiero mantener fuera de mi archivo de historial, y realmente no me importa tenerlo allí cuando busco el historial almacenado en la memoria, aunque eso es menos preocupante. ¿Hay alguna manera de evitar esto, o solo tengo que volver y editar mi archivo de historial?
Actualización: no me di cuenta de que esto podría ser específico del shell. Mi caparazón es zsh
. Le invitamos a responder por otros proyectiles para que la gente sepa cómo hacerlo en su caparazón.
bash
security
zsh
command-history
xenoterracida
fuente
fuente
Respuestas:
En ZSH :
Primero inserte
setopt HIST_IGNORE_SPACE
en su~/.zshrc
. Ahora, después de iniciar sesión de nuevo, puede anteponer cualquier comando que no desee almacenar en el historial con unspace
.Desde el manual del usuario , las siguientes 3 opciones se pueden usar para decir que ciertas líneas no deberían entrar en el historial:
fuente
| somecommand
preexec
que se puede usar para eso. Si devuelve un valor distinto de cero, el comando no se guarda en el historial.setopt HIST_IGNORE_SPACE
en~/.zshrc
Si está ejecutando el comando una y otra vez, es posible que desee utilizar la función de ignorar el historial de su shell. Digamos que tiene secret.server.com al que desea enviar ssh, archivos FTP, etc., que no desea que se guarde ninguna línea que mencione secret.server.com:
En
bash
ti pondríasmientras que en
zsh
el parámetro se llamaPuede enumerar múltiples patrones con dos puntos separándolos. Tenga en cuenta que cada patrón coincide con la línea de entrada completa , por lo que es posible que deba incluir un *. Por ejemplo, lo siguiente excluirá
fortune
del historial, pero almacenaráfortune -l
:Con HISTIGNORE configurado, nada que coincida con los patrones que enumere se guardará en
.bash_history
/.zsh_history
e incluso la tecla de flecha hacia arriba, que normalmente recuerda su comando anterior, no funcionará si coincide con su patrón.fuente
HISTIGNORE="^fortune*"
ignorarfortune -l
pero mantenermyfortune
?En bash, usa la
HISTCONTROL
variable.Ajústelo a
HISTCONTROL=ignorespace
(oHISTCONTROL=ignoreboth
). A partir de ahora, cuando comience una línea con un espacio , no se guardará en el historial. Esto evita incluir el comando no-a-ser-revelado en algún archivo de configuración.Incluso así, se olvida de agregar el espacio y luego quiere volver. Para eliminar una entrada en el historial, use
history -d <index>
, conindex
el número encontrado con elhistory
comando (primera columna).fuente
zsh
?La forma más fácil para una única vez es
donde
$
representa el aviso del shell inicial y$$
representa el aviso del subshell. Esto funciona en bash y zsh; en ksh necesitas en suHISTFILE=/notwritable
lugar. Tenga en cuenta que lo que importa es el valor deHISTFILE
cuándo se escribe el archivo de historial, no cuando se ejecuta el comando. Bash, ksh y zsh escriben en el archivo de historial cuando salen (zsh puede hacerlo más a menudo dependiendo de la configuración).Alternativamente, puede hacer que bash o zsh ignoren las líneas que coinciden con ciertos patrones (esto ya está cubierto por otras respuestas).
Otra posibilidad en zsh es
fc -p
empuja la lista del historial actual a una pila e inicia una nueva que no está asociada con un archivo guardado.fc -P
saca esa lista de historial sin guardar de la pila y se olvida por completo.Mientras se ejecuta un proceso, el comando y sus argumentos (y en algunos sistemas también su entorno) se mostrarán en la tabla de procesos (
ps
salida). Root puede ver comandos pasados en la base de datos de contabilidad del sistema y puede realizar más registros sin su control. Y probablemente habrá todo tipo de evidencia forense que puede mostrar aproximadamente qué comando ejecutó (como los tiempos de modificación de archivos). Por lo tanto, no obtienes privacidad contra espías determinados.fuente