如何隐藏你的 Linux 的命令行历史
我们在 Linux 终端中可以开启像浏览器一样的无痕模式吗？
命令行 历史
218.249.73.5
第二点有问题吧，HISTFILESIZE控制的是.bash_history文件里记录历史的命令条数，当前shell依旧可以记录历史啊，依旧可以用上下键查看历史记录啊。
青莲居士 [Chrome 51.0|GNU/Linux]
2016-07-14T16:03:04.000
218.249.73.5
还有这些资料在哪能查询到啊？我想差ignorespace和ignoreboth两个参数有什么不同，我 man history查询不到。
青莲居士 [Chrome 51.0|GNU/Linux]
2016-07-14T16:05:38.000
218.249.73.5
另外history -cw这个命令根本不能清除已经保存在历史记录文件中的历史记录，这篇文章好多错误的啊。
青莲居士 [Chrome 51.0|GNU/Linux]
2016-07-14T16:57:16.000
118.112.206.204
A value of ignoreboth is shorthand for ignorespace and ignoredups. -&gt; (man bash)
来自四川成都的 Chrome 51.0|GNU/Linux 用户
2016-07-14T19:57:23.000
123.118.180.108
原文有误，应该是 HISTSIZE ，用来控制当前会话的历史。已经修改。
linux [Chrome 50.0|Mac 10.11]
2016-07-14T21:08:41.000
118.112.206.204
应该没有问题吧。把写入到历史记录文件的数目设置为零，即表示不进行持久化存储。当前会话的记录，进程一退出自然就丢弃了，先次打开新进程也不会看见。浏览器的隐私模式也是一样，在浏览过程中，之前的记录还是会看见，但是一旦关闭浏览器，下次再打开不会看见之前的内容。
来自四川成都的 Chrome 51.0|GNU/Linux 用户
2016-07-14T21:29:40.000
112.10.68.57
我来补充一些<br />
cat | bash #执行这条命令后可以直接在其之后执行其他命令，除了这条命令不会留下其他目录的历史，Tab键功能不能用<br />
echo &gt; ~/.bash_history #清除当前用户所有记录到文件里的记录<br />
history -c #清楚所有历史纪录，不能清除文件里的<br />
history -d {n} #清除历史纪录中指定的某条记录，{n}为数字<br />
history -d {n} &amp;&amp; history -d {x} &amp;&amp; history -d {y} #清除指定的多条记录，包括可以清除自身这条<br />
for i in {99..233}; do history -d $i; done #使用for循环清除指定连续的多条命令<br />
【吐槽：这回复框能再大点吗？或者可以手动定义大小。或者赶跟小点吗！】
ZMOM1031 [Chrome 51.0|Windows 10]
2016-07-14T21:40:10.000
123.118.180.108
好，可以更大点~~~
linux [Chrome 50.0|Mac 10.11]
2016-07-14T21:52:47.000
218.249.73.5
谢谢。
青莲居士 [Chrome 51.0|GNU/Linux]
2016-07-15T09:28:12.000
218.17.122.82
第一次知道还可以删除历史记录。帅气~
何亮 [Chrome 49.0|Windows 7]
2016-07-19T13:35:16.000
14.0.156.78
rm ~/.bash_history或cat /dev/null&gt;~/.bash_history
来自香港的 Firefox 49.0|GNU/Linux 用户
2016-08-10T07:59:04.000
我们在 Linux 终端中可以开启像浏览器一样的无痕模式吗？
![](/data/attachment/album/201607/14/144754m886a2m4a917oj11.jpg)


如果你是 Linux 命令行的用户，有的时候你可能不希望某些命令记录在你的命令行历史中。原因可能很多，例如，你在公司担任某个职位，你有一些不希望被其它人滥用的特权。亦或者有些特别重要的命令，你不希望在你浏览历史列表时误执行。


然而，有方法可以控制哪些命令进入历史列表，哪些不进入吗？或者换句话说，我们在 Linux 终端中可以开启像浏览器一样的无痕模式吗？答案是肯定的，而且根据你想要的具体目标，有很多实现方法。在这篇文章中，我们将讨论一些行之有效的方法。


注意：文中出现的所有命令都在 Ubuntu 下测试过。


### 不同的可行方法


