bash 的历史记录里保留了输入的命令行记录。以下是如何充分利用该记录和符号的使用教程。

history的基础

HISTSIZE 变量值设置保存在历史列表中的命令数。默认情况下,该值为 500。这些先前发出的命令(称为历史列表)存储在历史文件中。它的默认位置是~/.bash_history,这个位置存储在shell变量HISTFILE中。

本文中使用!命令将 bash 历史记录列表中的命令引入到输入中。此功能使使用者可以轻松地快速重复命令、替换文本、操作参数和修复先前命令中的拼写错误。

命令重复实例

以下是可以使用! 执行操作的一些示例。

重复匹配字符串开头的最后一个命令

!后跟与要运行的命令匹配的第一个字符(或者字符串)将重复该命令的实例:

[root@localhost ~]# ls /root/
anaconda-ks.cfg  centos2ol.sh  employee.json  list_users  new.txt  wsbkuplog.txt
[root@localhost ~]# !l
ls /root/
anaconda-ks.cfg  centos2ol.sh  employee.json  list_users  new.txt  wsbkuplog.txt
[root@localhost ~]# !ls
ls /root/
anaconda-ks.cfg  centos2ol.sh  employee.json  list_users  new.txt  wsbkuplog.txt

重复匹配字符串中任意位置的最后一个命令

!?格式与上述相同,但李世明令不必是命令的开头:

[root@localhost ~]# cat employee.json
[{"name": "John Brooks","id": "003"},{"name": "Randy Park","id": "053"},{"name": "Todd Gray","id": "009"}]
[root@localhost ~]# !?employee
cat employee.json
[{"name": "John Brooks","id": "003"},{"name": "Randy Park","id": "053"},{"name": "Todd Gray","id": "009"}]
[root@localhost ~]# !?json
cat employee.json
[{"name": "John Brooks","id": "003"},{"name": "Randy Park","id": "053"},{"name": "Todd Gray","id": "009"}]

重复历史记录中的第 n 个命令

重复 bash 历史记录中的第 n 个命令:

[root@localhost ~]# !772

重复最后一条命令

如果有一个我一直使用的命令,那就是!!。重复历史列表中的最后一个命令,其行为与 !-1 相同:

[root@localhost ~]# cat employee.json
[{"name": "John Brooks","id": "003"},{"name": "Randy Park","id": "053"},{"name": "Todd Gray","id": "009"}]
[root@localhost ~]# !!
cat employee.json
[{"name": "John Brooks","id": "003"},{"name": "Randy Park","id": "053"},{"name": "Todd Gray","id": "009"}]
[root@localhost ~]# !-1
cat employee.json
[{"name": "John Brooks","id": "003"},{"name": "Randy Park","id": "053"},{"name": "Todd Gray","id": "009"}]
[root@localhost ~]#

如果上一条命令忘记添加sudo来执行,可以结合!!来使用。还可以后面结合管道符使用。

$ yum update
Loaded plugins: priorities, update-motd, upgrade-helper
You need to be root to perform this command.
$ sudo !!
sudo yum update
Loaded plugins: priorities, update-motd, upgrade-helper
$ ls
dir  dir1  dir2  file  file1  file2  hello.txt
$ !! | grep file
ls | grep file
file
file1
file2

重复并替换字符串

我经常发输入较长的命令,然后用不同的参数重新输入。或者,我需要重新发出一个命令,因为我之前的命令中有一个错字。字符串替换让我无需重新输入整个长命令即可完成此操作。下面是语法:

!!:s^oldstring^newstring

命令中的^是分隔符,用后面的newstring字符串替换前面的oldstring字符串。

[root@localhost ~]# ll /etc/httpd/conf.d
total 16
-rw-r--r-- 1 root root 2926 Nov  4  2020 autoindex.conf
-rw-r--r-- 1 root root  400 Nov  4  2020 README
-rw-r--r-- 1 root root 1252 Nov  4  2020 userdir.conf
-rw-r--r-- 1 root root  764 Nov  4  2020 welcome.conf
[root@localhost ~]# !!:s^conf.d^conf
ll /etc/httpd/conf
total 28
-rw-r--r-- 1 root root 11899 Nov  4  2020 httpd.conf
-rw-r--r-- 1 root root 13064 Nov  4  2020 magic
[root@localhost ~]#

总结

这些是每个系统管理员都应该熟悉的命令。这些命令可以节省大量时间。

