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

    文章

    567

    浏览量

    26920
  • Shell
    +关注

    关注

    1

    文章

    358

    浏览量

    22902

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

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

收藏 人收藏

    评论

    相关推荐

    苹果笔记本WIN10下面USB连接出错的原因?

    在STM32L151CBU6的单片机碰到一问题,在苹果笔记本WIN10上STM32的HID不识别或识别不稳定,设备管理器没有出现感叹号,或出现感
    发表于 04-22 08:21

    选择旧版安装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的,驱动支持吗?
    发表于 07-27 02:32

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

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

    叹号显示器电路图

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

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

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

    Win7装机时PCI简易通讯控制器叹号处理

    装Win7时设备管理器:PCI串行端口 PCI简易通讯控制器叹号,如何解决呢?
    发表于 11-23 12:06 20.5w次阅读
    Win7装机时PCI简易通讯控制器<b class='flag-5'>叹号</b>处理

    通用串行总线控制器出现叹号是什么情况?怎么解决?

    通用串行总线控制器出现叹号是什么情况?而我们又该如何解决呢?
    发表于 11-13 10:21 6.1w次阅读
    通用串行总线控制器出现<b class='flag-5'>叹号</b>是什么情况?怎么解决?

    kindle开不机怎么办?kindle开不了机屏幕电池感叹号

    应该挺多人都遇到过kindle没电了充电一直显示感叹号的问题,遇到kindle没电了充电一直显示感叹号的问题时不要慌,下面小编为大家带来几个解决kindle没电了充电一直显示感叹号的方法。 很多人
    的头像 发表于 06-04 11:27 4.7w次阅读

    消息称iPhone15全系将采用叹号屏,正式告别刘海屏!

    日前,据爆料称,苹果的iPhone15系列将全面淘汰刘海屏,所有机型都将搭载新的感叹号屏。 苹果最新的iPhone14系列将会采用刘海屏和感叹号屏两种屏幕方案,其中iPhone14标准版
    的头像 发表于 07-22 11:37 1971次阅读

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

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

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

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