问题描述
我使用终端很多,有时我正在运行命令,这不是我不希望别人看到的东西,但是更多的命令,如果我不小心被引导并意外执行,会导致很多麻烦。
所以我想知道是否有,或者我可以做出某种终端’incognito mode’,这将允许我在执行某个命令时停止记录我的历史记录,然后在执行开始记录历史记录后才开始记录再次命令并退出’incognito mode’,或者我只需重新启动终端?
因为后来我发现自己正在从.bash_history
中删除东西,那么如果我能够在第一时间停止记录,或者至少让它尝试将它记录在某个不适合的地方被允许,并且最终不会记录它。
最佳解决方案
运行一条命令而不将其放入历史记录中:
只需在命令前放置一个空格。 Bash将忽略具有预先占用空间的命令:
示例:Space
echo "Some secret text"
注意:只有在HISTCONTROL
变量设置为ignorespace
或ignoreboth
时才有效。
暂时禁用历史记录
-
运行
Space
set +o history
或Space
shopt -uo history
禁用历史记录。 -
运行
set -o history
或shopt -so history
以再次启用它。
禁用当前会话的历史记录(不记得会话中的任何命令):
unset HISTFILE
注意:您将能够看到命令按Up
,直到您关闭终端。
从历史记录中删除命令:
运行Space
history | grep "part of your secret command"
它将显示以前运行的命令的列表,格式如下:
casa@portátil:~$ history | grep pkill
302 pkill $$
467 pkill gone-cal
468 pkill actionaz
500 pkill chrome
550 pkill super
选择命令左侧的条目号。您可以使用Ctrl
+ Shift
+ C
复制它
运行Space
history -d <number>
,其中<number>
是删除条目的条目号。您可以粘贴该号码与Ctrl
+ Shift
+ V
其他有趣的答案:
次佳解决方案
您可以通过在工作后添加命令history -cw
来简单地删除特定终端会话的历史记录。在发出命令之前不要关闭终端。
第三种解决方案
shopt -uo history
应该做到最好。
删除HISTFILE
(等)变量不会停止记录您的Up
历史记录,它只是不会将其推送到磁盘。这对你来说可能有好处,也可能不对你有好处,但考虑到你提到它,我想你想要更好的东西。更改shopt
历史记录设置会停止整个历史记录机制的触发。
您可以使用shopt -so history
重新打开日志(分别设置和取消设置-s
和-u
)。
请注意,命令本身可能会被记录下来,所以在清除变量之前,需要预留一个空格来阻止它被添加到历史记录中。
第四种方案
另一种杀死当前shell而不登录到历史文件的方法是:
kill -9 $$
这会导致bash(也可能是其他shell)将SIGKILL信号发送给自己,在现场杀死它并阻止它将任何内容写入磁盘。
第五种方案
要临时禁用当前会话的命令历史记录,可以临时取消设置HISTFILE环境变量。
unset HISTFILE
当会话处于活动状态时,您可以照常访问历史记录,但不会保存到磁盘。
在相同的会话中反向(所有更改都将被记录)
HISTFILE=$HOME/.bash_history
第六种方案
您可以修改当前shell会话中的历史行。如果您回顾历史记录(例如,使用Up
或Ctrl
+ P
)并更改一行而不执行它,则只会保存该行的修改版本。你可以用你喜欢的任何方式修改它;好的选择将包括使用Ctrl
+ U
完全清空行或使用Esc
#
在开始处放置#
注释字符。
要在不执行的情况下留下一行,请记住不要点击Return
(Enter
)。我所做的是通过Esc
>
回到历史上最新的一行。
(而不是Esc
,然后是>
,在大多数终端中,您可以容纳Alt
并按>
;对于上面的Esc
#
建议也是如此)。
注意:您不能以这种方式永久修改以前会话中的条目。这些更改将不会在会议结束时应用于HISTFILE
。
第七种方案
您也可以制作.bash_history read-only。我会先清空文件,然后执行:
chattr +i .bash_history
第八种方案
您可以在屏幕会话中执行敏感命令,然后在完成后摧毁会话。
或者,您可以保持该屏幕会话处于活动状态但已分离,并且只有在您确实希望能够向上提供其他危险命令时才能访问它。