前面两种方法已经在之前[一篇文章](https://www.maketecheasier.com/command-line-history-linux/)中描述了。如果你已经了解，这部分可以略过。然而，如果你不了解，建议仔细阅读。


#### 1. 在命令前插入空格


是的，没看错。在命令前面插入空格，这条命令会被 shell 忽略，也就意味着它不会出现在历史记录中。但是这种方法有个前提，只有在你的环境变量 `HISTCONTROL` 设置为 "ignorespace" 或者 "ignoreboth" 才会起作用。在大多数情况下，这个是默认值。


所以，像下面的命令（LCTT 译注：这里`[space]`表示输入一个空格）：



```
[space]echo "this is a top secret"

```

如果你之前执行过如下设置环境变量的命令，那么上述命令不会出现在历史记录中。



```
export HISTCONTROL = ignorespace

```

下面的截图是这种方式的一个例子。


![](/data/attachment/album/201607/14/144812tvz1umbi05btz01b.png)


第四个 "echo" 命令因为前面有空格，它没有被记录到历史中。


#### 2. 禁用当前会话的所有历史记录


如果你想禁用某个会话所有历史，你可以在开始命令行工作前简单地清除环境变量 `HISTSIZE` 的值即可。执行下面的命令来清除其值：



```
export HISTSIZE=0

```

`HISTSIZE` 表示对于 bash 会话其历史列表中可以保存命令的个数（行数）。默认情况，它设置了一个非零值，例如在我的电脑上，它的值为 1000。


所以上面所提到的命令将其值设置为 0，结果就是直到你关闭终端，没有东西会存储在历史记录中。记住同样你也不能通过按向上的箭头按键或运行 history 命令来看到之前执行的命令。


#### 3. 工作结束后清除整个历史


这可以看作是前一部分所提方案的另外一种实现。唯一的区别是在你完成所有工作之后执行这个命令。下面是刚说到的命令：



```
history -cw

```

刚才已经提到，这个和 `HISTSIZE` 方法有相同效果。


#### 4. 只针对你的工作关闭历史记录


虽然前面描述的方法（2 和 3）可以实现目的，它们可以清除整个历史，在很多情况下，有些可能不是我们所期望的。有时候你可能想保存直到你开始命令行工作之间的历史记录。对于这样的需求，你开始在工作前执行下述命令：



```
[space]set +o history

```

备注：`[space]` 表示空格。并且由于空格的缘故，该命令本身也不会被记录。


上面的命令会临时禁用历史功能，这意味着在这命令之后你执行的所有操作都不会记录到历史中，然而这个命令之前的所有东西都会原样记录在历史列表中。


要重新开启历史功能，执行下面的命令：



```
[Space]set -o history

```

它将环境恢复原状，也就是你完成了你的工作，执行上述命令之后的命令都会出现在历史中。


#### 5. 从历史记录中删除指定的命令


现在假设历史记录中已经包含了一些你不希望记录的命令。这种情况下我们怎么办？很简单。直接动手删除它们。通过下面的命令来删除：



```
history | grep "part of command you want to remove"

```

上面的命令会输出历史记录中匹配的命令，每一条前面会有个数字。


一旦你找到你想删除的命令，执行下面的命令，从历史记录中删除那个指定的项：



```
history -d [num]

```

下面是这个例子的截图。


![](/data/attachment/album/201607/14/144827q5bqgfyrh8p8h81r.png)


第二个 ‘echo’命令被成功的删除了。


（LCTT 译注：如果你不希望上述命令本身也被记录进历史中，你可以在上述命令前加个空格）


同样的，你可以使用向上的箭头一直往回翻看历史记录。当你发现你感兴趣的命令出现在终端上时，按下 “`Ctrl + U`”清除整行，也会从历史记录中删除它。


### 总结


有多种不同的方法可以操作 Linux 命令行历史来满足你的需求。然而请记住，从历史中隐藏或者删除命令通常不是一个好习惯，尽管本质上这并没有错。但是你必须知道你在做什么，以及可能产生的后果。




---


via: <https://www.maketecheasier.com/linux-command-line-history-incognito/>


作者：[Himanshu Arora](https://www.maketecheasier.com/author/himanshu/) 译者：[chunyang-wen](https://github.com/chunyang-wen) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

