0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

你会使用Linux 中的“!”惊叹用法吗

5RJg_mcuworld 来源:未知 2019-01-29 09:08 次阅读

前言

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

执行上一条命令

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

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

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

比如,你想查看某个文件,但是忘了输入more:

$/opt/user/test.txt#忘记输入more$more!!#这样是不是快多了?

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

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

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

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

$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--1rootroot012月2217:30/proc/1/task/1/net/tcp

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

使用上条命令第一个参数

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

$ls-al!^

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

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

$ls-aldir#假设dir是一个很长的字符串$!:-ls-al

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

使用上条命令的所有参数

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

$fin-name"test.zip"#这里find输错了。$find!*find./-name"test.zip"./workspaces/shell/find/test.zip./workspaces/shell/test.zip

使用上条命令指定的参数

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

$cp-rfdiradirb/#将dira拷贝到dirb$ls-l!cp:2#查看dira的内容ls-ldiratotal0-rw-rw-r--1hybhyb012月2217:45testfile

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

执行history中的命令

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

$history(这里省略更多内容)2043touch./dira/testfile2044cp-rfdiradirb/2045ls-aldira2046ls-ldira2047ls-aldira2048ls-ldira2049ls-aldira2050ls-ldira2051history

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

$!2044#2044是执行的第n条命令cp-rfdiradirb/

即通过![历史命令数值]的方式执行历史命令。

当然了,如果我们想执行倒数第二条命令,也是有方法的:

$!-2#感叹号后面跟着一个负数,负几代表倒数第几条

按照关键字执行历史命令

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

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

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

$!find#执行上条以find开头的命令

执行上一条包含关键字的命令

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

$find./-name"test"./test./find/test$!?name?find./-name"test"./test./find/test

替换上条命令的参数

例如:

$find./-name"old*"-a-name"*.zip"

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

$!!:gs/old/new

逻辑非的作用

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

rm!(*.cfg)#删除需谨慎

这里就不再详述。

总结

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11296

    浏览量

    209367
  • 程序
    +关注

    关注

    117

    文章

    3785

    浏览量

    81010

原文标题:Linux 中“!”的惊叹用法,你知道吗?

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux命令“!”操作符的用法

    Linux的'!'符号或操作符可以用作逻辑否定运算符,也可以用于在历史记录获取命令并进行修改或运行以前执行过的命令。
    发表于 07-05 10:07 1449次阅读

    Linuxsed命令用法

    这篇文章为初学者提供了关于 Linux sed 命令的全面指南,涵盖了其历史、用途以及一些实用的技巧和窍门。通过掌握 sed,您可以高效处理文本处理任务,这对于任何使用 Linux 的人来说都是一项宝贵的技能。
    发表于 07-21 10:38 356次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>中</b>sed命令<b class='flag-5'>用法</b>

    linuxcomm命令用法

    linux系统comm命令用法详解 linux系统下的comm命令是一个非常实用的文件对比命令。 comm命令功能:选择或拒绝两个已排序的文件的公共的行。 comm命令语法:comm
    发表于 07-04 08:22

    会使Linux编程const?

    另外const 的一些强大的功能在于它在函数声明的应用。在一个函数声明,const 可以修饰函数的返回值,或某个参数;对于成员函数,还可以修饰是整个函数。有如下几种情况,以下会逐渐的说明用法
    发表于 05-06 16:34 560次阅读
    <b class='flag-5'>你</b><b class='flag-5'>会使</b>用<b class='flag-5'>Linux</b>编程const?

    基于STM32的多种printf用法 都知道吗?

    基于STM32的多种printf用法都知道吗?
    的头像 发表于 02-29 17:02 4477次阅读

    干货:Linux内核中等待队列的四个用法

    Linux内核里的等待队列机制在做驱动开发时用的非常多,多用来实现阻塞式访问,下面简单总结了等待队列的四种用法,希望对读者有所帮助。
    的头像 发表于 06-20 09:59 2847次阅读

    Linuxfind命令的7种用法

    如果Linux 服务器上有一个名为 logs 的目录,如何删除该目录下最后一次访问时间超过一年的日志文件呢?   这种情况很常见,但令人惊讶的是,并非每个开发人员都能在面试清楚地写出这个命令。
    发表于 03-31 09:27 536次阅读

    Linux系统维护命令的用法

    Linux有很多命令,每个命令基本可以用一篇文章介绍,本文仅简单总结一些常用系统维护命令的用法
    的头像 发表于 04-17 14:57 1044次阅读
    <b class='flag-5'>Linux</b>系统维护命令的<b class='flag-5'>用法</b>

    PipelinethrowIt的用法

    字如其名,来看下PipelinethrowIt的用法,是怎么个丢弃方式。
    的头像 发表于 10-21 16:24 557次阅读
    Pipeline<b class='flag-5'>中</b>throwIt的<b class='flag-5'>用法</b>

    linuxvi命令的用法

    Linux,vi(或vim)是一种常用的文本编辑器。以下是一些基本的vi命令用法: 打开文件:vi filename 进入编辑模式:在打开文件后,按下 i 键进入编辑模式,这样才能开始编辑文本
    的头像 发表于 11-08 11:30 848次阅读

    linuxfind用法详解

    Linux, find 命令是一个非常强大的工具,用于在指定目录下查找文件和目录。下面是 find 命令的用法和详细解释: 语法: find [路径] [表达式] 路径:要查找的目录路径。可以
    的头像 发表于 11-08 14:29 713次阅读

    linuxsource命令的用法

    Linux,source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。source命令可以用于读取并执行脚本文件的命令,通常用于在当前shell环境
    的头像 发表于 11-08 14:35 2327次阅读

    linux常用命令及用法

    Linux是一种开源的操作系统,它以稳定、高效和安全的特点受到广大用户的喜爱。掌握Linux的常用命令及其用法对于操作系统的管理和开发都至关重要。本文将详尽、详实、细致地介绍Linux
    的头像 发表于 11-17 09:47 659次阅读

    总结linux命令行的主要用法

    Linux命令行是一种在Linux操作系统通过文本界面来执行指令和管理系统的方式。它提供了丰富的功能和灵活性,帮助用户完成各种任务。本文将详细介绍Linux命令行的主要
    的头像 发表于 11-17 10:19 662次阅读

    Linux lsof命令的基本用法

    linux 系统,一切皆文件。通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以 lsof 命令不仅可以查看进程打开的文件、目录,还可以查看进程监听的端口等 socket 相关的信息。本文将介绍 lsof 命令的基本
    的头像 发表于 10-23 11:52 245次阅读
    <b class='flag-5'>Linux</b> lsof命令的基本<b class='flag-5'>用法</b>