赞
踩
经常使用Linux命令行时,有效使用历史记录可以极大提高效率。这篇文章将介绍history命令的常用技巧。
使用HISTTIMEFORMAT显示时间戳
通常,当您从命令行键入历史(history)时,它会显示命令序号和命令。出于审计目的,将时间戳与命令一起显示可能会更有益,如下所示。
- # export HISTTIMEFORMAT='%F %T '
- # history | more
- 1 2008-08-05 19:02:39 service network restart
- 2 2008-08-05 19:02:39 exit
- 3 2008-08-05 19:02:39 id
- 4 2008-08-05 19:02:39 cat /etc/redhat-release
使用Control+R搜索历史
这可能是您最经常使用的history特性。当您已经执行了一个非常长的命令时,您只需使用关键字搜索历史,而无需完全重新键入即可再次执行相同的命令。按下Control+R键并键入关键字。在下面的示例中,搜索了red,显示了历史中包含单词red的上一个命令“cat /etc/redhat-release”。
- (Control+R)
- (reverse-i-search)`red': cat /etc/redhat-release
- [Note: 按回车键会执行命令]
- # cat /etc/redhat-release
- 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如下所示。
- # history | more
- 1 service network restart
- 2 exit
- 3 id
- 4 cat /etc/redhat-release
-
- # !4
- cat /etc/redhat-release
- Fedora release 9 (Sulphur)
执行以特定单词开头的先前命令
键入!后跟您希望重新执行的命令的前几个字母。在以下示例中,输入!ps并按回车执行了以ps开头的先前命令“ps aux | grep yp”。
使用HISTSIZE控制历史记录中的总行数
将以下两行添加到.bash_profile文件中,然后重新登录到bash shell中以查看更改。在此示例中,只有450个命令将存储在bash历史记录中。
- # vi ~/.bash_profile
- HISTSIZE=450
- HISTFILESIZE=450
使用HISTFILE更改历史文件名
默认情况下,历史记录保存在~/.bash_history文件中。将以下行添加到.bash_profile文件中,并重新登录到bash shell,以将历史命令保存在.commandline_warrior文件中而不是.bash_history文件中。
- # vi ~/.bash_profile
- HISTFILE=/root/.commandline_warrior
使用HISTCONTROL消除历史中连续重复的条目
在下面的示例中,pwd被输入了三次,当您执行history时,您可以看到所有3次连续的发生。要消除重复项,请将HISTCONTROL设置为ignoredups。
- # pwd
- # pwd
- # pwd
- # history | tail -4
- 44 pwd
- 45 pwd
- 46 pwd [三个pwd命令]
- 47 history | tail -4
-
- # export HISTCONTROL=ignoredups
- # pwd
- # pwd
- # pwd
- # history | tail -3
- 56 export HISTCONTROL=ignoredups
- 57 pwd [显示一个]
- 58 history | tail -4
使用HISTCONTROL消除整个历史记录中的重复项
上面的ignoredups仅在连续的命令重复时消除重复项。要消除整个历史记录中的重复项,请将HISTCONTROL设置为erasedups。
- # export HISTCONTROL=erasedups
- # pwd
- # service httpd stop
- # history | tail -3
- 38 pwd
- 39 service httpd stop
- 40 history | tail -3
-
- # ls -ltr
- # service httpd stop
- # history | tail -6
- 35 export HISTCONTROL=erasedups
- 36 pwd
- 37 history | tail -3
- 38 ls -ltr
- 39 service httpd stop
- [pwd后面的 service httpd stop 已经消除了]
- 40 history | tail -6
使用HISTCONTROL强制历史记录不记住特定命令
当您执行一个命令时,您可以通过将HISTCONTROL设置为ignorespace并在命令前加上空格来指示历史忽略该命令。要理解ignorespace的工作原理是好的,但作为最佳实践,请不要故意隐藏历史记录中的任何内容。
- # export HISTCONTROL=ignorespace
- # ls -ltr
- # pwd
- # service httpd stop [命令开始有个空格]
- # history | tail -3
- 67 ls -ltr
- 68 pwd
- 69 history | tail -3
使用-c选项清除所有先前的历史记录
有时可能想清除所有以前的历史记录,但还希望保留历史记录功能。
# history -c
从历史命令中替换单词
当您搜索历史时,可能想要执行一个不同的命令,但想使用刚刚命令中的相同参数。
下面例子中vi命令后面的 !!:$ 得到了前面命令的参数
- # ls anaconda-ks.cfg
- anaconda-ks.cfg
- # vi !!:$
- vi anaconda-ks.cfg
下面例子中vi命令后面的 !^ 得到了前面命令的第一个参数
- # cp anaconda-ks.cfg anaconda-ks.cfg.bak
- anaconda-ks.cfg
- # vi !^
- vi anaconda-ks.cfg
替换特定命令的特定参数
在下面的示例中,!cp:2搜索历史中以cp开头的上一个命令,并将cp的第二个参数替换为ls -l命令。
- # cp ~/longname.txt /really/long-filename.txt
- # ls -l !cp:2
- ls -l /really/long-filename.txt
-
在下面的示例中,!cp:2搜索历史中以cp开头的上一个命令,并将cp的最后一个参数替换为ls -l命令。
- # ls -l !cp:$
- ls -l /really/long-filename.txt
使用HISTSIZE禁用历史记录的使用
如果要完全禁用历史记录,不希望bash shell记住键入的命令,则将HISTSIZE设置为0。
- # export HISTSIZE=0
- # history
- # [所有的历史记录都消除了]
使用HISTIGNORE忽略特定命令的历史记录
有时可能不希望使用基本命令(如pwd和ls)在历史记录中堆积。使用HISTIGNORE指定要从历史记录中忽略的所有命令。请注意,将ls添加到HISTIGNORE中将只忽略ls而不是ls -l。因此必须提供要从历史记录中忽略的确切命令。
- # export HISTIGNORE="pwd:ls:ls -ltr:"
- # pwd
- # ls
- # ls -ltr
- # service httpd stop
-
- # history | tail -3
- 79 export HISTIGNORE="pwd:ls:ls -ltr:"
- 80 service httpd stop
- 81 history
- [ls and ls -ltr已经看不见了]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。