有什么办法可以阻止命令被添加到您的历史记录中吗?

有什么办法可以阻止命令被添加到您的历史记录中吗?

有什么办法可以阻止命令被添加到您的历史记录中吗?我有一个命令想保留在我的历史文件中,当我搜索内存中存储的历史记录时,我真的不关心它在那里,尽管这不是一个问题。有什么办法可以防止这种情况,或者我只需要返回并编辑我的历史文件。

更新:我没有意识到这可能是特定于 shell 的。我的外壳是zsh.欢迎您回答其他 shell,以便人们知道如何在他们的 shell 中执行此操作。

答案1

在ZSH:

首先插入setopt HIST_IGNORE_SPACE到您的~/.zshrc.现在,再次登录后,您可以在任何不想存储在历史记录中的命令前面加上space.请注意(与 bash 的同名选项不同)该命令会在内部历史记录中徘徊,直到输入下一个命令才会消失,从而允许您短暂地重用或编辑该行。

来自用户手册,以下 3 个选项可用于表示某些行根本不应该进入历史记录:

  • HIST_IGNORE_SPACE不要存储以空格为前缀的命令
  • HIST_NO_STORE不存储历史fc-l) 命令
  • HIST_NO_FUNCTIONS不存储函数定义

答案2

如果您一遍又一遍地运行该命令,您可能需要使用 shell 的历史记录忽略功能。假设您有 ssh 访问的 Secret.server.com、FTP 文件等,但您不希望保存任何提及 Secret.server.com 的行:

bash你会设置

HISTIGNORE="*secret.server.com*"

而在zsh参数中被称为

HISTORY_IGNORE="*secret.server.com*"

HISTIGNORE可以包含多个模式,用冒号分隔。HISTORY_IGNORE指定单个模式,但该模式可以包含替代项,并用管道分隔。请注意,每个模式都与全输入线,因此您可能需要包含 *.例如,以下将从fortune历史记录中排除,但会存储fortune -l

HISTIGNORE="*secret.server.com*:ytalk*:fortune"
HISTORY_IGNORE="*secret.server.com*|ytalk*|fortune"

设置 HISTIGNORE 后,与您列出的模式匹配的任何内容都不会保存到.bash_history/.zsh_history中,甚至向上箭头键(通常会调用您之前的命令)如果与您的模式匹配,也将不起作用。

答案3

在 bash 中,使用该HISTCONTROL变量。

将其设置为HISTCONTROL=ignorespace(或HISTCONTROL=ignoreboth)。从现在开始,当你以空格开始一行, 它会不是被保存在历史中。这避免了在某些配置文件中包含未公开的命令。

即使这样,它也碰巧忘记添加空格然后想返回。要删除历史记录中的条目,请使用history -d <index>, 以及index通过命令找到的编号history(第一列)。

答案4

最简单的一次性方法是

$ $SHELL
$$ unset HISTFILE
$$ secret-command
$$ exit
$

其中$表示初始 shell 的提示符,$$表示子 shell 的提示符。这适用于 bash 和 zsh;在 ksh 中,您需要HISTFILE=/notwritable改为。请注意,重要的是写入历史文件时的值HISTFILE,而不是运行命令时的值。 Bash、ksh 和 zsh 退出时会写入历史文件(根据配置,zsh 可以更频繁地执行此操作)。

或者,您可以让 bash 或 zsh 忽略与某些模式匹配的行(其他答案已经涵盖了这一点)。

zsh 中的另一种可能性是

% fc -p
% secret-command
% fc -P

fc -p将当前历史列表推入堆栈并启动一个与保存文件无关的新列表。fc -P将未保存的历史记录从堆栈中弹出并完全忘记它。

当进程运行时,命令及其参数(在某些系统上还有其环境)将显示在进程表(ps输出)中。 root 可以看到过去的命令系统会计数据库,并且可以在不受您控制的情况下进行更多日志记录。并且可能会有各种取证证据可以大致显示您运行的命令(例如文件修改时间)。因此,您无法获得针对坚决窃听者的隐私。

相关内容