'!'
在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-upgradeOpps错误...不要担心执行下面的命令来获得它成功..
$ su -c !!同样的方式,
$ service apache2 start or $ /etc/init.d/apache2 start or $ systemctl start apache2OOPS用户没有授权携带这样的任务,所以我运行..
$ 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目前为止就这样了。如果你知道或遇到任何其他用途
'!'
这是值得了解的,你可能想向我们提供反馈您的建议。保持连接!