Answers:
在ZSH中:
首先插入setopt HIST_IGNORE_SPACE
到你的~/.zshrc
。现在,再次登录后,您可以在历史记录中不想存储的任何命令加上前缀space
。
在用户手册中,可以使用以下3个选项来表示某些行根本不应该进入历史记录:
| somecommand
preexec
。如果返回非零,则命令不会保存在历史记录中。
setopt HIST_IGNORE_SPACE
在~/.zshrc
如果您一遍又一遍地运行命令,则可能要使用Shell的历史记录忽略功能。假设您有ssh到的secret.server.com,FTP文件等,您不想保存任何提及secret.server.com的行:
在bash
你会
HISTIGNORE="*secret.server.com*"
而在zsh
参数中被称为
HISTORY_IGNORE="*secret.server.com*"
您可以列出多个模式,并用冒号分隔它们。请注意,每个模式都与完整的输入行匹配,因此您可能需要添加*。例如,以下内容将从fortune
历史记录中排除,但将存储fortune -l
:
HISTIGNORE="*secret.server.com*:ytalk*:fortune"
HISTORY_IGNORE="*secret.server.com*:ytalk*:fortune"
如果设置了HISTIGNORE,则与您列出的模式不匹配的内容都不会保存到.bash_history
/,.zsh_history
并且即使向上箭头键(通常会调用您先前的命令)也无法保存(如果它与您的模式匹配)。
HISTIGNORE="^fortune*"
忽略fortune -l
但保留myfortune
吗?
一次性的最简单方法是
$ $SHELL
$$ unset HISTFILE
$$ secret-command
$$ exit
$
其中,$
代表初始外壳$$
的提示符,代表子外壳的提示符。这适用于bash和zsh;在ksh中,您需要HISTFILE=/notwritable
代替。请注意,重要的HISTFILE
是写入历史文件时的值,而不是运行命令时的值。Bash,ksh和zsh退出时会写入历史文件(zsh可以更频繁地执行此操作,具体取决于配置)。
或者,您可以让bash或zsh忽略与某些模式匹配的行(其他答案已对此进行了介绍)。
zsh中的另一种可能性是
% fc -p
% secret-command
% fc -P
fc -p
将当前历史记录列表压入堆栈,并启动一个与保存文件无关的新历史记录。fc -P
将未保存的历史记录从堆栈中弹出,然后完全忘记它。
在进程运行时,命令及其参数(在某些系统上还包括其环境)将显示在进程表(ps
输出)中。根目录可以查看系统记帐数据库中的过去命令,并且可以在无需您控制的情况下进行更多日志记录。而且可能会有各种法医证据可以大致显示您运行了什么命令(例如文件修改时间)。因此,对于确定的窃听者,您不会获得隐私权。