成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

系統 Linux
Linux中的’!’符號或操作符可以用作邏輯否定運算符,也可以用于在歷史記錄中獲取命令并進行修改或運行以前執行過的命令。

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

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

1、使用命令編號從歷史記錄中運行命令

你可能不知道的是,你可以從歷史命令中運行一個命令(已經執行過的命令)。首先,通過運行’history’命令找到命令的編號。

linuxmi@linuxmi:~/www.linuxmi.com$ history

在Linux中查找最近執行的命令

要通過命令編號從歷史記錄中運行命令,可以使用’!’符號后跟命令編號,如下所示。

$ !58

按命令編號運行命令

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

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

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

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

$ history
$ !-3
$ !-6
$ !-10

在Linux中重新運行命令

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

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

$ ls /home/linuxmi/snap

然后我意識到我應該執行’ls -l’來查看哪個文件在那里可執行。所以我應該重新輸入整個命令嗎?不需要,我只需要將上個命令的參數傳遞給這個新命令,如下所示:

$ ls -l !$

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

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.go
linuxmi@linuxmi ~/www.linuxmi.com
% echo "第二個參數是:!cp:2"
echo "第二個參數是:/home/linuxmi/go"
第二個參數是:/home/linuxmi/go

注意,第一個參數可以打印為”!^”,而其余的參數可以通過執行”![命令名稱]:[參數編號]”來打印。

在上面的示例中,第一個命令是’cp’,需要打印第二個參數。因此是”!cp:2″。如果某個命令xyz帶有5個參數并且你需要獲取第4個參數,可以使用”!xyz:4″,然后根據需要使用它。可以通過”!*”訪問所有的參數。

處理兩個或多個參數

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]

檢查輸出,你會驚訝地發現你正在運行已經執行過的命令,只是使用了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迷
相關推薦

2023-12-31 19:11:26

2014-01-14 10:22:21

LinuxLinux命令

2024-03-06 13:56:00

項目awaitpromise

2025-02-07 15:01:49

Promise數組前端

2024-01-02 16:16:34

Promise前端

2024-01-29 18:02:46

2010-07-14 14:55:07

Perl操作符

2022-06-12 20:53:09

TS typeofJavaScript

2025-04-23 08:20:00

Linux性能監測命令

2024-08-27 12:18:23

函數Python

2021-10-09 13:48:11

操作符Python運算符

2023-06-08 12:37:17

2023-05-15 18:29:02

Linux操作系統

2024-10-23 08:00:00

2021-10-31 18:59:55

Python操作符用法

2016-11-17 15:35:51

RxJava操作Subscriber

2009-07-21 09:31:00

Scala操作符

2009-08-19 17:26:28

C# 操作符

2023-11-27 16:01:59

JavaScrip技巧

2021-11-10 10:15:52

LinuxBash命令
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 波波电影院一区二区三区 | 中文字幕精品一区 | 久久久久综合 | 亚洲免费一 | 亚洲欧美一区二区三区视频 | 欧美美女二区 | 手机在线不卡av | 久久亚洲天堂 | 欧美视频成人 | 久久国产精品精品 | 久久久久久中文字幕 | 99热精品在线| 精品99爱视频在线观看 | 欧美日韩成人在线 | 精品国产一区二区在线 | 日韩在线观看视频一区 | 久久久久久久久久久91 | 欧美精品欧美精品系列 | 午夜精品久久久久久久星辰影院 | 成人高清在线视频 | 龙珠z在线观看 | 97精品超碰一区二区三区 | 午夜精品一区二区三区免费视频 | 一级aaaaaa毛片免费同男同女 | 亚洲成av人片在线观看无码 | 亚洲三级视频 | 久久亚洲国产精品 | 欧美日韩免费在线 | 日本一区二区高清不卡 | 中文字幕av中文字幕 | 亚洲天堂久久新 | 亚洲一页 | 国产成人精品免费视频大全最热 | 午夜视频一区二区 | 午夜精品久久久久久久久久久久久 | 久草色播 | 国产精品无码永久免费888 | 国产一级片在线观看视频 | 成人aaa视频 | 精品美女视频在线观看免费软件 | 亚洲免费在线观看 |