亚洲综合图片区自拍_思思91精品国产综合在线观看_一区二区三区欧美_欧美黑人又粗又大_亚洲人成精品久久久久桥本

【全球快播報(bào)】Linux命令中“!”操作符的用法

2023-07-05 10:23:21 來源:Linux迷

Linux中的"!"符號(hào)或操作符可以用作邏輯否定運(yùn)算符,也可以用于在歷史記錄中獲取命令并進(jìn)行修改或運(yùn)行以前執(zhí)行過的命令。

在不同的shell中,使用"!"符號(hào)的大多數(shù)Linux命令用法可能會(huì)有所不同。雖然我提供的示例通常在bash shell中使用,但其他一些Linux shell可能具有不同的實(shí)現(xiàn),或者可能根本不支持某些對(duì)"!"符號(hào)的使用。 讓我們深入了解Linux命令中"!"符號(hào)的令人驚奇和神秘的用法。


(相關(guān)資料圖)

1、使用命令編號(hào)從歷史記錄中運(yùn)行命令

你可能不知道的是,你可以從歷史命令中運(yùn)行一個(gè)命令(已經(jīng)執(zhí)行過的命令)。首先,通過運(yùn)行"history"命令找到命令的編號(hào)。

linuxmi@linuxmi:~/www.linuxmi.com$ history
在Linux中查找最近執(zhí)行的命令 要通過命令編號(hào)從歷史記錄中運(yùn)行命令,可以使用"!"符號(hào)后跟命令編號(hào),如下所示。
$ !58
按命令編號(hào)運(yùn)行命令 當(dāng)你執(zhí)行上述命令時(shí),它將運(yùn)行歷史記錄中第58行的命令。 請(qǐng)注意,實(shí)際的命令編號(hào)可能因你的命令歷史而有所不同。你可以使用history命令查看命令列表及其行號(hào)。

2、在Linux中運(yùn)行先前執(zhí)行的命令

你可以通過命令的運(yùn)行順序來運(yùn)行先前運(yùn)行過的命令,最后運(yùn)行的命令將表示為-1,倒數(shù)第二個(gè)為-2,倒數(shù)第七個(gè)為-7,依此類推。你可以使用!-n,其中n是你要引用的命令的倒數(shù)編號(hào)。如下圖

$ history$ !-3$ !-6$ !-10
在Linux中重新運(yùn)行命令

3、將先前命令的參數(shù)傳遞給新命令

我需要列出目錄"/home/linuxmi/snap"的內(nèi)容,所以我執(zhí)行了以下命令。

$ ls /home/linuxmi/snap
然后我意識(shí)到我應(yīng)該執(zhí)行"ls -l"來查看哪個(gè)文件在那里可執(zhí)行。所以我應(yīng)該重新輸入整個(gè)命令嗎?不需要,我只需要將上個(gè)命令的參數(shù)傳遞給這個(gè)新命令,如下所示:
$ ls -l !$
在這里,"!$"將上個(gè)命令中傳遞的參數(shù)傳遞給這個(gè)新命令。

4、如何處理命令中的兩個(gè)或多個(gè)參數(shù)

假設(shè)我在桌面上創(chuàng)建了一個(gè)名為1.txt的文本文件。

linuxmi@linuxmi ~/www.linuxmi.com% touch /home/linuxmi/linuxmi.go
然后使用完整路徑將其復(fù)制到"/home/avi/Downloads"目錄中,使用cp命令。
linuxmi@linuxmi ~/www.linuxmi.com% cp /home/linuxmi/linuxmi.go /home/linuxmi/go
現(xiàn)在我們?cè)赾p命令中傳遞了兩個(gè)參數(shù)。第一個(gè)是"/home/avi/Desktop/1.txt",第二個(gè)是"/home/avi/Downloads"。我們可以對(duì)它們進(jìn)行不同的處理,只需執(zhí)行echo [參數(shù)]以不同的方式打印兩個(gè)參數(shù)。
linuxmi@linuxmi ~/www.linuxmi.com% echo "第一個(gè)參數(shù)是:!^"echo "第一個(gè)參數(shù)是:/home/linuxmi/linuxmi.go"第一個(gè)參數(shù)是:/home/linuxmi/linuxmi.golinuxmi@linuxmi ~/www.linuxmi.com% echo "第二個(gè)參數(shù)是:!cp:2"echo "第二個(gè)參數(shù)是:/home/linuxmi/go"第二個(gè)參數(shù)是:/home/linuxmi/go
注意,第一個(gè)參數(shù)可以打印為"!^",而其余的參數(shù)可以通過執(zhí)行"![命令名稱]:[參數(shù)編號(hào)]"來打印。 在上面的示例中,第一個(gè)命令是"cp",需要打印第二個(gè)參數(shù)。因此是"!cp:2"。如果某個(gè)命令xyz帶有5個(gè)參數(shù)并且你需要獲取第4個(gè)參數(shù),可以使用"!xyz:4",然后根據(jù)需要使用它。可以通過"!*"訪問所有的參數(shù)。處理兩個(gè)或多個(gè)參數(shù)

