>  기사  >  시스템 튜토리얼  >  Linux에서 느낌표(!)에 대한 10가지 팁

Linux에서 느낌표(!)에 대한 10가지 팁

WBOY
WBOY앞으로
2024-02-15 17:40:03529검색

'!'Linux의 기호 또는 연산자는 논리적 부정연산자로 사용하거나 기록에서 얻은 명령을 변경하거나 이전에 실행된 명령을 수정하여 사용할 수 있습니다. 다음 명령은 모두 bash 쉘에서 명시적으로 확인되었습니다. 확인하지는 않았지만 이들 중 대부분은 다른 쉘에서는 작동하지 않습니다.

Linux에서 느낌표(!)에 대한 10가지 팁

  1. 명령 번호별로 기록에 있는 명령을 실행합니다.

history 명령(이전에 실행되었거나 실행된 명령)에서 명령을 실행할 수 있다는 사실을 모르고 계실 수도 있습니다. 시작하려면 먼저 “history” 명령을 실행하여 명령 번호를 찾으세요.

으아악

이제 history의 출력에서 ​​history의 명령만 나타나는 숫자로 실행됩니다. 'history' 명령 출력에 나타나는 명령 번호 1551를 실행한다고 가정해 보겠습니다.

으아악

그리고 1551번에 나열된 명령을 실행합니다. 실행된 명령을 검색하는 이 방법은 특히 매우 긴 명령의 경우 매우 유용합니다. **!**를 사용하여 호출하면 됩니다.

  1. 이전에 실행한 명령을 마지막에서 두 번째 명령, 마지막에서 일곱 번째 명령 등으로 실행합니다.

이전에 실행했던 명령을 실행할 수 있으며, 실행할 명령은 마지막 명령이 **-1로 표시되고 두 번째 명령이 -2로 표시되고 일곱 번째 명령이 마지막으로 표시되도록 순서대로 실행됩니다. -7** ,…

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

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

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

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

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

$ ls /home/$USER/Binary/firefox

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

$ ls -l !$

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

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

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

假设我在桌面上创建了一个文本文件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 "1st Argument is : !^"
$ echo "2nd Argument is : !cp:2"

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

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

处理两个或更多参数

  1. 根据关键字执行最后一条命令我们可以根据关键字执行上次执行的命令。我们可以这样理解:
$ 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关键字运行已执行的命令。

根据关键字运行命令

  1. 神奇的!!

您可以使用(!!).它将在当前命令中使用 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

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

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

当我以普通用户身份运行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'
  1. 运行影响除 ![FILE_NAME] 之外的所有文件的命令

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

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

$ rm !(2.txt)

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

$ $ rm !(*.pdf)
  1. 检查一个目录(比如 / home/avi/Tecmint)是否存在?printf 如果所述目录存在与否。

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

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

$ [ ! -d /home/rumenz ] && printf '\nno such /home/rumenz directory exist\n' || printf '\n/home/rumenz directory exist\n'
  1. 检查目录是否存在?如果没有退出命令。与上述条件类似,但这里如果所需目录不存在,它将退出命令。
$ [ ! -d /home/rumenz ] && exit
  1. 如果它不存在,则在您的主目录中创建一个目录(比如 rumenz)。脚本语言中的一种通用实现,如果所需目录不存在,它将创建一个。
[ ! -d /home/rumenz ] && mkdir /home/rumenz

위 내용은 Linux에서 느낌표(!)에 대한 10가지 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 lxlinux.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제