目錄
1、使用指令編號從歷史記錄中執行指令" >1、使用指令編號從歷史記錄中執行指令
2、在Linux中執行先前執行的命令" >2、在Linux中執行先前執行的命令
3、將先前指令的參數傳遞給新指令" >3、將先前指令的參數傳遞給新指令
4、如何處理命令中的兩個或多個參數" >4、如何處理命令中的兩個或多個參數
5、根據特定關鍵字執行最近的命令" >5、根據特定關鍵字執行最近的命令
6、在Linux中重复上次执行的命令" >6、在Linux中重复上次执行的命令
7、使用’!’操作符删除除一个文件之外的所有文件" >7、使用’!’操作符删除除一个文件之外的所有文件
首頁 運維 Nginx Linux 指令中「!」操作符的八個神秘用途

Linux 指令中「!」操作符的八個神秘用途

Jun 27, 2023 pm 12:51 PM
linux 操作符

在不同的shell中,使用’!’符號的大多數Linux指令用法可能會有所不同。雖然我提供的範例通常在bash shell中使用,但其他一些Linux shell可能具有不同的實現,或者可能根本不支援某些對’!’符號的使用。

讓我們深入了解Linux指令中’!’符號的令人驚奇和神秘的用法。

Linux 命令中“!”操作符的八个神秘用途

1、使用指令編號從歷史記錄中執行指令

一個有用的提示是,你可以從之前執行過的命令中找到歷史命令並再次運行。首先,透過執行’history’指令找到指令的編號。

linuxmi@linuxmi:~/www.linuxmi.com$ history
登入後複製

Linux 命令中“!”操作符的八个神秘用途

在Linux中尋找最近執行的指令

要透過指令編號從歷史記錄中執行指令,可以使用'!'符號後接指令編號,如下圖所示。

$ !58
登入後複製

Linux 命令中“!”操作符的八个神秘用途

按指令編號執行指令

當你執行上述指令時,它將執行歷史記錄中第58行的指令。

請注意,實際的指令編號可能會因你的指令歷史而有所不同。你可以使用history指令查看指令清單及其行號。

2、在Linux中執行先前執行的命令

你可以透過命令的運行順序來執行先前執行過的命令,最後運行的命令將表示為-1,倒數第二個為-2,倒數第七個為-7,依此類推。你可以使用!-n,其中n是你要引用的命令的倒數編號。如下圖

$ history$ !-3$ !-6$ !-10
登入後複製

Linux 命令中“!”操作符的八个神秘用途

在Linux中重新執行指令

3、將先前指令的參數傳遞給新指令

我需要列出目錄'/home/linuxmi/snap'的內容,所以我執行了以下命令:

$ ls /home/linuxmi/snap
登入後複製

接著我意識到,應該運行"ls -l"命令以查看哪些文件可執行。不必重新輸入整個命令,只需將上個命令的參數傳遞給這個新命令即可,如下所示:

$ ls -l !$
登入後複製

Linux 命令中“!”操作符的八个神秘用途

在這裡,'!$'將上個命令中傳遞的參數傳遞給這個新命令。

4、如何處理命令中的兩個或多個參數

假設我在桌面上建立了一個名為1.txt的文字檔案。

linuxmi@linuxmi ~/www.linuxmi.com% touch /home/linuxmi/linuxmi.go
登入後複製

然後使用完整路徑將其複製到’/home/avi/Downloads’目錄中,使用cp指令。

linuxmi@linuxmi ~/www.linuxmi.com% cp /home/linuxmi/linuxmi.go /home/linuxmi/go
登入後複製

現在我們在cp指令中傳遞了兩個參數。第一個是’/home/avi/Desktop/1.txt’,第二個是’/home/avi/Downloads’。我們可以透過執行echo指令,並使用不同的參數,以不同的方式列印兩個參數。

linuxmi@linuxmi ~/www.linuxmi.com% echo "第一个参数是:!^"echo "第一个参数是:/home/linuxmi/linuxmi.go"第一个参数是:/home/linuxmi/linuxmi.golinuxmi@linuxmi ~/www.linuxmi.com% echo "第二个参数是:!cp:2"echo "第二个参数是:/home/linuxmi/go"第二个参数是:/home/linuxmi/go
登入後複製

