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

相关推荐

  • 跟我一起学man page、history的使用,剖析FHS(文件系统目录标准)

    跟我一起学man page、history的使用,剖析FHS(文件系统目录标准) 描述 从Linux小白鼠成长为高(lao)高(hei)手(shu)的过程中,无论如何都要学会自个儿施法解决问题,法力的高深体现了解决问题的能力,这里的法力指的是在没有互联网的环境下如何使用man page或相关文档找到命令的使用方法和配置文件的修改方法。本文第一部分总结了在Li…

    Linux干货 2016-07-29
  • 庆祝马哥成为51cto学院Linux运维金牌讲师第一人

    讲师何其多,金牌只一人(2016免费课程在底部) 某天,小编听到: linuxer1:听说51CTO学院评出了一个Linux金牌讲师!只有一人呢! linuxer2:用腿想,就知道肯定是马哥喽! linuxer3:前段时间马哥又分享了2016最新课时,限时免费学习呢!10086个赞!我和我的好基友们都在学习! linuxer4:马哥的51CTO课程学员都两百…

    2016-04-14
  • Linux 常用命令之cp,一个可以煮饭的工具;

    cp 复制目录和文件 对于系统管理员来说,在文件系统中将文件和目录从一个位置复制到另外一个位置是家常便饭,而cp就是可以煮饭的工具之一。cp需要源对象和目标对象,源对象在前,目标对象在后面。 1. 常用选项 基本用法 [root@local tmp]# ll total 0 -rw-rw-r–. 1 gen…

    Linux干货 2016-08-02
  • 软件包管理 — rpm & yum

    软件包管理 包管理器     二进制应用程序的组成部分:         二进制文件、库文件、配置文件、帮助文件     程序包管理器:      &…

    Linux干货 2016-08-24
  • 硬链接和软链接的区别

    硬链接和软链接的区别 1、概念 在linux中,链接可分为两种:一种为硬链接,另一种为软链接。硬链接:ln 源文件 目标文件软链接:ln -s(soft)源文件 目标文件 硬链接 硬链接是指通过索引节点inode来进行链接。linux系统中每个文件对应一个inode,并且允许多个文件名指向用一个inode。这种情况的文件就成为硬链接。它的作用之一就是允许一个…

    Linux干货 2017-07-23
  • LVM逻辑卷管理

    本次内容         1、什么是LVM         2、为什么使用LVM         3、LVM的操作命令 …

    Linux干货 2016-09-02