Redian新闻
>
Linux 命令行小技巧 – !叹号的用处

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 ~]# 


总    结


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

END

官方站点:www.linuxprobe.com

Linux命令大全:www.linuxcool.com

刘遄老师QQ:5604241

Linux技术交流群:2261840

(新群,火热加群中……)

想要学习Linux系统的读者可以点击"阅读原文"按钮来了解书籍《Linux就该这么学》,同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
上一个说“丼”不读jǐng的人,已经被我骂哭了HydraPaper:一个支持多显示器的 Linux 壁纸管理器 | Linux 中国使用 apt 进行 Linux 包管理 | Linux 中国我学语文教语文的一生(41)分享 8 篇使用 Linux 命令行的技巧 | Linux 中国最适合程序员的 10 款 Linux 发行版 | Linux 中国我如何在 Linux 上扫描家庭照片 | Linux 中国敦煌与丝绸之路的今昔使用 LibreOffice 键盘快捷键的小技巧 | Linux 中国在 Ubuntu Linux 如何安装 H.264 解码器 | Linux 中国Linux 内核 5.18 版本正式发布,新增显卡驱动以及硬件支持 | Linux 中国你的 Linux 启动时有几只小企鹅? | Linux 中国龙卷风健康快递 160用 XML 和 Java 构建树莓派打印机的用户界面 | Linux 中国Plex 桌面播放器现已支持 Linux | Linux 中国System76 与惠普合作为开发者提供功能强大的 Linux 笔记本电脑 | Linux 中国上海封城的利和弊如何在 Linux 和 Windows 电脑之间共享文件 | Linux 中国微软还有另一个 Linux 发行版,而且是基于 Debian 的 | Linux 中国在虚拟机中运行 Linux 的十大优点 | Linux 中国好消息!Docker Desktop 现已支持 Linux | Linux 中国实测 Linux Mint 升级工具 | Linux 中国英伟达在提升 Linux 上的 GPU 使用体验上迈出了一大步 | Linux 中国在 Linux 上使用 sudo 命令的 5 个理由 | Linux 中国桃花雪用 Gwenview 在 Linux 上裁剪和调整照片大小 | Linux 中国如何在 Fedora Linux 中安装多媒体编码器 | Linux 中国CentOS 的继承者 AlmaLinux 9 发布 | Linux 中国从命令行远程配置 Xfce4 工作区 | Linux 中国Fudgie?令人惊叹的 Budgie 桌面即将登陆 Fedora Linux | Linux 中国Archinstall 新的菜单系统让安装 Arch Linux 更容易了 | Linux 中国如何在 Linux 桌面中启用 “激活 Linux” 水印通知 | Linux 中国使用 watch 和 tail 命令监视 Linux 上的活动 | Linux 中国Fedora Linux 36 发布 | Linux 中国使用 dnf 进行 Linux 包管理 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。