随着我在终端会话中花费越来越多的时间,感觉就像我一直在寻找使我的日常任务更加高效的新命令一样。 GNU history命令确实改变了我的工作日。

GNU history命令保留了从该终端会话运行的所有其他命令的列表,然后允许您重播或重用这些命令,而不必重新键入它们。 如果您是经验丰富的终端用户,您将了解history的力量,但是对于我们涉水者或新的sysadmin人士而言, history可立即提高生产力。

首先, history命令实际上不是命令。 您可以通过在系统上查找命令来亲自查看:

$ which history
which: no history in ( / usr / local / bin: / usr / bin: / bin: / usr / games: / usr / local / sbin )

您的计算机找不到history命令,因为它是Shell的内置关键字。 由于已将其写入您正在使用的shell中,因此历史记录的行为方式可能会有所不同,具体取决于您是否使用Bash ,tcsh, Zsh ,dash, fish ,ksh等。 本文基于历史记录的Bash实现,因此某些功能可能无法在其他Shell中使用。 但是,大多数基本功能是相同的。

历史101

要查看运行中的history ,请在Linux安装上打开一个终端程序,然后键入:

 $ history 

这是我得到的答复:

1  clear
2  ls -al
3  sudo dnf update -y
4  history

history命令显示了自启动会话以来输入的命令列表。 history的喜悦在于,现在您可以使用以下命令来重播其中的任何一个:

 $ !3 

提示符处的!3命令告诉外壳程序在历史记录列表的第3行重新运行该命令。 我还可以通过输入以下命令来访问该命令:

 $  ! sudo dnf 

这会提示history以搜索与您提供的模式匹配的最后一个命令(在本例中,该模式为dnf )并运行它。

搜索历史

您还可以使用history通过键入!!来重新运行最后输入的命令!! 。 通过将其与grep配对,可以搜索与文本模式匹配的命令,或者将其与tail一起使用,可以找到执行的最后几个命令。 例如:

$ history | grep dnf
3  sudo dnf update -y
5  history | grep dnf

$ history | tail -n 3
4  history
5  history | grep dnf
6  history | tail -n 3


获得此搜索功能的另一种方法是键入Ctrl-R来调用命令历史记录的递归搜索。 输入此内容后,提示将变为:

 (reverse-i-search)`': 

现在您可以开始键入命令,然后按ReturnEnter将显示匹配的命令供您执行。

更改执行的命令

您还可以使用history以不同的语法重新运行命令。 您可以使用history修改历史history 。 例如,如果我想更改以前的命令history | grep dnf history | grep dnfhistory | grep ssh history | grep ssh ,我可以在提示符下执行以下操作:

 $ ^dnf^ssh^ 

该命令将重新运行,但dnfssh取代。 换句话说,将运行以下命令:

 $  history | grep ssh 

删除历史

您可能有时需要删除历史记录文件中的部分或全部命令。 如果要删除特定命令,请输入history -d <line number> 。 要清除历史记录文件的全部内容,请执行history -c

历史记录文件存储在您也可以修改的文件中。 Bash Shell用户在其主目录中以.bash_history找到它。

下一步

您还可以对history进行其他操作:

  • 将历史记录缓冲区的大小设置为一定数量的命令
  • 记录历史中每一行的日期和时间
  • 防止某些命令记录在历史记录中

有关history命令以及您可以使用它进行的其他有趣操作的更多信息,请查看Seth Kenlon的有关分析历史的文章, 历史搜索修饰符和GNU Bash手册 。


本文最初于2018年6月发布,并已由编辑者进行了附加信息更新。

翻译自: https://opensource.com/article/18/6/history-command

如何在Linux中使用history命令相关推荐

  1. linux系统export,Linux入门进阶 - 如何在Linux中使用export命令

    原标题:Linux入门进阶 - 如何在Linux中使用export命令 来自: Linux迷 链接:https://www.linuxmi.com/linux-export.html Linux ex ...

  2. Linux中的history命令

    通过history命令可以查看我们在系统中输入过的命令 history命令的一些常用参数 -c  清空内存中命令历史 -d #  删除指定的历史命令,比如 history -d 100 ,就是删除第1 ...

  3. linux如何export文件夹,学习如何在Linux中使用export命令

    Linux export命令会标记哪些值需要传递给一组子进程.这是bash shell提供的一个简单但有用的特性.它允许管理员在不中断当前会话的情况下传递环境的配置参数.这就是为什么在终端会话重新启动 ...

  4. Linux入门进阶 - 如何在Linux中使用export命令

    Linux export命令会标记哪些值需要传递给一组子进程.这是bash shell提供的一个简单但有用的特性.它允许管理员在不中断当前会话的情况下传递环境的配置参数.这就是为什么在终端会话重新启动 ...

  5. 如何在Linux中使用ulimit命令

    The ulimit command in Linux is an extremely useful command for system admins who manage multi-user s ...

  6. linux xargs命令_如何在Linux中使用xargs命令?

    linux xargs命令 The xargs command allows us to pass the output of one command as the input for another ...

  7. linux chown命令 例子,如何在Linux中使用chown命令[基本示例]

    Linux中的chown命令允许您更改文件和目录的所有权. 下面是一张快速记忆的图片: 使用chown命令,可以更改文件或目录的用户和组所有权. Linux中的chown命令示例 以下是chown命令 ...

  8. linux可以修改日期格式吗,如何在Linux中使用date命令修改日期时间

    Linux中可使用date命令查看修改日期及时间,本例中以CentOS6为例说明. 1.直接输入"date"可查看当前系统日期及时间(普通用户即可执行此命令). 2.输入" ...

  9. 如何在Linux中使用netstat命令

    The term "netstat" stands for Network Statistics. In layman's terms, netstat command displ ...

最新文章

  1. 编程是一种对你的身体健康十分有害的工作
  2. JavaScript String支持的辅助format函数+【分页1】
  3. Spring4 MVC文件下载实例
  4. 使用input type=file 上传文件时需注意
  5. 配置MaxCompute任务消费监控告警,避免资源过度消费
  6. 2021年上半年直播电商行业洞察
  7. (AirWatch 系列之一)企业移动计算的集大成者--Airwatch简介
  8. php对象方法调用静态方法,php面向对象之静态方法使用
  9. pytorch维度变换
  10. 本地升级MySQL数据库版本为8.0.23,使用SQLyog(小海豚)无法进行连接
  11. Atom 备份神器 —— Sync Settings
  12. PDE12 wave equation: charactistics
  13. T3139 栈练习3 codevs
  14. 概率论与数理统计——Chapter0
  15. Java计算点的质心_java-矩阵的质心
  16. linux 脚本里切换用户密码,shell,切换用户,执行指定,脚本
  17. vue print 解决打印每页都有表头
  18. icpc西部区域赛_江西软件大学夺得第八届高校联赛西部大区总冠军
  19. nginx反向代理文件下载失败
  20. Raspberry Pi 支持开源脑机接口

热门文章

  1. 问题:使用jdk11 报错:java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present
  2. 浅析Condition与等待通知机制
  3. 事务的4大特性及实现原理
  4. “智慧感控”理念革新医疗管理
  5. 05Vue.js快速入门-Vue实例详解与生命周期
  6. Java多线程:线程池
  7. 文本框仅可接收decimal
  8. java 多态,接口,抽象类的认识
  9. Swift 的变化:从 2.2 到 3.0 会带来什么
  10. Struts2 第9part 通过实现ModelDriven来接收参数