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 16:43
下一篇 2016-07-26 16:43

相关推荐

  • 系统基础之权限管理

    权限管理: 概论:  上节,为大家介绍了用户,和组的知识.今天为大家介绍与用户,组息息相关的知识,权限.linux是多用户,多任务的操作系统,面对多人的操作,安全问题就很重要,权限机制就很好的对安全进行防护,避免他人操作自己的文件.下面给大家详细介绍权限.   首先让我们先直观地看下权限,对权限有个最基本的认识.以/etc/issue文件…

    Linux干货 2016-08-04
  • Linux 目录结构

    Linux 目录结构 1.     前言     Linux 是一种开源的,且非常流行的操作系统,发行版本众多。为了统一和规范linux系统的主要目录名及其用途,提出了FHS标准,FHS是File Hierarchy Standard的简写。Linu…

    Linux干货 2015-07-26
  • 2017-10-4Linux基础知识(3)

    在上一章中讲到了操作系统的历史的发展以及Linux的如何诞生,在1991年的8月份,创始人Linus宣布成立Linux的,Larry Wall开发diff和patch打补丁的命令程序使得Linux可以在安全性方面有很大的提升。

    Linux干货 2017-10-05
  • Linux第八周小结

    1、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态 在线的主机使用绿色显示 不在线的主使用红色显示 #!/bin/bash # for i in {1..254};do if ping -c 6 -w 1 192.168.1.$i &> /dev/null;then echo -e…

    Linux干货 2017-08-20
  • 马哥教育网络班21期-第一周课程练习

    第一周课程练习 1、描述计算机的组成及其功能?         1.1 现代主流的计算机(冯·诺依曼体系)主要由五部分组成,分别是控制器、运算器、存储器、输入和输出设备。控制器和运算器对应我们现实计算机看到的CPU,存储器对应内存和硬盘等存储设备,输入设备对应鼠标键盘等其它外设,输出设备对应显示器、音响、打印机等其它外…

    Linux干货 2016-06-26
  • select case的用法-函数练习-20160819

    §·select  case的用法 *介绍select 循环与菜单 ◎语法 select  variable  in  list[ ] do 循环体命令 Done  ◎select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输 入 ◎用户…

    Linux干货 2016-08-19