Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >linux中"!"的惊叹用法,你知道吗?

linux中"!"的惊叹用法,你知道吗?

作者头像
编程珠玑
发布于 2019-09-02 14:40:39
发布于 2019-09-02 14:40:39
66700
代码可运行
举报
文章被收录于专栏:编程珠玑编程珠玑
运行总次数:0
代码可运行

前言

实际上,不起眼的“!”在linux中有着很多让你惊叹的妙用。本文就来细数那些“!”的神奇用法。

执行上一条命令

例如,在执行完上面一条命令后,可以使用下面的方式再次执行上一条命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ whereis bash  #执行命令
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz

$ !!            #再次执行上一条命令
whereis bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz

!!代表了上一条执行的命令。可以看到,当输入两个感叹号时,它显示上条命令的同时会执行上一条命令。当然了,通常我们还会想到使用“UP”键来完成这个事情。但是如果是基于上条命令扩充,!!就来得更加方便了。 比如,你想查看某个文件,但是忘了输入more:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$  /opt/user/test.txt  #忘记输入more
$  more !!      #这样是不是快多了?

使用!!是不是方便多了?

使用上个命令第一个或最后一个的参数执行命令

使用上条命令最后一个参数

比如,你在使用ls列出目录内容时,没有带任何参数,但是想再次执行,带上-al参数,又不想输入长长的参数,可以使用下面的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ls /proc/1/task/1/net/tcp
/proc/1/task/1/net/tc
$ ls -al !$
ls -al /proc/1/task/1/net/tcp
-r--r--r-- 1 root root 0 1222 17:30 /proc/1/task/1/net/tcp

这里的!$代表了上一条命令的最后一个参数。

使用上条命令第一个参数

而使用上条命令的第一个参数只需要使用!^,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ls -al !^

去掉最后一个参数执行上一个命令

如果想执行上条命令,但不想带上最后一个参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ls -al dir  #假设dir是一个很长的字符串
$ !:-
ls -al

什么场景下可能会用呢?比如你上一条命令最后一个参数是一个长长的字符串,而你恰好不想不用它,并且退格键删除又慢的时候,可以使用上面的方法。

使用上条命令的所有参数

前面说了使用上条命令的最后一个参数,那如果不是最后一个参数,该如何使用呢?很简单,使用!*即可。例如我们在输入find命令输错了,想要纠正的时候:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ fin -name "test.zip"  #这里find输错了。
$ find !*
find ./ -name "test.zip"
./workspaces/shell/find/test.zip
./workspaces/shell/test.zip

使用上条命令指定的参数

有的读者可能会问了,如果我只想用其中某个参数呢?按照![命令名]:[参数号]的规则即可。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cp -rf dira dirb/   #将dira拷贝到dirb
$ ls -l !cp:2        #查看dira的内容
ls -l dira
total 0
-rw-rw-r-- 1 hyb hyb 0 1222 17:45 testfile

当上条命令的参数很长,而你需要取用中间的某个参数时,效果就比较明显了。

执行history中的命令

我们都知道可以通过history命令可以查看之前执行过的命令,但是如何再次执行history中的命令呢?我们可以通过“UP”键可以查看,但是历史命令很长的时候,并不是很方便,这个时候“!”便派上了用场:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ history
(这里省略更多内容)
2043  touch ./dira/testfile
 2044  cp -rf dira dirb/
 2045  ls -al dira
 2046  ls -l dira
 2047  ls -al dira
 2048  ls -l dira
 2049  ls -al dira
 2050  ls -l dira
 2051  history 

我们可以看到,history命令出来可以看到之前执行过的命令,也会看到它前面带了一个数值。如果我们想执行前面的cp -rf dira dirb/命令,实际上只要用下面的方式即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ !2044   #2044是执行的第n条命令
cp -rf dira dirb/

即通过![历史命令数值]的方式执行历史命令。 当然了,如果我们想执行倒数第二条命令,也是有方法的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ !-2   #感叹号后面跟着一个负数,负几代表倒数第几条

