! 符号在 Linux 中不但可以用作否定符号,还可以用来从历史命令记录中取出命令或不加修改的执行之前运行的命令。下面的所有命令都已经在 Bash Shell 中经过确切地检验。尽管我没有试过,但大多都不能在别的 Shell 中运行。这里我们介绍下 Linux 命令行中符号 ! 那惊人和奇妙的用法。

执行上一条命令

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

$ whereis bash #执行命令

bash: /bin/bash /etc/bash.bashrc

$ !! #再次执行上一条命令

whereis bash

bash: /bin/bash /etc/bash.bashrc

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

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

$ /opt/user/test.txt #忘记输入more

$ more !! #这样是不是快多了?

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

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

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

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

$ ls /etc/udev

/etc/udev

$ ls -al !$

ls -al /etc/udev

-r--r--r-- 1 root root 0 Jan 20 09:30 /etc/udev

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

使用上条命令第一个参数

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

$ ls -al !^

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

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

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

$ !:-

ls -al

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

使用上条命令的所有参数

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

$ finsd -name "foo.zip" # 这里特意输错了find命令

$ find !*

find ./ -name "foo.zip"

./bar/foo.zip

./data/py/foo.zip

使用上条命令指定的参数

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

$ cp -rf dira dirb/ #将dira拷贝到dirb

$ ls -l !cp:2 #查看dira的内容

ls -l dira

total 0

-rw-rw-r-- 1 hyb hyb 0 Jan 20 16:18 barfile

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

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

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

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

逻辑非的作用

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

rm !(*.cfg)

小结

惊叹号的其他惊叹功能一览:

!!

上一条命令

!$

上一条命令中的最后一个参数

!:-

上一命令除了最后一个参数

!*

上一条命令中的所有参数

!str

最近一条以str开头的命令

!?str?

最近一条包含str的命令

!n

顺数第n条命令

!-n

倒数第n条命令

^old^new

将上一命令中的old替换为new

!!:gs/old/new

将上一命令中的old替换为new

!scp:gs/old/new

将上一scp命令中的old替换为new

linux密码叹号,Linux中叹号“!”命令相关推荐

  1. linux mkfs 源码,Linux系统下移植busybox中mkfs.vfat命令

    为了延长磁盘寿命来存储音视频文件,打发在格式化磁盘过程中将簇的大小设置大点.因为存储的音视频文件现对较大,那么将簇大小设置得尽可能大,这样可以增强磁盘读取数据的性能,同时也不会浪费太多空间. 但发现我 ...

  2. linux密码验证机制,linux用户认证机制

    本文更正http://blog168.chinaunix.net/space.php?uid=20196318&do=blog&id=28742中出现的几个错误.错误1:对salt的描 ...

  3. linux 密码修改下次,Linux 强制使用者下次登入修改密码

    在 Linux 建立使用者帐号后, 一般会使用随机密码作为帐号的密码, 以下会示范强制使用者在下次登入后, 必须修改密码. 1. passwd 指令 passwd 指令用作修改密码, 一般使用者只可以 ...

  4. linux密码加密文件,Linux下加密/解密及用密码保护文件的七把利器

    加密是指对文件进行编码的过程,那样只有有权访问的人才可以访问文件.人类早在计算机还没有问世的时候就开始使用加密了.战争期间,人类会传输只有其部落或相关人员才能理解的某种信息. 作者:布加迪/编译来源: ...

  5. linux 修改proc目录,Linux_Linux中系统参数修改命令sysctl的使用讲解,sysctl配置与显示在/proc/sys目录 - phpStudy...

    Linux中系统参数修改命令sysctl的使用讲解 sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发.IP碎片去除以及源路由检查等.用 ...

  6. linux脚本添加source,shell中的source命令的巧妙用法

    首先,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录.例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如sourc ...

  7. linux美元符号切换为井号,MyBatis中井号与美元符号的区别

    WebSphere性能优化的几个方法 1.更改http server的配置文件参数KeepAlive.     原因:这个值说明是否保持客户与HTTP SERVER的连接,如果设置为ON,则请求数到达 ...

  8. Linux和optee双系统中1020-1023号的中断号的使用

    快速链接: .

  9. linux wget返回值_Linux中的Wget命令与示例

    GNU Wget是用于从Web下载文件的命令行实用程序.使用Wget,您可以使用HTTP,HTTPS和FTP协议下载文件. Wget提供了许多选项,使您可以下载多个文件,恢复下载,限制带宽,递归下载, ...

  10. linux密码修改时间,linux 查看、修改用户及密码过期时间(示例代码)

    WARNING: Your password has expired. Password change required but no TTY available. 提示密码过期, 设置新用户密码的过 ...

最新文章

  1. 《AI系统周刊》第1期:社群招新,打通智能计算软硬件“任督二脉”
  2. 1.2 离散时间信号-采样
  3. Java DelayQueue延迟队列的使用和源码分析
  4. 变形版汉诺塔:LeetCode:70爬楼梯
  5. 7月9日王者荣耀服务器维护,王者荣耀 7月9日体验服停机更新公告
  6. 微服务流控防护场景与应对措施
  7. FJ的字符串(字符串)
  8. 嵌入式工作笔记0004---常见术语积累--随时更新
  9. sass import 小记
  10. 方便的管理苹果Mac上菜单栏图标软件推荐:Bartender
  11. android 5.0 lg g2,升级到Android 5.0 的LG G2怎样Root?
  12. 小数分频器vhdl实现_基于VHDL的小数分频器设计
  13. 二极管和极性电容的正负测量
  14. 买到山寨版康师傅绿茶的后果
  15. 年纪大了,这样转行linux运维
  16. 多媒体计算机音乐大赛评分表,歌唱比赛的评分标准
  17. 分享120个ASP源码,总有一款适合您
  18. shell脚本编程100例
  19. 杜教筛 (包括线筛) 莫比乌斯函数前缀和 欧拉函数前缀和 因数和函数前缀和 因子个数前缀和 ( 分析 )...
  20. K2 BPM_K2签约龙光地产,为集团实现“千亿目标”保驾护航_全球领先的工作流引擎...

热门文章

  1. 服务器2008系统安装iis教程,Windows Server 2016系统安装IIS图文配置教程
  2. 录屏软件的鼻祖是techSmith 的喀秋莎 Camtasia Studio2023功能解锁及安装教程录屏视频编辑软件
  3. KGH: NO ACCESS内存分配过大,引起的ORA-4031故障
  4. 汉诺塔问题(Hanoi)
  5. RHCSA学习第六天
  6. js replace替换目标字符串 可以多个
  7. Halcon学习--数组操作
  8. 在python中可以用什么关键字来声明一个类_Python 定义类
  9. 英特尔Ax210 有无线没有蓝牙功能
  10. wamp3 64位 php5.3,win764位WAMP环境下(PHP5.3)redis扩展无法生效