免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1560 | 回复: 3
打印 上一主题 下一主题

Linux命令行下”!”的十个神奇用法 [复制链接]

论坛徽章:
50
15-16赛季CBA联赛之深圳
日期:2017-07-17 11:07:49皇马
日期:2016-01-27 12:43:05切尔西
日期:2016-01-27 12:43:05AC米兰
日期:2016-01-27 12:43:05洛杉矶湖人
日期:2016-01-27 12:43:05明尼苏达森林狼
日期:2016-01-27 12:43:05圣安东尼奥马刺
日期:2016-01-27 12:43:05休斯顿火箭
日期:2016-01-27 12:43:05芝加哥公牛
日期:2016-01-27 12:43:05新泽西篮网
日期:2016-01-27 12:43:0515-16赛季CBA联赛之山东
日期:2016-01-27 12:40:04曼联
日期:2016-01-27 12:43:05
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-11-09 09:51 |只看该作者 |倒序浏览
Linux 系统中,“!” 符号或者操作符通常被用做逻辑否定的操作符,同时也通过一些调整和改动命令来从历史记录中找出你需要的命令行。下面演示的命令行在bash Shell中都已经明确检查过可用了。不过我没有在其他的 Shell 解释器下测试过,不过我相信这些命令也不会在其他的解释器下运行。那么现在就让我们学习一下 “!” 这神奇而独特的用法吧!
1.从历史记录中使用命令号来运行命令

你也许从没意识到过可以从命令行历史记录(之前执行过的命令)里执行一条命令,首先输入 “history” 命令得到命令的序号。  



这时你可以通过命令 history 的输出中的命令序号来执行一条命令。



上面可以看到它执行了号码为1551的 top 命令,这种执行方式对执行某些特别长的命令非常有用,你只要使用”!”符号加上命令的序号就能执行该命令啦。
2.执行指定的之前执行过的命令

你可以运行 !-1、!-2 或者 !-7 等命令来执行你记录序列中的倒数第一条命令、倒数第二条命令已经倒数第七条等等。。。和上面的方式一样,你需要先用 history 命令来列出命令列表。其实这个命令非常有用,你可以通过它来确定没有执行过某些错误命令比如 “rm command >file” 或者别的危险指令。这里给出了执行倒数第六个、第八个和第十个命令的效果。
3.向一条新命令传递旧命令的参数避免重复输入
比如说我需要列出 ‘/home/$USER/Binary/firefox’ 这个目录。

但是这个时候我又想用 “ls-l“查看这个目录下的具体信息,那么我需要重新输入上面的命令吗?当然不需要,你只要用下面这个命令:
“!$” 符号可以将上一条命令的参数传递给下一条命令参数:

4.如何用(!)处理两个以上的参数?例如我在桌面上创建了一个 1.txt 文件

然后使用CP命令把它复制到 ‘home/avi/Downloads’ 目录

这样我们就向CP命令传递了两个参数。第一个是 ‘/home/avi/Desktop/1.txt’ ,第二个是’/home/avi/Downloads’,为了区分它们,我们 使用 echo 来打印每个参数。

可以注意到第一个参数可以使用 “!^” 来表示,剩下的参数就可以使用 “命令名:参数序号”这种方式来表示,比如 “!cp:2″。再举个例子,如果你执行的某个命令为 “xyz”,命令 后面有5个参数而你想调用第四个参数,就可以使用 “!xyz:4″ 来调用它。当然,你可以使用 “!* “ 来表示所有参数。

5.通过关键词来执行之前的命令

我们可以通过执行关键词来执行之前的命令。可以按照下面的命令来理解:

上面是相同的ls命令对应了不同参数和文件夹。此外我们将每一个标准输出都传递到了‘/dev/null’ 因为我们并不希望处理程序的标准输出。现在我们可以调用命令的关键词来实现它们。

当你使用 “ls” 关键词来执行之前命令的时候,你一定会被标准输出给惊讶到。

