如何隐藏你的Linux的命令行历史

如果你是 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”清除整行,也会从历史记录中删除它。

总结

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

作者:Himanshu Arora

来源:51CTO

时间: 2024-11-10 08:02:59

如何隐藏你的Linux的命令行历史的相关文章

如何隐藏你的 Linux 的命令行历史

如果你是 Linux 命令行的用户,有的时候你可能不希望某些命令记录在你的命令行历史中.原因可能很多,例如,你在公司担任某个职位,你有一些不希望被其它人滥用的特权.亦或者有些特别重要的命令,你不希望在你浏览历史列表时误执行. 然而,有方法可以控制哪些命令进入历史列表,哪些不进入吗?或者换句话说,我们在 Linux 终端中可以开启像浏览器一样的无痕模式吗?答案是肯定的,而且根据你想要的具体目标,有很多实现方法.在这篇文章中,我们将讨论一些行之有效的方法. 注意:文中出现的所有命令都在 Ubuntu

教你隐藏Linux的命令行历史_unix linux

Linux操作系统默认都会保存用户操作的历史命令,如果你是 Linux 命令行的用户,有的时候你可能不希望某些命令记录在你的命令行历史中.原因可能很多,例如,你在公司担任某个职位,你有一些不希望被其它人滥用的特权.亦或者有些特别重要的命令,你不希望在你浏览历史列表时误执行.然而,有方法可以控制哪些命令进入历史列表,哪些不进入吗?或者换句话说,我们在 Linux 终端中可以开启像浏览器一样的无痕模式吗?答案是肯定的,而且根据你想要的具体目标,有很多实现方法. 在这篇文章中,我们将讨论一些行之有效的

利用uniread 解决 Linux下的SQL*Plus 命令行历史回调功能

解决|命令行 利用uniread 解决 Linux下的SQL*Plus 命令行历史回调功能 作者: Fenng 大家知道, 在 Windows 平台 命令行中的 SQL*Plus 有命令行历史回调的功能,在SQL*Plus工具下面,可以利用键盘的"向上向下"箭头键对命令行的进行回调.而在Linux上则没有该功能(虽然 Shell 可以做到这一点,但是 SQL*Plus 不可以). 而该功能对于CLI爱好者来说几乎是不可缺的,不知道为什么 Oracle 不把这个功能加进来.不得而知了.

linux解析命令行选项getopt

  linux解析命令行选项getopt_long用法 在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子. 下面介绍使用getopt_long解析命令行选项. 程序中主要使用: 短选项 长选项 是否需要参数 备注 -v --version 否 查询版本号 -n --name 是(用户名) 指定使用者 -d --debug 否 是否已测试 1.函数出处 复制代码 代码如下: [cpp] #include //getopt_long()头文件位置 int get

Linux的命令行打字不显示咋办?

现象 我们在使用某些奇怪的程序时,会发现,你敲键盘命令行不显示任何东西.比如输入密码.当然,输密码肯定是不能显示出来了. 但是有的时候,因为程序什么的问题,敲命令行也不显示东西.只有回车的时候,看到命令执行的结果.这是怎么回事,怎么办? 原因: 因为,stty关闭了输入回写.我们可能想当然的认为,敲了键盘,就应该有字出现在屏幕上.只是这个也是因为程序提供了这个功能.如果程序不写这个功能,我们可能就不会这样认为. 各个把键盘键入的字符输出来的就是stty的输入回写功能,包括退格等字符处理,都是st

linux shell命令行下curl问题。。。,,

问题描述 linux shell命令行下curl问题...,, curl -d 之后收到网页的返回数据,是代表发送成功了么 如果是成功了,为什么我么有收到短信呢 如果没成功,应该怎么发送一个post数据呢 解决方案 关于curl命令行下载页面为空的问题 解决方案二: curl -d只是post的数据过去,你要看发挥的信息是否有提示成功.

如何在Linux的命令行中使用Evernote

如何在Linux的命令行中使用Evernote 这周让我们继续学习如何使用Linux命令行管理和组织信息.在命令行中管理你的个人花费后,我建议你在命令行中管理你的笔记,特别是当你用Evernote记录笔记时.要是你从来没有听说过它,Evernote 专门有一个用户友好的在线服务可以在不同的设备间同步笔记.除了提供花哨的基于Web的API,Evernote还发布了在Windows.Mac.Android和iOS上的客户端.然而至今还没有官方的Linux客户端可用.老实说在众多的非官方Linux客户

PHP调用Linux的命令行执行文件压缩命令_php技巧

前几天工作中,需要将3个txt文件,打包成*.zip down到本地-- 一开始,我和普通青年一样,想到用PHP内置的 ZipArchive,代码看起来应该是这样的: 复制代码 代码如下: /*拆分成3个txt文件 分别是wow_1.txt wow_2.txt 和 wow_3.txt*/ $zip=new ZipArchive(); $zipfile='./Exl_file/wow.zip'; if($zip->open($zipfile,ZIPARCHIVE::CREATE)===TRUE){

如何在Linux中用命令行工具管理KVM虚拟环境

如何在Linux中用命令行工具管理KVM虚拟环境 在我们KVM系列专题的第四部分,我们将会一起讨论下在命令行界面下来管理KVM环境.我们分别用'virt-install'和virsh命令行工具来创建并配置虚拟机和存储池,用qemu-img命令行工具来创建并管理磁盘映像. Linux系统的KVM管理 在这篇文章里没有什么新的概念,我们只是用命令行工具重复之前所做过的事情,也没有什么前提条件,都是相同的过程,之前的文章我们都讨论过. 第一步: 配置存储池 Virsh命令行工具是一款管理virsh客户