10个在Linux命令中使用(!)符号或运算符的惊人和神秘的用法

'!'在Linux的符号或操作员可以作为 逻辑否定运算符,以及与取调整历史命令或与修改就可以运行先前运行的命令。 下面的所有命令都已在bash Shell中被明确检查。 虽然我没有检查,但一个主要的这些不会运行在其他shell。 在这里,我们进入的神奇与神秘使用 '!'符号或运营商的Linux命令。
1.通过命令编号从历史记录运行命令。
你可能不知道的事实,你可以从你的 历史命令(已/早期执行的命令)运行命令。 要开始首次运行 历史 ”命令来查找命令编号。
$ history
现在只要通过在其看来,在 历史的输出数量运行 历史的命令。 说运行在“ 历史 ”命令的输出在数 1551出现的命令。
$ !1551
而且,它运行命令( top命令在上述情况下),这是在数字 1551列出。 这种方式来检索已经执行的命令是非常有用的,特别是在这些命令的长的情况下。 你只需要使用调用它 ![在它出现在历史命令的输出编号。
2.将先前执行的命令作为第二最后命令,第七最后命令等运行。
你可以运行你所用的运行顺序是最后一个运行命令将被表示为 -1以前运行这些命令,倒数第二为 -2,第七去年一样 -7,...。 首先运行 history命令来获得最后执行的命令的列表。 它需要运行 history命令,这样就可以确保有没有像命令 rm command > file和其他人只是为了确保你不小心运行任何危险的命令。然后检查第六个最后命令,第八个最后命令和第十个最后命令。
$ history
$ !-6
$ !-8
$ !-10

通过数字运行上次执行的命令

3.将我们运行的最后一个命令的参数传递给新的命令而不重新输入
我需要列出目录的内容 '/家庭/ $ USER /二进制/ Firefox的,所以我被解雇了。
$ ls /home/$USER/Binary/firefox
然后我意识到,我应该解雇 'ls -l命令 “,看看哪个文件是可执行文件呢?所以我应该键入整个命令了!不,我不需要。我只需要携带这个新命令的最后一个参数:
$ ls -l !$
这里 !$将携带在最后一个命令传递给这个新的命令参数。

将最后执行的命令的参数传递给新的

4.如何使用(!)处理两个或多个参数
比方说,我创建桌面上的一个文本文件 1.txt的
$ touch /home/avi/Desktop/1.txt
然后它 一个'/ home / AVI /下载 '使用完整路径复制与 cp命令两侧。
$ cp /home/avi/Desktop/1.txt /home/avi/downloads
现在,我们已经通过两个参数与 cp命令。 首先是 “/home/avi/Desktop/1.txt”和第二个是 '/家庭/ AVI /下载 “,让他们处理不同,只需要执行 echo [arguments]以不同的方式打印两个参数。
$ echo “1st Argument is : !^”
$ echo “2nd Argument is : !cp:2”
注意第一个参数可以打印为 “!^”和参数其余部分可以通过执行打印 “![Name_of_Command]:[Number_of_argument]” 在上面的例子中的第一个命令是 'CP'和需要第二参数来打印。 因此, “!cp:2”如果有命令说 某某与5参数运行,你需要得到第四个参数,你可以使用 “!xyz:4”并且只要你喜欢使用它。 所有参数可接 “!*”

处理两个或更多参数

5.根据关键字执行最后一个命令
我们可以根据关键字执行最后执行的命令。我们可以理解为:
$ ls /home > /dev/null						[Command 1]
$ ls -l /home/avi/Desktop > /dev/null		                [Command 2]	
$ ls -la /home/avi/Downloads > /dev/null	                [Command 3]
$ ls -lA /usr/bin > /dev/null				        [Command 4]
在这里,我们使用相同的命令 (LS),但具有不同的开关和不同的文件夹。 此外,我们已发送给每个命令的输出“ 的/ dev / null的 ',就像我们不会处理命令的输出也控制台保持清洁。 现在根据关键字执行上次运行命令。
$ ! ls					[Command 1]
$ ! ls -l				[Command 2]	
$ ! ls -la				[Command 3]
$ ! ls -lA				[Command 4]
检查输出,你会惊讶,你只是被运行已执行的命令 ls关键字。

基于关键字运行命令

6.力量!操作员
您可以运行/使用alter您上次运行命令 (!!)它将在当前命令中使用alter / tweak调用最后一个运行命令。让我们向你展示这个场景 最后一天我运行一个单线程脚本来获取我的私有IP,所以我运行,
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/
然后,突然我想通了,我需要上述脚本的输出重定向到一个文件 ip.txt,所以我应该怎么办? 是否应该重新键入整个命令并将输出重定向到文件? 那么一个简单的解决方法是使用 UP导航键,并添加 '> ip.txt'的输出重定向到一个文件。
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt
感谢生命的救主 UP这里导航键。现在考虑下面的条件,下次我运行下面的一行脚本。
$ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:
当我运行的脚本,bash提示符下将返回错误消息 “bash: ifconfig: command not found” ,这不是为难我猜我运行这个命令,它应该以root身份运行的用户。 那么解决方案是什么?很难登录到root,然后再次键入整个命令!同时,( 上导航键 )在最后一个例子没有来到这里抢救。 所以? 我们需要调用 “!!”不带引号,它将调用的最后一个命令为该用户。
$ su -c “!!” root
在这里, 苏东坡是根交换机的用户, -c是要运行的特定命令作为用户与最重要的部分 !!将命令和最后一个运行命令将在这里取代替换。是啊!您需要提供root密码。

的力量 !!键

我利用 !!主要集中在以下情况下, 1.当我运行 apt-get命令作为普通用户,我通常会得到一个错误说你没有权限去执行。
$ apt-get upgrade && apt-get dist-upgrade
Opps错误...不要担心执行下面的命令来获得它成功..
$ su -c !!
同样的方式,
$ service apache2 start
or
$ /etc/init.d/apache2 start
or
$ systemctl start apache2
OOPS用户没有授权携带这样的任务,所以我运行..
$ su -c 'service apache2 start'
or
$ su -c '/etc/init.d/apache2 start'
or
$ su -c 'systemctl start apache2'
7.运行影响除[!FILE_NAME]之外的所有文件的命令
!逻辑NOT)可用于上的所有文件运行命令/扩展除了背后是 '!'A.除了一个它的名称是 2.txt从目录中删除所有文件。
$ rm !(2.txt)
B.取下夹中的所有文件类型,除了一个扩展,它是 “PDF”。
$ $ rm !(*.pdf)
8.检查目录(例如/ home / avi / youcl)是否存在? Printf如果所述目录存在或不存在。
在这里,我们将使用 '! -d' '! -d'来验证,如果目录中存在或不跟逻辑运算符 (&&)来打印目录不存在,逻辑OR运算符 (||)打印目录存在。 逻辑是,当输出 [ ! -d /home/avi/youcl ] [ ! -d /home/avi/youcl ]0,它将执行以后如何逻辑 其他人就会去逻辑或 (||)并执行以后如何逻辑
$ [ ! -d /home/avi/youcl ] && printf '\nno such /home/avi/youcl directory exist\n' || printf '\n/home/avi/youcl directory exist\n'
9.检查目录是否存在?如果不退出命令。
类似上面的条件,但这里如果所需的目录不存在,它将退出命令。
$ [ ! -d /home/avi/youcl ] && exit
10.如果它不存在,在您的主目录中创建一个目录(说test)。
脚本语言中的一般实现,如果所需的目录不存在,它将创建一个。
[ ! -d /home/avi/youcl ] && mkdir /home/avi/youcl
目前为止就这样了。如果你知道或遇到任何其他用途 '!'这是值得了解的,你可能想向我们提供反馈您的建议。保持连接!
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