Linux命令行下”!”的用法

Linux 系统中,“!” 符号或者操做符一般被用作逻辑否认的操做符,同时也经过一些调整和改动命令来从历史记录中找出你须要的命令行。下面演示的命令行在bash Shell中都已经明确检查过可用了。不过我没有在其余的 Shell 解释器下测试过,不过我相信这些命令也不会在其余的解释器下运行。那么如今就让咱们学习一下 “!” 这神奇而独特的用法吧!linux

1.从历史记录中使用命令号来运行命令bash

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

这时你能够经过命令 history 的输出中的命令序号来执行一条命令。学习

上面能够看到它执行了号码为1551的 top 命令,这种执行方式对执行某些特别长的命令很是有用,你只要使用”!”符号加上命令的序号就能执行该命令啦。测试

2.执行指定的以前执行过的命令spa

你能够运行 !-一、!-2 或者 !-7 等命令来执行你记录序列中的倒数第一条命令、倒数第二条命令已经倒数第七条等等。。。和上面的方式同样,你须要先用 history 命令来列出命令列表。其实这个命令很是有用,你能够经过它来肯定没有执行过某些错误命令好比 “rm command >file” 或者别的危险指令。这里给出了执行倒数第六个、第八个和第十个命令的效果。firefox

3.向一条新命令传递旧命令的参数避免重复输入命令行

好比说我须要列出 ‘/home/$USER/Binary/firefox’ 这个目录。3d

可是这个时候我又想用 “ls-l“查看这个目录下的具体信息,那么我须要从新输入上面的命令吗?固然不须要,你只要用下面这个命令:blog

“!$” 符号能够将上一条命令的参数传递给下一条命令参数:

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 目录中从新建立目录


来源:www.linuxstory.org  做者:Here or There

相关文章
相关标签/搜索