如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率。本文将通过实例的方式向你介绍 history 命令的15个用法。

1. 使用 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

2. 使用 Ctrl+R 搜索历史

Ctrl+R 是我经常使用的一个快捷键。此快捷键让你对命令历史进行搜索,对于想要重复执行某个命令的时候非常有用。当找到命令后,通常再按回车键就可以执行该命令。如果想对找到的命令进行调整后再执行,则可以按一下左或右方向键。

# [Press Ctrl+R from the command prompt, which will display the reverse-i-search prompt]
(reverse-i-search)`red‘: cat /etc/redhat-release
[Note: Press enter when you see your command, which will execute the command from the history]
# cat /etc/redhat-release
Fedora release 9 (Sulphur)

3. 快速重复执行上一条命令

有 4 种方法可以重复执行上一条命令:
1. 使用上方向键,并回车执行。
2. 按 !! 并回车执行。
3. 输入 !-1 并回车执行。
4. 按 Ctrl+P 并回车执行。

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

在下面的例子中,如果你想重复执行第 4 条命令,那么可以执行 !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)

5. 通过指定关键字来执行以前的命令

在下面的例子,输入 !ps 并回车,将执行以 ps 打头的命令:

# !ps
ps aux | grep yp
root 16947 0.0 0.1 36516 1264 ? Sl 13:10 0:00 ypbind
root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp

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

将下面两行内容追加到 .bash_profile 文件并重新登录 bash shell,命令历史的记录数将变成 450 条:

# vi ~/.bash_profile
HISTSIZE=450
HISTFILESIZE=450

7. 使用 HISTFILE 更改历史文件名称

默认情况下,命令历史存储在 ~/.bash_history 文件中。

下载该文件可以去root目录下,用sz命令

#sz .bash_history

添加下列内容到 .bash_profile 文件并重新登录 bash shell,将使用 .commandline_warrior 来存储命令历史:

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

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

在下面的例子中,pwd 命令被连续执行了三次。执行 history 后你会看到三条重复的条目。要剔除这些重复的条目,你可以将 HISTCONTROL 设置为 ignoredups:

# pwd
# pwd
# pwd
# history | tail -4
44 pwd
45 pwd
46 pwd [Note that there are three pwd commands in history, after executing pwd 3 times as shown above]
47 history | tail -4
# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -3
56 export HISTCONTROL=ignoredups
57 pwd [Note that there is only one pwd command in the history, even after executing pwd 3 times as shown above]
58 history | tail -4

9. 使用 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
[Note that the previous service httpd stop after pwd got erased]
40 history | tail -6

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

将 HISTCONTROL 设置为 ignorespace,并在不想被记住的命令前面输入一个空格:

# export HISTCONTROL=ignorespace # ls -ltr # pwd # service httpd stop [Note that there is a
space at the beginning of service, to ignore this command from history] # history | tail -3 67 ls
-ltr 68 pwd 69 history | tail -3

11. 使用 -c 选项清除所有的命令历史

如果你想清除所有的命令历史,可以执行:

# history -c

12. 命令替换

在下面的例子里,!!:$ 将为当前的命令获得上一条命令的参数:

# ls anaconda-ks.cfg
anaconda-ks.cfg
# vi !!:$
vi anaconda-ks.cfg

下例中,!^ 从上一条命令获得第一项参数:

# cp anaconda-ks.cfg anaconda-ks.cfg.bak
anaconda-ks.cfg
# vi -5 !^
vi anaconda-ks.cfg

13. 为特定的命令替换指定的参数

在下面的例子,!cp:2 从命令历史中搜索以 cp 开头的命令,并获取它的第二项参数:

# cp ~/longname.txt /really/a/very/long/path/long-filename.txt
# ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt

下例里,!cp:$ 获取 cp 命令的最后一项参数:

# ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt

14. 使用 HISTSIZE 禁用 history

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

# export HISTSIZE=0
# history
# [Note that history did not display anything]

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

下面的例子,将忽略 pwd、ls、ls -ltr 等命令:

# 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
[Note that history did not record pwd, ls and ls -ltr]

linux下history(历史)命令用法详解相关推荐

  1. 在Linux中ipcs命令,Linux下ipcs指令的用法详解。

    ipcs是Linux下显示进程间通信设施状态的工具.可以显示消息队列.共享内存和信号量的信息.对于程序员可能更有用些,普通的系统管理员一般用不到此指令. (1)显示消息队列信息, 修改消息队列大小: ...

  2. Linux系统中curl命令用法详解

    在Linux系统中curl是一个利用URL规则在命令行下工作的文件传输工具,是一款强大的http命令行工具.它支持文件的上传和下载,是综合传输工具. curl 是常用的命令行工具,用来请求 Web 服 ...

  3. Linux 下的dd命令使用详解(摘录)

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

  4. (转载)Linux 下的dd命令使用详解

    本文为转载内容,原文Linux:https://www.cnblogs.com/jikexianfeng/p/6103500.html 一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的 ...

  5. Linux系统中dd命令用法详解

    命令介绍: Linux dd 命令用于读取.转换并输出数据. dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件.设备或标准输出. 参数介绍 if 代表输入文件.如果不指定 i ...

  6. Linux系统中ls命令用法详解

    linux系统中ls命令的用法 ls命令是linux下最常用的命令.ls命令就是list的缩写,缺省下ls用来打印出当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单. 通 ...

  7. linux抓包命令到文件,Linux下抓包命令tcpdump详解

    tcpdump是一个命令行实用程序,可用于捕获和检查进出系统的网络流量. 它是网络管理员中用于排除网络问题和安全测试的最常用工具. 尽管名称如此,使用tcpdump,您也可以捕获非TCP流量,例如UD ...

  8. Linux系统下GNU Wget 命令用法详解及其参数说明

    GNU Wget(常简称为Wget)是一个在网络上进行下载的简单而强大的自由软件,其本身也是GNU计划的一部分.它的名字是"World Wide Web"和"Get&qu ...

  9. Linux下的sed命令使用详解

    sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"pattern space,接着用sed命令 ...

  10. linux下mv命令参数详解,linux下的mv命令使用详解

    回家也有一些时候了,今天总于有空去看望一下在家的奶奶,所以就一早坐车回家了,早上也没有开过电脑,当然学习linux是不能忘了哦!呵呵----今天我看到了一些不错的资料,跟大家一起分享一下啊! 我们学习 ...

最新文章

  1. 番茄工作法:番茄时间管理方法与番茄工作法软件图解提高工作效率
  2. PM2 进程管理工具使用总结
  3. 要尝试着多跟外界交流
  4. Android 7.1 bootchart触发后导致不断重启
  5. linux 执行sh_linux下执行脚本 sh -x XXX.sh 调试中存在大量/r 的问题
  6. 如何安装vscode网页版_如何让用编辑器编写EverNote?
  7. 使用Jsoup完成网页爬虫
  8. java控制台输入输出
  9. php三次握手,深入理解TCP协议及其源代码——三次握手(示例代码)
  10. 分享 MSDN 下载工具(Word/PDF)
  11. 联想F360移动硬盘拆解
  12. 自动驾驶/机器人 SLAM算法 面经1
  13. JavaFX - 制作登录窗口及界面跳转
  14. 安卓逆向—霸哥磁力搜索apk过签名校验
  15. 雷电网络(一):厘清雷电网络的原理
  16. 国内各个界面库比较,告诉你怎么选择界面库?
  17. 最新CentOS7.5部署L版ceph 20190610及额外手册告警升级多活等
  18. Mapper 重命名问题
  19. 川崎机器人总线通信_川崎机器人技术干货之机器人Profinet从站设定说明
  20. 浅谈一下在阿里工作的前端性能优化的全链路经验

热门文章

  1. python label textvariable_在子窗口中为标签的textvariable赋值失败时,有关,给,Label,问题...
  2. QT:(3)在VS2015下配置qt
  3. Too Many Segments CF595D 贪心乱搞
  4. Path HDU6582
  5. webservice 暴漏接口_webService接口是什么?
  6. PCL common中常见的基础功能函数
  7. Hololens开发示例(不断补充)
  8. Udacity机器人软件工程师课程笔记(二十七) - 卷积神经网络(CNN)
  9. 【统计图】Echarts实现多条折线图渐变堆叠效果
  10. Blender赛车动画制作学习教程 Learn Race Car Animation with Blender