6.非常实用的 !! 操作符

你可以使用(!!)来运行或者改变之前的命令。它会调用最近使用的命令来调整当前命令,给大家展示一下使用场景。
昨天我运行了一个获取IP的Shell命令:

突然我意识到需要将结果重定向到 ip.txt 中,这时你应该想到用 “UP” 键恢复上一个命令再加上 ‘>ip.txt‘ 命令来重定向进去:

感谢这次救命的”UP” 键。那么再考虑下这个场景,如果我需要运行下面的这个脚本:

当我运行它的时候突然报出了”bash:ifconfig:command not found”错误,我意识到可能是我设定了这个命令需要root权限来运行它。那么现在怎么办?需要重新登录root账号来执行它么?这种情况下使用”up”键也并不管用。所以这里我们使用 “!!” 命令来选择调用这条命令。

显而易见的是 su 是用来选择执行用户的, -c 是用来表示执行具体命令的,最重要的部分“!!” 代替了你最后一次运行的命令。然后输入你的root密码即可运行它了。

我相信下面的场景非常适合 “!!”  的使用。
当你使用普通的账户来执行 apt-get 的时候,常常会报错提示你没有权限执行。

哈哈不用担心,这时候就可以使用下面的命令来成功执行了:

同样有类似的场景:如果普通用户没有权限,即可这样运行:
7.使用 !(文件名) 的方式来避免命令对某个文件的影响

这里的 “!” 符号相当于逻辑否定来使用,用来避免对加了 “!” 前缀的文件产生影响。

A.从目录中删除除 2.txt 外的所有文件:

B.从目录中删除 pdf 为后缀以外的文件(请忽略下图中多出来的一个$):
8.检查某个目录是否存在,如果存在就将其打印

这里使用 ‘! -d’  命令来判断目录是否为空,同时使用 “&&” “||” 命令来打印判断目录是否存在:
9.检测目录是否是否为空,如果为空则退出

和上面的命令类似。这里是检测目录是否为空,如果为空则退出命令
10.检测目录是否为空,如果为空则在 home 目录中重新创建目录


来源:Linux Story


论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2015-11-09 10:13 |只看该作者
回复 1# duke217
大神您好, 有 2 个问题像您请教:
1.> 您的这个动画使用什么软件录制的?
2.> 如何将其放置在页面当中进行显示?

   

论坛徽章:
50
15-16赛季CBA联赛之深圳
日期:2017-07-17 11:07:49皇马
日期:2016-01-27 12:43:05切尔西
日期:2016-01-27 12:43:05AC米兰
日期:2016-01-27 12:43:05洛杉矶湖人
日期:2016-01-27 12:43:05明尼苏达森林狼
日期:2016-01-27 12:43:05圣安东尼奥马刺
日期:2016-01-27 12:43:05休斯顿火箭
日期:2016-01-27 12:43:05芝加哥公牛
日期:2016-01-27 12:43:05新泽西篮网
日期:2016-01-27 12:43:0515-16赛季CBA联赛之山东
日期:2016-01-27 12:40:04曼联
日期:2016-01-27 12:43:05
3 [报告]
发表于 2015-11-09 10:39 |只看该作者
回复 2# sunzhiguolu
额……大神可不敢称,这文章是我转载的,所以文中的图原作者具体用的什么软件我不敢确定。不过,如果让我做出这种效果的话,应该会先选择屏幕录像软件将操作录成视频格式,再将视频转成gif动画图片格式,最后直接插入文中用就可以了~
如果说的不对,还请见谅哈~
   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
4 [报告]
发表于 2015-11-09 10:46 |只看该作者
回复 3# duke217
不过,如果让我做出这种效果的话,应该会先选择屏幕录像软件将操作录成视频格式,再将视频转成gif动画图片格式,最后直接插入文中用就可以了

已经学到了知识, 谢谢您...

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP