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

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

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

不同的可行方法

前面两种方法已经在之前一篇文章中描述了。如果你已经了解,这部分可以略过。然而,如果你不了解,建议仔细阅读。

1. 在命令前插入空格

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

所以,像下面的命令(LCTT 译注:这里[space]表示输入一个空格):

  1. [space]echo "this is a top secret"

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

  1. export HISTCONTROL = ignorespace

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

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

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

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

  1. export HISTSIZE=0

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

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

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

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

  1. history -cw

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

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

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

  1. [space]set +o history

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

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

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

  1. [Space]set -o history

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

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

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

  1. history | grep "part of command you want to remove"

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

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

  1. history -d [num]

下面是这个例子的截图。

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

(LCTT 译注:如果你不希望上述命令本身也被记录进历史中,你可以在上述命令前加个空格)

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

原文发布时间为:2016-07-14

本文来自云栖社区合作伙伴“Linux中国”

如何隐藏你的 Linux 的命令行历史相关推荐

  1. linux 脚本编写基本命令,Linux Shell命令行及脚本编程实例详解

    <Linux典藏大系:Linux Shell命令行及脚本编程实例详解>共15章,分为两篇.主要内容包括:Linux 及Linux Shell简介.初识Linux Shell.常用Shell ...

  2. Linux快捷键-命令行下

    LINUX中命令行下是没有鼠标的,所以所有的操作只能通过键盘来实现.确实,鼠标对于电脑而言感觉还是很重要的,相对与Windows,Linux在易操作性上差的很多.所以,对于我们技术人员来讲,刚开始学习 ...

  3. linux zsh命令行vim命令补齐,Linux使用zsh提高效率的5条建议

    平时比较喜欢命令行,不喜欢从图形化界面一个个的点过去:感觉还是命令搜索,查找方便些,快速些.但是,Bash本身提供的功能又不够方便,自己也懒得折腾.幸得github上有前辈大神们开源的 zsh工具集, ...

  4. Linux终端命令行下的常用快捷键使用

    Linux终端命令行下的常用快捷键 文章目录: ***`下面我只介绍常用的命令,其他的用的几乎很少,常用自然就是总会用的到的,而且用处比较大的,可以提高工作效率的,下面我亲自测试这些命令都是亲测可行的 ...

  5. Linux下命令行压缩照片或图片的脚本 (ImageMagick使用心得,convert,import,display实例)

    from: Linux下命令行压缩照片或图片的脚本 (ImageMagick使用心得,convert,import,display实例) 在认识ImageMagick之前,我使用的图像浏览软件是Kui ...

  6. windows、linux下命令行登录oracle数据库方法,查询sga参数值sql语句

    windows 下 cmd 命令行登录 oracle 数据库方法.直接就登录进来了. C:\Users\Administrator>sqlplusSQL*Plus: Release 11.2.0 ...

  7. Linux 在一个命令行上执行多个命令

    Linux 在一个命令行上执行多个命令 1. [ ; ] 如果被分号(;)所分隔的命令会连续的执行下去,就算是错误的命令也会继续执行后面的命令. 2. [ && ] 如果命令被 &am ...

  8. linux 粘贴内容命令行,Linux下命令行中的复制和粘贴

    PHP面向对象常见的关键字和魔术方法 在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有 ...

  9. Linux/Ubuntu: 命令行任务(To-Do List)管理 task - A command line todo manager

    安装: sudo apt-get install task $ task add some very important task $ task You can also install vit if ...

最新文章

  1. python 判断字母大小写
  2. Codeforces937D Sleepy Game
  3. static方法与非static方法是否可以互相调用
  4. BST(Binary Search Tree 二叉查找树模版)
  5. MATLAB的VLFeat工具箱
  6. JavaMail操作的总结(2)
  7. word标题多级编号里的坑
  8. Python 数独求解
  9. self paced learning(自步学习)
  10. 初识Calcite——使用实例
  11. 谷粉搜搜 九尾搜索 推荐
  12. sql server 修改列属性为非必填项
  13. php laravel入口文件,Laravel 应用的入口:路由系列之基础入门篇
  14. #读书笔记# 《人性的弱点》| 人际关系的基本技巧
  15. rootfs编译步骤2解析
  16. jvm内存结构和内存模型
  17. BRD、MRD 和 PRD
  18. 洛谷P4799:世界冰球锦标赛【折半搜索】
  19. 什么是泛域名?IIS里怎么设置泛域名?
  20. 【正点原子STM32连载】 第六十章 USB鼠标键盘(Host)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

热门文章

  1. linux剪贴板复制文件原理,linux剪贴板原理
  2. 在WORD文档里如何添加编号
  3. System.InvalidOperationException: The stream does not support reading
  4. 西伯利亚(Siberia)冷空气
  5. (读书笔记).NET大局观-.NET框架类库概观
  6. 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。
  7. maven升级遇到的疑惑
  8. Linux中最受欢迎的邮件传输代理(MTA)
  9. struts2常用标签
  10. asp.net常用函数 选择自 UAM_Richard 的 Blog