当前位置:   article > 正文

玩转linux的history命令

玩转linux的history命令

经常使用Linux命令行时,有效使用历史记录可以极大提高效率。这篇文章将介绍history命令的常用技巧。

使用HISTTIMEFORMAT显示时间戳

通常,当您从命令行键入历史(history)时,它会显示命令序号和命令。出于审计目的,将时间戳与命令一起显示可能会更有益,如下所示。

  1. # export HISTTIMEFORMAT='%F %T '
  2. # history | more
  3. 1  2008-08-05 19:02:39 service network restart
  4. 2  2008-08-05 19:02:39 exit
  5. 3  2008-08-05 19:02:39 id
  6. 4  2008-08-05 19:02:39 cat /etc/redhat-release

使用Control+R搜索历史

这可能是您最经常使用的history特性。当您已经执行了一个非常长的命令时,您只需使用关键字搜索历史,而无需完全重新键入即可再次执行相同的命令。按下Control+R键并键入关键字。在下面的示例中,搜索了red,显示了历史中包含单词red的上一个命令“cat /etc/redhat-release”。

  1. (Control+R)
  2. (reverse-i-search)`red': cat /etc/redhat-release
  3. [Note: 按回车键会执行命令]
  4. # cat /etc/redhat-release
  5. Fedora release 9 (Sulphur)

假如你想修改命令.比如,下面这个例子,搜索httpd 显示的是 service httpd stop , 按左右箭头把stop 改为start再执行

(reverse-i-search)`httpd': service httpd stop

#service httpd start

使用4种不同方法快速重复上一个命令

有时候您可能会因为各种原因而重复执行先前的命令。以下是重复上次执行的命令的4种不同方法。

    使用向上箭头查看上一个命令,并按 enter 键执行它 

    从命令行中输入 !! 并按 enter 键

    从命令行中输入 !-1 并按 enter 键

    按下 Control+P 将显示上一个命令,按 enter 键执行。

执行历史中的特定命令

面的示例中,如果要重复执行第四个命令,您可以执行!4如下所示。

  1. # history | more
  2. 1  service network restart
  3. 2  exit
  4. 3  id
  5. 4  cat /etc/redhat-release
  6. # !4
  7. cat /etc/redhat-release
  8. Fedora release 9 (Sulphur)

执行以特定单词开头的先前命令

    键入!后跟您希望重新执行的命令的前几个字母。在以下示例中,输入!ps并按回车执行了以ps开头的先前命令“ps aux | grep yp”。

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

将以下两行添加到.bash_profile文件中,然后重新登录到bash shell中以查看更改。在此示例中,只有450个命令将存储在bash历史记录中。

  1. # vi ~/.bash_profile
  2. HISTSIZE=450
  3. HISTFILESIZE=450

使用HISTFILE更改历史文件名

默认情况下,历史记录保存在~/.bash_history文件中。将以下行添加到.bash_profile文件中,并重新登录到bash shell,以将历史命令保存在.commandline_warrior文件中而不是.bash_history文件中。

  1. # vi ~/.bash_profile
  2. HISTFILE=/root/.commandline_warrior

使用HISTCONTROL消除历史中连续重复的条目

在下面的示例中,pwd被输入了三次,当您执行history时,您可以看到所有3次连续的发生。要消除重复项,请将HISTCONTROL设置为ignoredups。

  1. # pwd
  2. # pwd
  3. # pwd
  4. # history | tail -4
  5. 44  pwd
  6. 45  pwd
  7. 46  pwd [三个pwd命令]
  8. 47  history | tail -4
  9. # export HISTCONTROL=ignoredups
  10. # pwd
  11. # pwd
  12. # pwd
  13. # history | tail -3
  14. 56  export HISTCONTROL=ignoredups
  15. 57  pwd [显示一个]
  16. 58  history | tail -4
  • 使用HISTCONTROL消除整个历史记录中的重复项

    上面的ignoredups仅在连续的命令重复时消除重复项。要消除整个历史记录中的重复项,请将HISTCONTROL设置为erasedups。

  1. # export HISTCONTROL=erasedups
  2. # pwd
  3. # service httpd stop
  4. # history | tail -3
  5. 38  pwd
  6. 39  service httpd stop
  7. 40  history | tail -3
  8. # ls -ltr
  9. # service httpd stop
  10. # history | tail -6
  11. 35  export HISTCONTROL=erasedups
  12. 36  pwd
  13. 37  history | tail -3
  14. 38  ls -ltr
  15. 39  service httpd stop
  16. [pwd后面的 service httpd stop 已经消除了]
  17. 40  history | tail -6
  • 使用HISTCONTROL强制历史记录不记住特定命令

    当您执行一个命令时,您可以通过将HISTCONTROL设置为ignorespace并在命令前加上空格来指示历史忽略该命令。要理解ignorespace的工作原理是好的,但作为最佳实践,请不要故意隐藏历史记录中的任何内容。

  1. # export HISTCONTROL=ignorespace
  2. # ls -ltr
  3. # pwd
  4. #  service httpd stop [命令开始有个空格]
  5. # history | tail -3
  6. 67  ls -ltr
  7. 68  pwd
  8. 69  history | tail -3
  • 使用-c选项清除所有先前的历史记录

    有时可能想清除所有以前的历史记录,但还希望保留历史记录功能。

# history -c
  • 从历史命令中替换单词

    当您搜索历史时,可能想要执行一个不同的命令,但想使用刚刚命令中的相同参数。

下面例子中vi命令后面的 !!:$ 得到了前面命令的参数

  1. # ls anaconda-ks.cfg
  2. anaconda-ks.cfg
  3. # vi !!:$
  4. vi anaconda-ks.cfg

下面例子中vi命令后面的 !^ 得到了前面命令的第一个参数

  1. # cp anaconda-ks.cfg anaconda-ks.cfg.bak
  2. anaconda-ks.cfg
  3. # vi  !^
  4. vi anaconda-ks.cfg
  • 替换特定命令的特定参数

    在下面的示例中,!cp:2搜索历史中以cp开头的上一个命令,并将cp的第二个参数替换为ls -l命令。

  1. # cp ~/longname.txt /really/long-filename.txt
  2. # ls -l !cp:2
  3. ls -l /really/long-filename.txt

在下面的示例中,!cp:2搜索历史中以cp开头的上一个命令,并将cp的最后一个参数替换为ls -l命令。

  1. # ls -l !cp:$
  2. ls -l /really/long-filename.txt
  • 使用HISTSIZE禁用历史记录的使用

    如果要完全禁用历史记录,不希望bash shell记住键入的命令,则将HISTSIZE设置为0。

  1. # export HISTSIZE=0
  2. # history
  3. # [所有的历史记录都消除了]
  • 使用HISTIGNORE忽略特定命令的历史记录

    有时可能不希望使用基本命令(如pwd和ls)在历史记录中堆积。使用HISTIGNORE指定要从历史记录中忽略的所有命令。请注意,将ls添加到HISTIGNORE中将只忽略ls而不是ls -l。因此必须提供要从历史记录中忽略的确切命令。

  1. # export HISTIGNORE="pwd:ls:ls -ltr:"
  2. # pwd
  3. # ls
  4. # ls -ltr
  5. # service httpd stop
  6. # history | tail -3
  7. 79  export HISTIGNORE="pwd:ls:ls -ltr:"
  8. 80  service httpd stop
  9. 81  history
  10. [ls and ls -ltr已经看不见了]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/316292
推荐阅读
相关标签
  

闽ICP备14008679号