Linux 命令行小技巧《叹号的用处》
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 命令行小技巧《叹号的用处》相关推荐
- 现代CMake高级教程 - 第 0 章:命令行小技巧
双笙子佯谬老师的[公开课]现代CMake高级教程课程笔记 为什么要学习现代 CMake? 现代 CMake 指的是 CMake 3.x. 古代 CMake 指的是 CMake 2.x. 通过互联网和学 ...
- python object单引号变成双引号_Python学习第163课--Linux命令行中的单引号和双引号...
[每天几分钟,从零入门python编程的世界!] 我们都知道引号的作用就是为了引用,比如引用别人说的话,这句话就放在引号里面. 而Linux命令行中的single quote(单引号)和dubble ...
- mac 命令行小技巧--mas 替代appstore
安装: brew install mas 1. 用命令 mas search 关键词 查询应用.比如在终端中执行 mas search xcode,大概 1 秒就显示了结果: 2. 用命令 mas l ...
- 分享一些Linux命令实用小技巧,欢迎评论区补充
1.Tab自动补全:在Linux下,命令记得不清楚,你可以只打命令的前几个字符,然后敲击两次TAB键来补齐命令的全称,如果有重复的,那么Linux会把其列出来. 2.无所不能的man:所有的命令作用你 ...
- Linux学习记录-----《快乐的Linux命令行》.
之前自学python的时候一直用的Win7,没想过,也有点怕使用Linux,可能人对未知的东西都有点恐惧,但是,但是,学了4个多月,退无可退了,不管是网站的部署,还是基于后端工作的需求,Linux的学 ...
- 快乐的linux命令行-使用命令
整理自<快乐的linux命令行一书>. linux系统版本: Ubuntu 17.04 5.使用命令 这一章我们将介绍以下命令: type : 说明怎样解释一个命令名which : 显示会 ...
- linux命令行怎么播放,如何在在 Linux 命令行中观看彩虹猫
导读 在本系列文章中,我们将会探索一些娱乐用途(甚至有时完全没用)的 Linux 命令行小玩具.所有我们介绍的小玩具都是开源的. 你甚至可以在终端里欣赏彩虹猫. 也许你会问,它们都很独特吗?是的.不过 ...
- linux运行彩虹猫,在 Linux 命令行中观看彩虹猫来稍事休息
译者: Hansong Zhang 你并且可以在终端里欣赏彩虹猫. 今天是<Linux 命令行小玩具介绍>的第六天.在本系列文章中,我们将要探求一些娱乐用途(甚至有时完全没用)的 Linu ...
- 查看tom猫进程linux,分享|在 Linux 命令行中观看彩虹猫来稍事休息
你甚至可以在终端里欣赏彩虹猫. 今天是<Linux 命令行小玩具介绍>的第六天.在本系列文章中,我们将会探索一些娱乐用途(甚至有时完全没用)的 Linux 命令行小玩具.所有我们介绍的小玩 ...
最新文章
- 深入理解SQL注入绕过WAF和过滤机制
- 【其他】配置JIRA
- Java中设计模式之装饰者模式-2
- 3.产品成本在完工和在制产品间分配
- C#——自定义泛型链表DEMO
- Tomcat源码解读系列(二)——Tomcat的核心组成和启动过程
- App设计灵感之十二组精美的外卖App设计案例
- 聊聊高并发(二)结合实例说说线程封闭和背后的设计思想
- mysql数据库整体备份和恢复_MySQL 数据库的备份和恢复
- svn 中 版本回退
- 【Java数据结构】赫夫曼树
- insert时调用本身字段_java中子类调用父类构造方法注意事项
- 演唱会网上订票系统(SSM,JSP,MYSQL)
- matlab画进化树分析图,系统发育(进化)树绘制小结
- 通过减小Bootstrapping Error Reduction来进行离线RL学习
- PT100热电阻简单介绍
- Android CPU架构之ARM和X86
- 【Web开发】Python实现Web图表功能(D-Tale入门)
- Cesium资料大全
- 计算机学业水平测试初中生操作题,初中学业水平考试信息技术考试操作题常见题型及作答方法...
热门文章
- 清晰易懂的Focal Loss原理解释
- 读博无门,就业碰壁,孤独当了7个月“民科”后,他的论文中了顶会
- 新型冠状病毒全球实时跟踪地图,多国研发疫苗,在中国或致8042例感染,爆发峰值预计2月中上旬 | 最新nCoV研究大汇总...
- 截断句子取前k个单词
- Matplotlib基础绘图功能 — 以折线图为例
- json.dumps()、json.dump()、json.loads()和json.dumps()的区别
- Debug的T命令在执行修改寄存器SS 的指令时,下一条指令也紧接着被执行。
- 资源|深度学习注意力机制TensorFlow 使用教程
- 竟有内鬼!北理工硕士生「复制粘贴」论文,旷视研究员最新声明
- 目标检测任务中的训练宝典 |实用技巧