請注意,第一個參數可顯示為“!^”,而其它參數可透過執行“![指令名稱]:[參數編號]”進行列印。

在上面的範例中,第一個指令是’cp’,需要列印第二個參數。因此是”!cp:2″。對於具有5個參數的xyz指令,如果需要取得第4個參數,可以使用“!xyz:4”,並根據需要使用該參數。可以透過”!*”存取所有的參數。

Linux 命令中“!”操作符的八个神秘用途

處理兩個或多個參數

5、根據特定關鍵字執行最近的命令

我們可以根據關鍵字執行最近執行的命令。具體如下所示:

$ ls /home > /dev/null				[Command 1]$ ls -l /home/linuxmi/linuxmi > /dev/null		[Command 2]	$ ls -la /home/linuxmi/linuxmi.com > /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]
登入後複製

Linux 命令中“!”操作符的八个神秘用途

检查输出,你会惊讶地发现你正在运行已经执行过的命令,只是使用了ls关键词。

6、在Linux中重复上次执行的命令

你可以使用(!!)操作符来运行/修改你上次执行的命令,这是一个简写符号,允许你引用在命令行中执行的上一个命令。

例如,我运行了一个单行脚本来查找Linux机器的IP地址:

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/
登入後複製

然后突然我发现我需要将上述脚本的输出重定向到一个名为ip.txt的文件中,那么我该怎么办呢?我需要重新输入整个命令并将输出重定向到文件吗?好吧,一个简单的解决方案是使用上箭头键来调出上一条命令,并在末尾添加’> ip.txt’来将输出重定向到文件。

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt
登入後複製

感谢上箭头键的救命作用。现在考虑以下情况,下次我运行下面的单行脚本。

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密码。

7、使用’!’操作符删除除一个文件之外的所有文件

在Linux中,’!’操作符(也称为”bang”操作符)用于历史扩展,它允许你引用先前的命令并对其执行各种操作。要从目录中删除除了特定文件(important_file.txt)之外的所有文件,可以使用带有’!’操作符的rm命令,如下所示。

$ rm !(important_file.txt)
登入後複製

要从文件夹中删除除了扩展名为’.pdf’之外的所有文件类型。

$ $ rm !(*.pdf)
登入後複製

8、检查Linux中的目录是否存在

在这里,我们将使用’! -d’来验证目录是否存在,如果目录不存在,则紧随其后的是逻辑与操作符(&&),打印出目录不存在,如果目录存在,则紧随其后的是逻辑或操作符(||),打印出目录存在。

逻辑是,当[ ! -d /home/linuxmi/linuxmi.com ]的输出为0时,它将执行逻辑与之后的内容,否则它将转到逻辑或(||)并执行逻辑或之后的内容。

$ [ ! -d /home/linuxmi/linuxmi.com ] && printf '\nno such /home/linuxmi/linuxmi.com directory exist\n' || printf '\n/home/linuxmi/linuxmi.com directory exist\n'
登入後複製

类似于上面的条件,但是如果所需目录不存在,它将退出命令。

$ [ ! -d /home/linuxmi/linuxmi.com] && exit
登入後複製

在脚本语言中的一般实现,如果所需目录不存在,它将创建一个目录。

[ ! -d /home/linuxmi/linuxmi.com] && mkdir /home/linuxmi/linuxmi.com
登入後複製

以上是Linux 指令中「!」操作符的八個神秘用途的詳細內容。更多資訊請關注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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 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)

無法以 root 身份登錄 mysql 無法以 root 身份登錄 mysql Apr 08, 2025 pm 04:54 PM

無法以 root 身份登錄 MySQL 的原因主要在於權限問題、配置文件錯誤、密碼不符、socket 文件問題或防火牆攔截。解決方法包括:檢查配置文件中 bind-address 參數是否正確配置。查看 root 用戶權限是否被修改或刪除,並進行重置。驗證密碼是否準確無誤,包括大小寫和特殊字符。檢查 socket 文件權限設置和路徑。檢查防火牆是否阻止了 MySQL 服務器的連接。

