玩转linux的history命令

经常使用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已经看不见了]

相关推荐

  1. linuxhistory命令

    2024-03-26 15:38:01       38 阅读
  2. linuxhistory命令显示时间例子

    2024-03-26 15:38:01       56 阅读
  3. Linuxhistory命令详解

    2024-03-26 15:38:01       53 阅读
  4. Linux命令学习(一)history

    2024-03-26 15:38:01       33 阅读
  5. 45个常用Linux 命令,让你轻松Linux

    2024-03-26 15:38:01       32 阅读
  6. history命令

    2024-03-26 15:38:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 15:38:01       75 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 15:38:01       80 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 15:38:01       64 阅读
  4. Python语言-面向对象

    2024-03-26 15:38:01       75 阅读

热门阅读

  1. nodejs爬虫,把本地excel数据自动上传爬取数据

    2024-03-26 15:38:01       32 阅读
  2. 学习vue3 第十一章(v-model)

    2024-03-26 15:38:01       34 阅读
  3. 数据集预处理

    2024-03-26 15:38:01       32 阅读
  4. yoloV3的目标检测_3.11

    2024-03-26 15:38:01       28 阅读
  5. Python自然语言处理:NLTK入门指南

    2024-03-26 15:38:01       36 阅读
  6. 5.84 BCC工具之tcpretrans.py解读

    2024-03-26 15:38:01       32 阅读
  7. Django模型

    2024-03-26 15:38:01       39 阅读
  8. 前端:利用生成器和迭代器实现分离逻辑

    2024-03-26 15:38:01       39 阅读
  9. vue语法 v-if和v-show详解

    2024-03-26 15:38:01       29 阅读
  10. gnuplot画图学习(待完善)

    2024-03-26 15:38:01       32 阅读