0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

linux中叹号(!)的10个技巧分享

dyquk4xk2p3d 来源:入门小站 2023-04-19 11:28 次阅读

'!'Linux 中的符号或运算符可用作逻辑否定运算符,也可通过调整从历史记录中获取命令,或通过修改运行先前运行的命令。以下所有命令均已在 bash Shell 中明确检查。虽然我没有检查过,但其中大部分不会在其他 shell 中运行。

按命令编号运行历史记录中的命令。

您可能不知道您可以从历史命令(已经 / 较早执行的命令)运行命令这一事实。要开始,首先通过运行 “history” 命令找到命令编号。

$history

现在,在history的输出中,仅按照它出现的编号运行来自history的命令。假设运行出现在'history' 命令输出中编号为1551的命令。

$!1551

并且,它运行在编号1551中列出的命令。这种检索已执行命令的方法非常有用,特别是在那些很长的命令的情况下。您只需要使用**!**来调用它。

将先前执行的命令作为倒数第二个命令、倒数第 7 个命令等运行。

你可以运行那些你之前运行过的命令,它们的运行顺序是最后一个运行命令将表示为**-1**,倒数第二个为**-2**,倒数第七个为**-7**,......。

首先运行history命令以获取上次执行命令的列表。有必要运行history命令,这样您就可以确保没有类似的命令rm command > file和其他命令,只是为了确保您不会意外运行任何危险的命令。然后检查第六个最后一个命令,八个最后一个命令和第十个最后一个命令。

$history
$!-6
$!-8
$!-10

按数字运行上次执行的命令

将我们运行的最后一个命令的参数传递给新命令,无需重新输入

我需要列出目录 “/home/$USER/Binary/firefox” 的内容。

$ls/home/$USER/Binary/firefox

然后我意识到我应该触发 “ls -l” 以查看哪个文件在那里可执行?所以我应该再次输入整个命令!不,我不需要。我只需要将这个新命令的最后一个参数作为:

$ls-l!$

这里!$将携带在最后一个命令中传递给这个新命令的参数。

将上次执行命令的参数传递给新命令

如何使用 (!) 处理两个或多个参数

假设我在桌面上创建了一个文本文件1.txt

$touch/home/avi/Desktop/1.txt

然后使用cp命令在任一侧使用完整路径将其复制到 “/home/avi/Downloads”。

$cp/home/avi/Desktop/1.txt/home/avi/downloads

现在我们已经使用cp命令传递了两个参数。第一个是 “/home/avi/Desktop/1.txt”,第二个是 “/home/avi/Downloads”,让我们以不同的方式处理它们,只需执行echo [arguments]以不同方式打印两个参数。

$echo"1stArgumentis:!^"
$echo"2ndArgumentis:!cp:2"

注意第一个参数可以打印为“!^”,其余参数可以通过执行“![Name_of_Command]:[Number_of_argument]”.

在上面的例子中,第一个命令是 “cp”,第二个参数需要打印。因此“!cp:2”,如果任何命令说xyz使用 5 个参数运行并且您需要获得第 4 个参数,您可以使用“!xyz:4”,并根据需要使用它。所有参数都可以通过 访问“!*”。

处理两个或更多参数

根据关键字执行最后一条命令我们可以根据关键字执行上次执行的命令。我们可以这样理解:

$ls/home>/dev/null[Command1]
$ls-l/home/avi/Desktop>/dev/null[Command2]
$ls-la/home/avi/Downloads>/dev/null[Command3]
$ls-lA/usr/bin>/dev/null[Command4]

在这里,我们使用了相同的命令**(ls),但使用了不同的开关和不同的文件夹。此外,我们已将每个命令的输出发送到 “/dev/null**”,因为我们不会处理命令的输出,控制台也保持干净。

现在根据关键字执行上次运行命令。

$!ls[Command1]
$!ls-l[Command2]
$!ls-la[Command3]
$!ls-lA[Command4]

检查输出,您会惊讶地发现您只是通过ls关键字运行已执行的命令。

根据关键字运行命令

神奇的!!

