zoukankan      html  css  js  c++  java
  • history命令详解

    Linux下history命令用法

    ^_^在项目中希望调用history命令来获取用户的历史记录,方便分析,可是我们平时所见到的history结果是下面这样:

    # history | head -10
       30  rm -fr lala
       31  for i in `seq 1000`; do
       32  sleep 1
       33  for i in `seq 1000`; do sleep 10
       34  cd /home/
       35  ll
       36  cd lib/
       37  ll
       38  cd ..
       39  ll
    

    貌似达不到我们想要的效果,显示具体时间,具体命令的效果,那现在让我们一起来探索一下history命令的奥妙吧!

    使用 HISTTIMEFORMAT 显示时间戳

    # export HISTTIMEFORMAT='%F %T'
    # history | more
        1  2016-08-01 14:47:55ls
        2  2016-08-01 14:47:55vim /etc/sudoers
        3  2016-08-01 14:47:55ls
        4  2016-08-01 14:47:55cd /home/ruanyang/
        5  2016-08-01 14:47:55ls
        6  2016-08-01 14:47:55cd 下载
        7  2016-08-01 14:47:55ls
        8  2016-08-01 14:47:55cd ctags-5.8/
    

    备注:这个环境变量的声明只能作用于当前的bash,所以如果长久有效的话,需要将其定义到/etc/profile文件中

    使用 HISTSIZE 控制历史命令记录的总行数

    将这两行内容追加到/etc/profile文件中,当你再次重新登录bash时,历史命令总行数会变成100000

    export HISTSIZE=100000
    export HISTFILESIZE=100000
    

    备注:如果我们想要看到更多的历史命令时,不妨使用这个变量

    使用 HISTFILE 更改历史文件名称

    默认情况下,历史命令存放在~/.bash_history文件中。如下,重新定位历史命令存放位置

    export HISTFILE=/.logs/history_${LOGNAME}
    

    备注:这样可以将每个用户的历史文件清晰的使用文件名来标记,方便分析

    使用 HISTCONTROL 从命令历史中剔除连续重复的条目

    HISTCONTROL=ignoredups剔除连续的相同命令的条目,仅剩余一条,如下:

    # export HISTCONTROL=ignoredups
    # cd
    # cd
    # cd
    

    我们现在来看看效果吧!

    # history | tail -n 5
      133  2016-08-01 17:51:30history 
      134  2016-08-01 18:09:54export HISTCONTROL=ignoredups
      135  2016-08-01 18:09:59cd
      136  2016-08-01 18:10:04history 
      137  2016-08-01 18:22:12history | tail -n 5
    

    三个cd变成一个了

    使用 HISTCONTROL 清除整个命令历史中的重复条目

    HISTCONTROL=erasedups历史中的重复命令被清除到仅剩距离当前时间最近的那条命令

    # export HISTCONTROL=erasedups
    # pwd
    # cd
    # ls
    # pwd
    # pwd
    

    看看效果吧!pwd剔除剩一个啦

    # history | tail -10
      100  2016-08-01 18:34:47export HISTCONTROL=erasedups
      101  2016-08-01 18:34:58cd
      102  2016-08-01 18:34:58ls
      103  2016-08-01 18:35:07pwd
      104  2016-08-01 18:35:20history | tail -10
    

    使用 HISTCONTROL 强制 history 不记住特定的命令

    HISTCONTROL=ignorespace,在不想被记住的命令前面输入一个空格

    $ export HISTCONTROL=ignorespace
    $ ls
    $  cd
    $ pwd
    

    注意,我在cd前输入了一个空格,我们一起来看看效果吧!cd消失啦!

    $ history | tail -5
     1997  more sources.list
     1998  export HISTCONTROL=ignorespace
     1999  ls
     2000  pwd
     2001  history | tail -5
    

    使用HISTSIZE禁用history

    如果想禁用history,可以将HISTSIZE设置为0:

    $ export HISTSIZE=0
    $ history 
    

    使用HISTIGNORE忽略历史中的特定命令

    忽略pwdls命令:

    $ export HISTIGNORE="pwd:ls:"
    $ pwd
    $ cd
    $ ls
    

    看看效果吧!

    $ history 4
     1998  export HISTIGNORE="pwd:ls:"
     1999  cd
     2000  history 5
    

    快捷键-使用CTRL+R搜索历史

    比较简单,自己动手试一下吧!

    从命令历史中执行一个指定的命令

    !number

    eg.!4

    指定关键字来执行以前的命令

    输入!ps并回车,将执行以ps打头的命令

    快速重复执行上一条命令

    以下四种方法,上方向键、!!!-1crtl+p

    $ history 4
     1998  export HISTIGNORE="pwd:ls:"
     1999  cd
     2000  history 5
     2001  history 4
    $ !!
    history 4
     1998  export HISTIGNORE="pwd:ls:"
     1999  cd
     2000  history 5
     2001  history 4
    $ !-1
    history 4
     1998  export HISTIGNORE="pwd:ls:"
     1999  cd
     2000  history 5
     2001  history 4
    $ history 4
     1998  export HISTIGNORE="pwd:ls:"
     1999  cd
     2000  history 5
     2001  history 4
    

    命令替换

    !!:$!$都可以为当前命令获得上一条命令的参数
    !^获得上一条命令的第一项参数

    演示:

    $ ls go 
    go
    $ cat !$		#!!:$也可以实现
    cat go
    #!/home/s/ops/perl/bin/perl
    ......
    

    History命令语法

    # history [n]
    # history [-c]
    # history [-raw] histfiles
    

    参数:
    n :数字,要列出最近的 n 条命令列表
    -c :将目前的shell中的所有 history 内容全部消除
    -a :将目前新增的history 指令新增入 histfiles 中,若没有加 histfiles ,则预设写入 ~/.bash_history
    -r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中
    -w :将目前的 history 记忆内容写入 histfiles

    Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中。默认保存1000条,你也可以更改这个值。

    如果你键入 history, history会向你显示你所使用的前1000个历史命令,并且给它们编了号,你会看到一个用数字编号的列表快速从屏幕上卷过。你可能不需要查看1000个命令中的所有项目, 当然你也可以加入数字来列出最近的 n 笔命令列表。

    linux中history命令不仅仅让我们可以查询历史命令而已. 我们还可以利用相关的功能来帮我们执行命令。

    运行特定的历史命令

    history会列出bash保存的所有历史命令,并且给它们编了号,我们可以使用“叹号接编号”的方式运行特定的历史命令.
    语法说明:

    [test@linux]# [!number]  [!command] [!!]
    

    参数说明:
    number :第几个指令的意思;
    command :指令的开头几个字母
    ! :上一个指令的意思!

    参考文章:
    http://blog.sina.com.cn/s/blog_5caa94a00100gyls.html

  • 相关阅读:
    CF终于上紫了。。。
    CF567F/51nod2522 上下序列
    bzoj 前100题计划
    CF1110G Tree-Tac-Toe 博弈论、构造
    BZOJ4816 SDOI2017 数字表格 莫比乌斯反演
    UOJ400/LOJ2553 CTSC2018 暴力写挂 边分治、虚树
    Luogu4774 NOI2018 屠龙勇士 ExCRT
    CF1039D You Are Given a Tree 根号分治、二分、贪心
    CF1056E Check Transcription 字符串哈希
    Luogu4345 SHOI2015 超能粒子炮·改 Lucas、数位DP
  • 原文地址:https://www.cnblogs.com/cherishry/p/5886035.html
Copyright © 2011-2022 走看看