history命令详解,铭记历史,圆梦中华。

    铭记历史,圆梦中华。在Linux操作系统中,对于管理员操作的命令进行查询也是非常重要,而且熟练掌握调用命令历史能提高管理员管理系统的效率。

    history的命令缓存数目是由一个在/etc/profile文件名为HISTSIZE的变量决定,可以通过env命令查看当前设定的数目,也可以通过修改HISTSIZE的数值来决定缓存多少条命令。建议修改添加至自己家目录下面的.bash_profile,不要修改全局的变量。以下所有变量我均是添加在自己的家目录下面的.bash_profile,若有需要请自行在/etc/profile修改

常用选项

     n 列出当前的n条命令

     -a 清除缓存中的所有命令

     -c 清除当前shell中缓存的命令

     -r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中

    -w :将目前的 history 记忆内容写入 histfiles。Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中。默认保存1000条,你也可以更改这个值。如果你键入 history, history会向你显示你所使用的前1000个历史命令,并且给它们编了号,你会看到一个用数字编号的列表快速从屏幕上卷过。你可能不需要查看1000个命令中的所有项目, 当然你也可以加入数字来列出最近的 n 笔命令列表。linux中history命令不仅仅让我们可以查询历史命令而已. 我们还可以利用相关的功能来帮我们执行命令。运行特定的历史命令history会列出bash保存的所有历史命令,并且给它们编了号,我们可以使用“叹号接编号”的方式运行特定的历史命令.

常用用法:

    !NUMBER 执行第NUMBER条命令

    !! 和crtl+p 都是执行上一条命令

    ! COMMAND e.g !c  执行最近的以c开头的命令,切记是从后往前最近的一条以C开头的命令。

常用案例

1、查看history命令使用的时间

    由于history列出的命令很多,我们可以通过管道命令将history命令送给less命令方便查看,e.g history |less ;

    同时我们可以设置history的环境变量HISTTIMEFORMAT让其显示每条命令执行时间,方便查看和了解当前系统何时执行过什么命令.

    export HISTTIMEFORMAT='%F %T '

    若要是想永久让history命令显示时间,将上面这条命令追加至当前用户的家目录下面.bash_profile里面。

2、用Ctrl + R搜索历史命令

    我非常确信这应该是你最常使用的history特性,当你执行了一串相当长的命令之后,你只要用关键字搜索一下历史命令然后重新执行这条命令而不需要将整条命令再输一遍。方法是:按下Ctrl +R然后输入关键字。 在以下示例中,我搜索“sys”,则显示以前的命令中含有”sys”的命令“cat/etc/system-release”。

  [注:在命令行提示符下按下Ctrl+R,终端将显示如下提示―reverse-i-search‖]

   (reverse-i-search)`sys`: cat/etc/system-release

  [注:当看到你要的命令后按回车键,就可以重新执行这条命令了]

   cat /etc/system-release

  而有的时候你需要在执行一条历史命令之前编辑它.比如,你可以像下面那样搜索“sys”,终端显示历史命令“cat /etc/system-release”,选择它把"system"改为“centos”然后执行它

  [注: 在命令提示符下按 Ctrl+R , 将会显示提示符‖reverse-i-search‖]

   (reverse-i-search)`sys`:cat /etc/system-release 

  [注: 看到你想要的命令后按下左键或者右键,就可以在执行这条命令之前编辑它了]

cat /etc/centos-release

   3、使用HISTFILE改变历史文件名

   默认情况下,命令历史被储存在.bash_history文件中,把下面的一行添加到.bash_profile文件中,重新登录shell,则.commandline_warrior文件将取代.bash_history文件用来储存历史命令。你可以使用这个命令来追踪不同终端中执行的命令,届时只需要将不同终端中所执行的命令保存在不同的历史文件中即可。这样就能知道系统出问题到底是谁在操作导致的。

   vim ~/.bash_profile

   HISTFILE=/root/.commandline_warrior