您可以使用(!!).它将在当前命令中使用 alter/tweak 调用最后一个运行命令。给你看场景

最后一天我运行了一个单行脚本来获取我的私有 IP,所以我运行,

$ipaddrshow|grepinet|grep-v'inet6'|grep-v'127.0.0.1'|awk'{print$2}'|cut-f1-d/

然后我突然发现我需要将上面脚本的输出重定向到一个文件ip.txt,那我该怎么办?我应该再次重新输入整个命令并将输出重定向到文件吗?那么一个简单的解决方案是使用UP导航键并添加'> ip.txt'将输出重定向到文件。

$ipaddrshow|grepinet|grep-v'inet6'|grep-v'127.0.0.1'|awk'{print$2}'|cut-f1-d/>ip.txt

UP键可以快速找到历史命令。现在考虑以下条件,下次我在单行脚本下运行时。

$ifconfig|grep"inetaddr:"|awk'{print$2}'|grep-v'127.0.0.1'|cut-f2-d:

一旦我运行脚本,bash 提示符就会返回一个错误消息“bash: ifconfig: command not found”,我不难猜测我以用户身份运行此命令,而它应该以 root 身份运行。

那么有什么解决办法呢?很难登录到 root 然后再次键入整个命令!此外,上一个示例中的(向上导航键)在这里也没有出现。所以?我们需要“!!”不带引号调用,这将调用该用户的最后一个命令。

$su-c!!root

这里su是切换用户,也就是 root,-c以用户身份运行特定的命令,最重要的部分!!将被命令替换,最后运行的命令将在这里替换。是的!您需要提供 root 密码。

!!主要在以下场景中使用,

当我以普通用户身份运行apt-get命令时,我通常会收到一个错误,说您无权执行。

$apt-getupgrade&&apt-getdist-upgrade

Opps 错误... 不要担心执行以下命令以使其成功..

$su-c!!
$serviceapache2start
or
$/etc/init.d/apache2start
or
$systemctlstartapache2

OOPS 用户无权执行此类任务,所以我运行..

$su-c'serviceapache2start'
or
$su-c'/etc/init.d/apache2start'
or
$su-c'systemctlstartapache2'

运行影响除 ![FILE_NAME] 之外的所有文件的命令

该!(逻辑 NOT)可以用来运行所有命令的文件 / 文件扩展名,除了后面'!'。

A.从目录中删除所有文件,但名称为2.txt的文件除外。

$rm!(2.txt)

**B.**从文件夹中删除所有文件类型,除了扩展名为 “pdf”的文件类型。

$$rm!(*.pdf)

检查一个目录(比如 / home/avi/Tecmint)是否存在?printf 如果所述目录存在与否。

在这里,我们将使用'! -d'来验证目录是否存在,然后使用逻辑 AND 运算符(&&)来打印该目录不存在,然后使用逻辑 OR 运算符(||)来打印目录是否存在。

逻辑是,当输出[ ! -d /home/rumenz ]为0 时,它将执行超出 Logical 的内容**,否则它将转到 Logical OR(||)并执行超出 LogicalOR 的内容**。

$[!-d/home/rumenz]&&printf'
nosuch/home/rumenzdirectoryexist
'||printf'
/home/rumenzdirectoryexist
'

检查目录是否存在?如果没有退出命令。与上述条件类似,但这里如果所需目录不存在,它将退出命令。

$[!-d/home/rumenz]&&exit

如果它不存在,则在您的主目录中创建一个目录(比如 rumenz)。脚本语言中的一种通用实现,如果所需目录不存在,它将创建一个。

[!-d/home/rumenz]&&mkdir/home/rumenz





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    592

    浏览量

    27364
  • Shell
    +关注

    关注

    1

    文章

    363

    浏览量

    23308

原文标题:linux中叹号(!)的10个技巧