按照关键字执行历史命令

!可以根据关键字执行命令。

执行上一条以关键字开头的命令

例如,执行上一条find命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ !find    #执行上条以find开头的命令
执行上一条包含关键字的命令

再例如,执行上一条包含name的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ find ./ -name "test"
./test
./find/test
$ !?name?
find ./ -name "test"
./test
./find/test

替换上条命令的参数

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ find ./ -name "old*" -a -name "*.zip"

如果我们需要将这条命令中的old更换为new:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ !!:gs/old/new

逻辑非的作用

这个是它最为人所熟悉的作用,例如删除除了cfg结尾以外的所有文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm !(*.cfg)  #删除需谨慎

这里就不再详述。

总结

惊叹号"!"的作用确实有时候让人惊叹。前面可能只是提到!结合其他字符代表某个特定的含义的某种使用,实际上,我们可以组合或者扩展发现更多的妙用。这里不再展开。你还有什么好的发现?欢迎留言!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程珠玑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux入门篇 —— 超实用 Linux 常用命令
- 选项: - -w: 统计字数 一个字被定义为由空白,跳格(制表符),换行以这些为分割字符串 - -l: 行数 - -c: 字节数 - -m: 字符数 -m -c不能一起使用 - -L: 打印最长行的长度
ruochen
2021/02/01
8620
Linux入门篇 —— 超实用 Linux 常用命令
Linux之基本指令操作
上面所显示的比如root和110之间的斜杠我们称之为路径分隔符,两个路径分隔符之间的一定是目录,或者称之为文件夹(Linux下习惯称文件夹为目录,以后就都将文件夹称作目录了)。
用户10923276
2024/03/28
1130
Linux之基本指令操作
有了这 27 个Linux 技巧,让你工作效率翻倍!
今天给大家分享 27 个实用的 Linux 技巧,对于一些经常在 Linux 操作系统下玩的重度爱好者,可以有效的提高你的工作效率。
杰哥的IT之旅
2021/07/13
7260
有了这 27 个Linux 技巧,让你工作效率翻倍!
这些linux技巧大大提高你的工作效率
linux中的一些小技巧可以大大提高你的工作效率,本文就细数那些提高效率或者简单却有效的linux技巧。
帅地
2019/06/06
6300
【Linux】常见的基本指令详解
对于不了解 Linux 的同学来说,可能根本不懂 Linux 是什么,接下来我会简单介绍一下 Linux。大家可能对操作系统不太了解,那么我们常用的电脑中的 windows 系统大家应该听过,windows 系统和 Linux 系统都是一款操作系统。
YoungMLet
2024/03/01
9440
【Linux】常见的基本指令详解
ls命令常见实用用法
ls(list directory contents,列出目录内容)命令是linux最常用的命令之一,通过man ls可以看到,ls的参数很多,但是本文不准备列出或者介绍这些参数的具体含义或用法,而是挑选一些实际应用中最常见的用法。
编程珠玑
2019/09/03
9670
Linux命令复习和练习
============================================================================= Linux命令复习和练习: ----------------------------------------------------------------------------- linux命令格式: command [-options] [parameter1] [parameter2] ... 命令 选项 参数 例如: ls
黑泽君
2018/10/12
1.6K0
linux(十一)之初始化文件
前面写了很多linux的知识,其实很多都是命令的,所以要去多多的练习才能学的更好,加油为了好工作。 要么现在懒惰,未来讨饭。要么现在努力,未来惬意。 一、初始化文件概述  1.1、概述   系统初始化文件是给系统做配置信息的,最重要的系统信息是环境变量的配置。   初始化文件分为系统级别和用户级别在shell为bash时:   1)系统级别的初始化文件:           针对所有用户都有效果的。                 /etc/profile        2)用户级别的初始化文件:    
用户1195962
2018/01/18
1.3K0
linux(十一)之初始化文件
Linux大人养成计划1---基础命令总结
刷了一波视频,现在把Linux的一些常用基本命令总结了下。学会这些,Linux的基本操作就会了。
帅地
2018/08/30
6360
Linux大人养成计划1---基础命令总结
命令执行一些特殊作用的字符 | Linux Bypass
简单来说,叹号可以单独成一个文件夹,也可以作为文件夹的末位字符,说白了,叹号后面不能加东西,叹号加字符代表着特殊含义
h0cksr
2023/05/16
1.5K0
命令执行一些特殊作用的字符 | Linux Bypass
linux 常用命令大全及其详解_linux命令分类
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
9200
当HR问你Linux中如何排查后门你怎么答?从红队视角带你学习
“ 不知攻,焉知防。很多年前大家就会讨论先学攻击,还是先学防守,这些年下来,我还是觉得应该先学攻击,防守的学习都是从攻击经验中学习的,防守思路也是从攻击思路中去学习,所以,想学会如何排查后面,就需要先学习怎么安装后门吧”
网e渗透安全部
2024/06/27
2460
当HR问你Linux中如何排查后门你怎么答?从红队视角带你学习
高效 Bash 使用技巧
我们在日常使用中,难免会使用到一些历史命令或者有时需要对历史命令进行更正,那么如何更加高效的来完成这些操作呢?
Jintao Zhang
2018/08/27
5690
Linux Shell(二)——Shell的环境配置
1 命令别名 1.1 设置命令的别名 将rm设为rm -i,这样只要输入rm就能拥有rm -i的功能,在删除的时候就会有提示: alias rm='rm -i' 1.2 取消命令的别名 unalias即可删除已创建的别名: unalias rm 1.3 查看所有别名 只输入一个alias即可查看所有已经设置的别名: [root@iZ28st035lsZ ~]# alias alias cp='cp -i' alias fdisk='fdisk -H 224 -S 56' alias l.='ls -d .
大闲人柴毛毛
2018/03/09
12.4K0
Linux 命令实战(五)
locate命令:locate是Linux系统提供的一种快速检索全局文件的系统命令,它并不是真的去检索所以系统目录,而是检索一个数据库文件locatedb(Ubuntu系统位置/var/cache/locate/locatedb),该数据库文件包含了系统所有文件的路径索引信息,所以查找速度很快
小土豆Yuki
2023/09/02
2640
Linux 命令实战(五)
大大提高你的工作效率的Linux 技巧
如果此时使用ctrl + u快捷键,那么该条命令都会被清除,而不需要长按backspace键。
用户7657330
2022/05/10
4820
Linux 常用命令一览
本篇博文讲述系统内核、Bash解释器的关系与作用,如何正确的执行Linux命令以及常见排错方法。
小小工匠
2021/08/16
6650
笨办法学 Linux 4~7
在 Linux 中,一切都是文件。但是什么是文件?现在完全可以说,它是一个包含一些信息的对象。它通常定义如下:
ApacheCN_飞龙
2022/12/01
7500
【Linux】基础指令
在当今的计算机世界中,Linux操作系统以其强大的稳定性和开源特性,赢得了广泛的关注和应用。对于初学者来说,掌握Linux的基础指令是打开这一神秘世界的钥匙。本篇文章,作者将带领大家入门Linux并介绍Linux的一些基础指令,让你在命令行中畅游,感受Linux带来的无限可能。
ephemerals__
2024/11/13
1590
【Linux】基础指令
第003课 linux入门命令详解
前面我们讲解了在Ubuntu图形界面下怎么新建目录、新建文件等等。 来提个问题:除了这个图形界面,Ubuntu下面有没有其它的方式也可以创建目录、创建文件呢? 我们回到比较熟悉的Windows界面,或许大家听说过dos命令行工具,没有听说过也没关系,同时按下“Windows键”和“R键”,输入cmd,再点击“确定”,就出现了命令工具。
韦东山
2020/09/30
2.4K0
第003课 linux入门命令详解
相关推荐
Linux入门篇 —— 超实用 Linux 常用命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验