一、前言
终端运行每个命令都会记录下来,每次运行以后,使用history命令就能看到运行记录。出于某种目的,可能不希望让别人看到自己的操作,那么怎么"抹去"这些不想让别人知道的操作呢?
二、可行方案
可以使用很多种方法,个人感觉比较好的方法有两种。
1、使用空格
是的,没看错。在命令前面插入空格,这条命令会被 shell 忽略,也就意味着它不会出现在历史记录中。但是这种方法有个前提,只有在你的环境变量 HISTCONTROL 设置为 "ignorespace" 或者 "ignoreboth" 才会起作用。在大多数情况下,这个是默认值,我们无需设置这个环境变量。
所以,像下面的命令(这里[space]表示输入一个空格):
1 | [space]echo "this is a top secret" |
运行这个echo指令,使用history命令是找不到这个记录的。
如果仍然记录了这个操作,那说明环境变量需要设置一下,使用指令如下:
1 | export HISTCONTROL = ignorespace |
这个环境变量设置好之后,那么再使用空格这个方法,就可以很有效的隐藏命令了。效果如下图所示:
可以看到,第四个加入空格的命令没有被记录。
但是需要注意的一点,这样做需要每次都要添加空格。少量操作很合适,但当操作指令多了,这么做有些不方便,这时候怎么办呢?
2、使用软链接
我们知道history记录存放在~/.bash_history文件中,既然记录是放在这个文件里的,那么我们就可以把写入~/.bash_history转移写入到其他的地方,这里就可以使用软连接了,方法如下:
1 | ln -s /dev/null ~/.bash_history |
上述指令的意思就是,建立了一个/dev/null的软连接,也就是当我们向~/.bash_history写入内容的时候,因为有软连接的存在,实际上是写入/dev/null。这样我们的操作记录就不会写入~/.bash_history了。那么,/dev/null是什么呢?
/dev/null可以理解成“无底洞”级垃圾桶,来者不拒,来多少扔多少,从这扔出去的东西别想在找回来。它类似一个黑洞,写入任何东西都会返回成功,但是实际写入数据随即被丢弃。
建立好软连接之后,我们在shell输入的任何命令都不会记录到history中。
骚操作结束了,怎么恢复,让history正常记录呢?
没错,使用如下指令删除软连接即可:
1 | rm -rf ~/.bash_history |
注意:不是
1 | rm -rf ~/.bash_history/ |
如果结尾有"/",那么源文件也会被删除。只删除软连接的话,不能加"/"。
2018年2月16日 下午10:56 沙发
哈哈,有点意思~
2018年2月17日 上午10:52 1层
@GenialX 大过年也学习啊,哈哈