5、根據(jù)特定關(guān)鍵詞運(yùn)行最近的命令

我們可以根據(jù)關(guān)鍵詞執(zhí)行最近執(zhí)行的命令。具體如下所示:

$ 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命令,但使用了不同的選項(xiàng)和不同的文件夾。此外,我們將每個(gè)命令的輸出發(fā)送到"/dev/null"以保持控制臺(tái)清潔。 現(xiàn)在根據(jù)關(guān)鍵詞執(zhí)行最后執(zhí)行的命令。

$ ! ls      [Command 1]$ ! ls -l    [Command 2]  $ ! ls -la    [Command 3]$ ! ls -lA    [Command 4]

檢查輸出,你會(huì)驚訝地發(fā)現(xiàn)你正在運(yùn)行已經(jīng)執(zhí)行過的命令,只是使用了ls關(guān)鍵詞。

6、在Linux中重復(fù)上次執(zhí)行的命令

你可以使用(!!)操作符來運(yùn)行/修改你上次執(zhí)行的命令,這是一個(gè)簡寫符號(hào),允許你引用在命令行中執(zhí)行的上一個(gè)命令。 例如,我運(yùn)行了一個(gè)單行腳本來查找Linux機(jī)器的IP地址。

$ ip addr show | grep inet | grep -v "inet6"| grep -v "127.0.0.1" | awk "{print $2}" | cut -f1 -d/
然后突然我發(fā)現(xiàn)我需要將上述腳本的輸出重定向到一個(gè)名為ip.txt的文件中,那么我該怎么辦呢?我需要重新輸入整個(gè)命令并將輸出重定向到文件嗎?好吧,一個(gè)簡單的解決方案是使用上箭頭鍵來調(diào)出上一條命令,并在末尾添加"> ip.txt"來將輸出重定向到文件。
$ ip addr show | grep inet | grep -v "inet6"| grep -v "127.0.0.1" | awk "{print $2}" | cut -f1 -d/ > ip.txt
感謝上箭頭鍵的救命作用?,F(xiàn)在考慮以下情況,下次我運(yùn)行下面的單行腳本。
ifconfig | grep "inet addr:" | awk "{print $2}" | grep -v "127.0.0.1" | cut -f2 -d:
當(dāng)我運(yùn)行腳本時(shí),bash提示返回了一個(gè)錯(cuò)誤,信息為“bash: ifconfig: command not found”,我很容易猜到我以一個(gè)普通用戶的身份運(yùn)行了這個(gè)命令,而它應(yīng)該以root身份運(yùn)行。

那么解決辦法是什么呢?登錄為root然后重新輸入整個(gè)命令是很困難的!在上一個(gè)示例中的(上箭頭鍵)在這里也無法幫助。那么我們需要調(diào)用“!!”(不帶引號(hào)),它將調(diào)用該用戶的最后一個(gè)命令。

su -c “!!” root

這里的su是切換用戶的命令,root是要切換到的用戶,-c是以指定的用戶身份運(yùn)行命令的選項(xiàng),最重要的部分是!!將被替換為上次運(yùn)行的命令。是的!你需要提供root密碼。

7、使用"!"操作符刪除除一個(gè)文件之外的所有文件

在Linux中,"!"操作符(也稱為"bang"操作符)用于歷史擴(kuò)展,它允許你引用先前的命令并對(duì)其執(zhí)行各種操作。要從目錄中刪除除了特定文件(important_file.txt)之外的所有文件,可以使用帶有"!"操作符的rm命令,如下所示。

$ rm !(important_file.txt)

要從文件夾中刪除除了擴(kuò)展名為".pdf"之外的所有文件類型。

$ $ rm !(*.pdf)

8、檢查Linux中的目錄是否存在

在這里,我們將使用"! -d"來驗(yàn)證目錄是否存在,如果目錄不存在,則緊隨其后的是邏輯與操作符(&&),打印出目錄不存在,如果目錄存在,則緊隨其后的是邏輯或操作符(||),打印出目錄存在。 邏輯是,當(dāng)[ ! -d /home/linuxmi/linuxmi.com ]的輸出為0時(shí),它將執(zhí)行邏輯與之后的內(nèi)容,否則它將轉(zhuǎn)到邏輯或(||)并執(zhí)行邏輯或之后的內(nèi)容。

$ [ ! -d /home/linuxmi/linuxmi.com ] && printf "no such /home/linuxmi/linuxmi.com directory exist" || printf "/home/linuxmi/linuxmi.com directory exist"
類似于上面的條件,但是如果所需目錄不存在,它將退出命令。
$ [ ! -d /home/linuxmi/linuxmi.com] && exit
在腳本語言中的一般實(shí)現(xiàn),如果所需目錄不存在,它將創(chuàng)建一個(gè)目錄。
[ ! -d /home/linuxmi/linuxmi.com] && mkdir /home/linuxmi/linuxmi.com

暫時(shí)就這些。如果你知道或遇到了其他值得了解的"!"的用法,請(qǐng)?jiān)谠u(píng)論中告訴我們。

審核編輯:湯梓紅

標(biāo)簽:

上一篇:一文徹底了解MOS管
下一篇:最后一頁