首頁 系統教程 Linux linux中嘆號(!)的10個技巧

linux中嘆號(!)的10個技巧

Feb 15, 2024 pm 05:40 PM
linux linux教程 linux系統 linux指令 shell腳本 overflow 嵌入式linux linux入門 linux學習

'!'Linux 中的符號或運算子可以作為邏輯取反運算符,也可以透過改變從歷史記錄中取得指令,或透過修改執行前執行的命令。以下所有命令都已在 bash Shell 中明確驗證。雖然我沒有驗證過,但其中大多數不會在其他 shell 中有效。

linux中嘆號(!)的10個技巧

  1. # 按命令編號執行歷史記錄中的命令。

您可能不知道您可以從歷史命令(已經 / 較早執行的命令)運行命令這一事實。要開始,先透過執行 “history” 指令找到指令編號。

#
$ history
登入後複製

#現在,在history的輸出中,只按照它出現的編號執行來自history的指令。假設執行出現在’history‘ 指令輸出中編號為1551的指令。

#
$ !1551
登入後複製

#並且,它運行在編號1551中列出的命令。這種檢索已執行命令的方法非常有用,特別是在那些很長的命令的情況下。您只需要使用**!**來呼叫它。

  1. # 將先前執行的命令作為倒數第二個命令、倒數第 7 個命令等運行。

你可以執行那些你之前運行過的命令,它們的運行順序是最後一個運行命令將表示為**-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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1326
25
PHP教程
1273
29
C# 教程
1252
24
Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

sublime寫好代碼後如何運行 sublime寫好代碼後如何運行 Apr 16, 2025 am 08:51 AM

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

laravel安裝代碼 laravel安裝代碼 Apr 18, 2025 pm 12:30 PM

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)

git軟件安裝 git軟件安裝 Apr 17, 2025 am 11:57 AM

安裝 Git 軟件包括以下步驟:下載安裝包運行安裝包驗證安裝配置 Git安裝 Git Bash(僅限 Windows)

VSCode怎麼用 VSCode怎麼用 Apr 15, 2025 pm 11:21 PM

Visual Studio Code (VSCode) 是一款跨平台、開源且免費的代碼編輯器,由微軟開發。它以輕量、可擴展性和對眾多編程語言的支持而著稱。要安裝 VSCode,請訪問官方網站下載並運行安裝程序。使用 VSCode 時,可以創建新項目、編輯代碼、調試代碼、導航項目、擴展 VSCode 和管理設置。 VSCode 適用於 Windows、macOS 和 Linux,支持多種編程語言,並通過 Marketplace 提供各種擴展。它的優勢包括輕量、可擴展性、廣泛的語言支持、豐富的功能和版

See all articles