Linux 命令行小技巧《叹号的用处》相关推荐

  1. 现代CMake高级教程 - 第 0 章:命令行小技巧

    双笙子佯谬老师的[公开课]现代CMake高级教程课程笔记 为什么要学习现代 CMake? 现代 CMake 指的是 CMake 3.x. 古代 CMake 指的是 CMake 2.x. 通过互联网和学 ...

  2. python object单引号变成双引号_Python学习第163课--Linux命令行中的单引号和双引号...

    [每天几分钟,从零入门python编程的世界!] 我们都知道引号的作用就是为了引用,比如引用别人说的话,这句话就放在引号里面. 而Linux命令行中的single quote(单引号)和dubble ...

  3. mac 命令行小技巧--mas 替代appstore

    安装: brew install mas 1. 用命令 mas search 关键词 查询应用.比如在终端中执行 mas search xcode,大概 1 秒就显示了结果: 2. 用命令 mas l ...

  4. 分享一些Linux命令实用小技巧,欢迎评论区补充

    1.Tab自动补全:在Linux下,命令记得不清楚,你可以只打命令的前几个字符,然后敲击两次TAB键来补齐命令的全称,如果有重复的,那么Linux会把其列出来. 2.无所不能的man:所有的命令作用你 ...

  5. Linux学习记录-----《快乐的Linux命令行》.

    之前自学python的时候一直用的Win7,没想过,也有点怕使用Linux,可能人对未知的东西都有点恐惧,但是,但是,学了4个多月,退无可退了,不管是网站的部署,还是基于后端工作的需求,Linux的学 ...

  6. 快乐的linux命令行-使用命令

    整理自<快乐的linux命令行一书>. linux系统版本: Ubuntu 17.04 5.使用命令 这一章我们将介绍以下命令: type : 说明怎样解释一个命令名which : 显示会 ...

  7. linux命令行怎么播放,如何在在 Linux 命令行中观看彩虹猫

    导读 在本系列文章中,我们将会探索一些娱乐用途(甚至有时完全没用)的 Linux 命令行小玩具.所有我们介绍的小玩具都是开源的. 你甚至可以在终端里欣赏彩虹猫. 也许你会问,它们都很独特吗?是的.不过 ...

  8. linux运行彩虹猫,在 Linux 命令行中观看彩虹猫来稍事休息

    译者: Hansong Zhang 你并且可以在终端里欣赏彩虹猫. 今天是<Linux 命令行小玩具介绍>的第六天.在本系列文章中,我们将要探求一些娱乐用途(甚至有时完全没用)的 Linu ...

  9. 查看tom猫进程linux,分享|在 Linux 命令行中观看彩虹猫来稍事休息

    你甚至可以在终端里欣赏彩虹猫. 今天是<Linux 命令行小玩具介绍>的第六天.在本系列文章中,我们将会探索一些娱乐用途(甚至有时完全没用)的 Linux 命令行小玩具.所有我们介绍的小玩 ...

最新文章

  1. 深入理解SQL注入绕过WAF和过滤机制
  2. 【其他】配置JIRA
  3. Java中设计模式之装饰者模式-2
  4. 3.产品成本在完工和在制产品间分配
  5. C#——自定义泛型链表DEMO
  6. Tomcat源码解读系列(二)——Tomcat的核心组成和启动过程
  7. App设计灵感之十二组精美的外卖App设计案例
  8. 聊聊高并发(二)结合实例说说线程封闭和背后的设计思想
  9. mysql数据库整体备份和恢复_MySQL 数据库的备份和恢复
  10. svn 中 版本回退
  11. 【Java数据结构】赫夫曼树
  12. insert时调用本身字段_java中子类调用父类构造方法注意事项
  13. 演唱会网上订票系统(SSM,JSP,MYSQL)
  14. matlab画进化树分析图,系统发育(进化)树绘制小结
  15. 通过减小Bootstrapping Error Reduction来进行离线RL学习
  16. PT100热电阻简单介绍
  17. Android CPU架构之ARM和X86
  18. 【Web开发】Python实现Web图表功能(D-Tale入门)
  19. Cesium资料大全
  20. 计算机学业水平测试初中生操作题,初中学业水平考试信息技术考试操作题常见题型及作答方法...

热门文章

  1. 清晰易懂的Focal Loss原理解释
  2. 读博无门,就业碰壁,孤独当了7个月“民科”后,他的论文中了顶会
  3. 新型冠状病毒全球实时跟踪地图,多国研发疫苗,在中国或致8042例感染,爆发峰值预计2月中上旬 | 最新nCoV研究大汇总...
  4. 截断句子取前k个单词
  5. Matplotlib基础绘图功能 — 以折线图为例
  6. json.dumps()、json.dump()、json.loads()和json.dumps()的区别
  7. Debug的T命令在执行修改寄存器SS 的指令时,下一条指令也紧接着被执行。
  8. 资源|深度学习注意力机制TensorFlow 使用教程
  9. 竟有内鬼!北理工硕士生「复制粘贴」论文,旷视研究员最新声明
  10. 目标检测任务中的训练宝典 |实用技巧