文章出处:【微信号:良许Linux,微信公众号:良许Linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linuxgrep命令的12实际例子

    Linuxgrep命令的12实际例子
    发表于 02-08 09:38 678次阅读

    选择旧版安装Windows 10时会出现2叹号

    尽管如此,我的操作系统是最新的(10.0.17134 Build 17134)并安装了最新的芯片组驱动程序(10.1.1.42),但带有2叹号;如果Windows 10处于uefi模式(相同
    发表于 10-26 14:55

    为什么AD10界面右下角总是出现一叹号

    ad10应该是破解成功了,如图:AD10界面右下角总是出现一叹号:怎么解决呢??
    发表于 08-02 04:38

    单片机win10 USB下载驱动程序预安装成功,可是点开端口,有黄色感叹号

    win10系统,单片机USB驱动程序CH340预安装成功,但是点开端口,有黄色感叹号,关闭电脑强制签名也是试过了,还是不行,请问有什么解决办法么?
    发表于 10-15 22:22

    UDE-STK在设备管理器显示黄色感叹号

    UDE-STK 在设备管理器显示黄色感叹号,然后无法正常使用是什么情况?之前在其他电脑上用过是正常可以使用的,换了台电脑重新安装就显示黄色感叹号,无法用了怎么回事呢?在线急等,请各位大神指教!!!谢谢谢谢
    发表于 12-05 08:30

    win10通讯端口为什么有黄色感叹号啊?

    win10通讯端口为什么有黄色感叹号啊?
    发表于 09-28 06:52

    叹号显示器电路图

    叹号显示器电路图
    发表于 03-29 09:49 435次阅读
    惊<b class='flag-5'>叹号</b>显示器电路图

    揭开连接出现小叹号不能上网问题的神秘面纱

    揭开连接出现小叹号不能上网问题的神秘面纱 “怎么又不能上网了?”每次上不了网总出现一叹号?为什么在家里上网出现这个小叹号就能上
    发表于 02-23 13:59 816次阅读

    介绍Linux 终端运行的 10 网络监视工具

    保持对我们的网络的管理,防止任何程序过度使用网络、导致整个系统操作变慢,对管理员来说是至关重要的。有几个网络监视工具可以用于不同的操作系统。在这篇文章,我们将讨论从 Linux 终端运行的
    的头像 发表于 01-05 11:04 4546次阅读
    介绍<b class='flag-5'>Linux</b> 终端<b class='flag-5'>中</b>运行的 <b class='flag-5'>10</b> <b class='flag-5'>个</b>网络监视工具

    如何快速入门运维?了解Linux10命令链接操作符

    Linux命令链接的意思是,通过操作符的行为将几个命令组合执行。Linux的链接命令,有些像你在shell写短小的shell脚本,并直
    的头像 发表于 10-03 19:33 3027次阅读

    iPhone14 Pro叹号孔可显示为药丸形

      据有关人士透露。苹果iPhone 14 Pro型号的“感叹号”冲孔可以设置为一完整的“药丸”形状,中间部分可以用作隐私指示器,在使用麦克风和摄像头时提醒应用程序。
    的头像 发表于 09-01 10:44 3224次阅读

    Linux如何比较两文件的差异?

    Linux 如何比较两文件的差异?答案是使用 diff 命令。
    的头像 发表于 01-17 17:30 5176次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>中</b>如何比较两<b class='flag-5'>个</b>文件的差异?

    Linux如何比较两文件的差异?

    Linux 如何比较两文件的差异?答案是使用 diff 命令。
    的头像 发表于 01-30 16:04 1.2w次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>中</b>如何比较两<b class='flag-5'>个</b>文件的差异?

    Linux系统10常用的文本查看命令

    当你需要查看Linux系统的文本文件时,使用文本编辑器可能会比较繁琐,特别是当你只需要查看文件的内容时。这时,你可以使用Linux命令行下的文本查看工具来快速准确地查看文件。下面介绍了10
    的头像 发表于 06-24 11:44 1.1w次阅读

    C语言中两叹号的作用是什么

    不知道你是否看过上面类似的代码,两叹号出现在代码,难道代码也有思想,也需要表达情感吗?
    的头像 发表于 12-04 11:02 1491次阅读
    C语言中两<b class='flag-5'>个</b>感<b class='flag-5'>叹号</b>的作用是什么