C語言條件編譯:新手入門到實戰應用的詳盡指南 C語言條件編譯:新手入門到實戰應用的詳盡指南 Apr 04, 2025 am 10:48 AM

C語言條件編譯是一種根據編譯時條件選擇性編譯代碼塊的機制,入門方法有:使用#if和#else指令根據條件選擇代碼塊。常用條件表達式包括STDC、_WIN32和linux。實戰案例:根據操作系統打印不同消息。根據系統位數使用不同的數據類型。根據編譯器支持不同的頭文件。條件編譯增強了代碼的可移植性和靈活性,使其適應編譯器、操作系統和CPU架構變化。

Linux的5個基本組件是什麼? Linux的5個基本組件是什麼? Apr 06, 2025 am 12:05 AM

Linux的五個基本組件是:1.內核,管理硬件資源;2.系統庫,提供函數和服務;3.Shell,用戶與系統交互的接口;4.文件系統,存儲和組織數據;5.應用程序,利用系統資源實現功能。

mysql 無法啟動怎麼解決 mysql 無法啟動怎麼解決 Apr 08, 2025 pm 02:21 PM

MySQL啟動失敗的原因有多種,可以通過檢查錯誤日誌進行診斷。常見原因包括端口衝突(檢查端口占用情況並修改配置)、權限問題(檢查服務運行用戶權限)、配置文件錯誤(檢查參數設置)、數據目錄損壞(恢復數據或重建表空間)、InnoDB表空間問題(檢查ibdata1文件)、插件加載失敗(檢查錯誤日誌)。解決問題時應根據錯誤日誌進行分析,找到問題的根源,並養成定期備份數據的習慣,以預防和解決問題。

mysql 可以在 android 上運行嗎 mysql 可以在 android 上運行嗎 Apr 08, 2025 pm 05:03 PM

MySQL無法直接在Android上運行,但可以通過以下方法間接實現:使用輕量級數據庫SQLite,由Android系統自帶,無需單獨服務器,資源佔用小,非常適合移動設備應用。遠程連接MySQL服務器,通過網絡連接到遠程服務器上的MySQL數據庫進行數據讀寫,但存在網絡依賴性強、安全性問題和服務器成本等缺點。

MySQL安裝在特定係統版本上報錯的解決途徑 MySQL安裝在特定係統版本上報錯的解決途徑 Apr 08, 2025 am 11:54 AM

MySQL安裝報錯的解決方法是:1.仔細檢查系統環境,確保滿足MySQL的依賴庫要求,不同操作系統和版本需求不同;2.認真閱讀報錯信息,根據提示(例如缺少庫文件或權限不足)採取對應措施,例如安裝依賴或使用sudo命令;3.必要時,可嘗試源碼安裝並仔細檢查編譯日誌,但這需要一定的Linux知識和經驗。最終解決問題的關鍵在於仔細檢查系統環境和報錯信息,並參考官方文檔。

mySQL下載完安裝不了 mySQL下載完安裝不了 Apr 08, 2025 am 11:24 AM

MySQL安裝失敗的原因主要有:1.權限問題,需以管理員身份運行或使用sudo命令;2.依賴項缺失,需安裝相關開發包;3.端口衝突,需關閉佔用3306端口的程序或修改配置文件;4.安裝包損壞,需重新下載並驗證完整性;5.環境變量配置錯誤,需根據操作系統正確配置環境變量。解決這些問題,仔細檢查每個步驟,就能順利安裝MySQL。

MySQL安裝時提示缺少依賴項如何解決 MySQL安裝時提示缺少依賴項如何解決 Apr 08, 2025 pm 12:00 PM

MySQL安裝失敗通常因缺少依賴項導致。解決方法:1.使用系統包管理器(如Linux的apt、yum或dnf,Windows的VisualC Redistributable)安裝缺失的依賴庫,例如sudoaptinstalllibmysqlclient-dev;2.仔細檢查錯誤信息,逐一解決複雜的依賴關係;3.確保包管理器源配置正確,能訪問網絡;4.對於Windows,下載安裝必要的運行庫。養成閱讀官方文檔和善用搜索引擎的習慣,能有效解決問題。

See all articles