4、使用HISTCONTROL来消除命令历史中的连续重复条目;

    cat /etc/profile

    if [ "$HISTCONTROL" = "ignorespace" ] ; then

         export HISTCONTROL=ignoreboth

    else

         export HISTCONTROL=ignoredups

    fi

    这个HISTCONTROL变量就是控制是否显示连续的重复条目,连续敲三次ls, 这三次ls就叫做连续重复命令;假若敲一次ls,一次cd,再一次ls,这不叫做连续重复命令;

    ignoreups就是ignoredups去除连续重复的命令,只能剔除连续的重复条目;要清除整个命令历史中的重复条目,可以将 HISTCONTROL 设置成 erasedups;

    ignorespce 是以空格开头的命令在history中不显示,e.g [spcace] ls ,再去history就不能发现ls这个命令,但是我们能看到这个命令是执行了的。

    ignoreboth 就是同时带着上面两种选项的结果。

5、将上一个命令的参数传递给当前命令。

    !!:$将上一个命令的参数传递给当前命令

    e.g cat /etc/profile

     vim !!:$ 这个打开还是/etc/profile 这个文件

    !^ 将上一个命令中的第一个参数传递给当前命令

    cp /etc/profile /tmp

    vim !^ 打开的文件就是 /etc/profile

6、替换特定命令的特定参数

    在下例中,!cp:2 在命令历史中查找以cp开头的命令,并将其第二个参数做为当前命令(ls -l)的参数。

    cp /etc/profile /tmp

    ls -l !cp:2

    ls -l /tmp

    在下面的例子中“!cp:$”寻找先前以cp为开头的命令,并把该条指令的最后一个参数(在这个例子中依旧是第二个参数)替换到“ls –l”中。

    ls -l !cp:$

    ls -l /tmp

同理,ls -l !cp:^ 就是需要以cp开头命令,并把该条命令的第一个参数替换到“ls -l”中

     ls -l !cp:^

     ls -l /etc/profile

7、用HISTIGNORE让history在存储时忽略某些指令

   有时你不想在记录里看到诸如“pwd”,“ls”之类的基本指令,可以用HISTIGNORE忽略这些指令。

   注意在HISTIGNORE中添加“ls”,只忽略“ls”不忽略“ls –l”。一定要准确的写出要忽略的的指令。

   #export HISTIGNORE=“pwd:ls:”

同理这条命令可以追加进家目录下的.bash_profile。

原创文章,作者:fighter,如若转载,请注明出处:http://www.178linux.com/25614

(1)
fighterfighter
上一篇 2016-07-26
下一篇 2016-07-26

相关推荐

  • Linux之bash shell脚本编程入门篇(三)之循环以及函数function的使用

    bash shell脚本编程入门篇(三)之循环 什么是循环执行?     将某代码段重复运行多次     重复运行多少次:         循环次数事先已知    &nb…

    Linux干货 2016-08-22
  • linux下绘图工具rrdtool

    一、前言       为了做云缓存平台的技术储备,从零开始学习了rrdtool,rrdtool非常强大,刚接触会有摸不着边的感觉,尤其是一堆概念性的东西。学习的切入点便是这些概念,一一理解后你才能品尝到rrdtool的清香,首先要感谢ailms整理的“RRDtool简体中文教程 v1.01”,通俗易…

    Linux干货 2015-03-27
  • 从Linux小白到大牛——与狼共舞的日子6

    马哥教育网络班21期+第6周课程练习 请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@localhost ~]# cp /etc/rc.d/rc.sysinit …

    Linux干货 2016-10-31
  • Linux交换分区的创建和调整

    概述 本文对swap进行简要介绍,以及系统安装后(在运行中)如何建立或调整swap分区。 文中演示环境为: 什么是swap space? 交换分区,即swap space。它将某段磁盘空间独立划分出来,当物理内存不够的情况下,系统先把物理内存中暂时不用的数据,暂存到交换空间,腾出内存空间来,以保证程序的运行;当swap中存储的页面被访问到时,系统会将其重新载…

    Linux干货 2016-08-30
  • ls 命令浅谈

           LS命令是Linux中最常用的命令,ls是list的缩写,通过ls命令不仅可以查看Linux文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等。ls命令在日常的Linux操作中用的很多。(这里只是介绍了一部分)       命令格式:ls …

    2017-07-15
  • SRE管理职责简介

    读书笔记 摘要 SRE是Site Reliability Engineer的简称,从名字可以看出Google的SRE不只是做Operation方面的工作,更多是保障整个Google服务的稳定性。 SRE管理职责简介 监控系统 警报 工单 日志 应急事件处理 变更管理 预测需求和规划容量 资源部署 小结 监控系统 监控系统是 SRE 团队监控服务质量…

    Linux干货 2017-04-03