原文地址: Linux中"!"的驚嘆用法
創(chuàng)新互聯(lián)主要從事做網(wǎng)站、成都做網(wǎng)站、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務云浮,10年網(wǎng)站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575
實際上,不起眼的"!"在linux中有著很多讓你驚嘆的妙用。本文就來細數(shù)那些"!"的神奇用法。
執(zhí)行上一條命令
例如,在執(zhí)行完上面一條命令后,可以使用下面的方式再次執(zhí)行上一條命令:
!!代表了上一條執(zhí)行的命令??梢钥吹剑斴斎雰蓚€感嘆號時,它顯示上條命令的同時會執(zhí)行上一條命令。當然了,通常我們還會想到使用“UP”鍵來完成這個事情。但是如果是基于上條命令擴充,!!就來得更加方便了。
比如,你想查看某個文件,但是忘了輸入more:
使用!!是不是方便多了?
比如,你在使用ls列出目錄內容時,沒有帶任何參數(shù),但是想再次執(zhí)行,帶上-al參數(shù),又不想輸入長長的參數(shù),可以使用下面的方式:
這里的!$代表了上一條命令的最后一個參數(shù)。
而使用上條命令的第一個參數(shù)只需要使用!^,例如:
如果想執(zhí)行上條命令,但不想帶上最后一個參數(shù):
什么場景下可能會用呢?比如你上一條命令最后一個參數(shù)是一個長長的字符串,而你恰好不想不用它,并且退格鍵刪除又慢的時候,可以使用上面的方法。
前面說了使用上條命令的最后一個參數(shù),那如果不是最后一個參數(shù),該如何使用呢?很簡單,使用!*即可。例如我們在輸入find命令輸錯了,想要糾正的時候:
有的讀者可能會問了,如果我只想用其中某個參數(shù)呢?按照 的規(guī)則即可。例如:
當上條命令的參數(shù)很長,而你需要取用中間的某個參數(shù)時,效果就比較明顯了。
我們都知道可以通過history命令可以查看之前執(zhí)行過的命令,但是如何再次執(zhí)行history中的命令呢?我們可以通過“UP”鍵可以查看,但是歷史命令很長的時候,并不是很方便,這個時候“!”便派上了用場:
我們可以看到,history命令出來可以看到之前執(zhí)行過的命令,也會看到它前面帶了一個數(shù)值。如果我們想執(zhí)行前面的cp -rf dira dirb/命令,實際上只要用下面的方式即可:
即通過![歷史命令數(shù)值]的方式執(zhí)行歷史命令。
當然了,如果我們想執(zhí)行倒數(shù)第二條命令,也是有方法的:
!可以根據(jù)關鍵字執(zhí)行命令。
例如,執(zhí)行上一條find命令:
再例如,執(zhí)行上一條包含name的命令:
例如:
如果我們需要將這條命令中的old更換為new:
這個是它最為人所熟悉的作用,例如刪除除了cfg結尾以外的所有文件:
這里就不再詳述。
驚嘆號"!"的作用確實有時候讓人驚嘆。前面可能只是提到!結合其他字符代表某個特定的含義的某種使用,實際上,我們可以組合或者擴展發(fā)現(xiàn)更多的妙用。這里不再展開。
Linux tip: Using an exclamation point (!) to reference events
《A Practical Guide to Linux Commands, Editors and Shell Programming - 4th Edition Nov 2017》
1、fc -s(或!!):執(zhí)行上一條命令
2、!!執(zhí)行上一條命令
!45 執(zhí)行第45條命令
3、按上鍵,也會回滾到上一條命令
#符號 是系統(tǒng)用戶 root
$符號 是你創(chuàng)建的用戶 沒指定權限!
刪除用戶: # userdel testuser 刪除用戶后 ,還要刪除home下屬于這個用戶的文件
切換用戶: #su testuser2 $exit:返回到上一級目錄. 新用戶登錄的時候,用戶默認的當前目錄是用戶的住目錄 home
給a文件增加相應的權限: # chmod +x a (相應的-x就是去掉某個權限)
首先要明確$符號用在什么地方,使用在不同的地方,其所代表的定義也就不同。比如在bash里$符號表示當前用戶為普通用戶;在bash腳本里。$開頭表示變量。
舉例說明,下面是一些特殊的變量:
$# 表示參數(shù)個數(shù)
$0 是腳本本身的名字
$1 是傳遞給該shell腳本的第一個參數(shù)
$2 是傳遞給該shell腳本的第二個參數(shù)
$@ 表示所有參數(shù),并且所有參數(shù)都是獨立的
$$ 是腳本運行的當前進程ID號
$? 是顯示最后命令的退出狀態(tài),0表示沒有錯誤,其他表示有錯誤
方法一
for i in {1..10}; do echo "Hello, World";
方法二
在~/.bashrc文件中創(chuàng)建一個run函數(shù):
function run() {
number=$1
shift
for n in $(seq $number); do
$@
done
}
1
2
3
4
5
6
7
使./bashrc生效
souce ~/./bashrc
1
示例
run 10 echo "Hello, World"
1、tab:命令或路徑等的補全鍵,也是Linux用的最多的一個快捷鍵;
2、ctrl+a:光標迅速回到行首;
3、ctrl+e:光標迅速回到行尾;
4、ctrl+f:光標向右移動一個字符;
5、ctrl+b:光標向左移動一個字符;
6、ctrl+insert:復制命令行內容(mac系統(tǒng)不能使用);
7、shift+insert //粘貼命令行內容(mac系統(tǒng)不能使用);
8、ctrl+k //剪切(刪除)光標處到行尾的所有字符;
9、ctrl+u //剪切(刪除)光標處到行首的所有字符;
10、ctrl+w //剪切(刪除)光標前的一個字符;
11、ctrl+y //粘貼 ctrl+k、ctrl+u、ctrl+w刪除的字符;
12、ctrl+c //中斷終端正在執(zhí)行的任務并開啟一個新的一行;
13、ctrl+h //刪除光標前的一個字符(相當于退格鍵);
14、ctrl+d //退出當前shell命令行,如果是切換過來的用戶,則執(zhí)行這個命令回退到原用戶;
15、ctrl+r //搜索命令行使用過的歷史命令記錄;
16、ctrl+g //從ctrl+r的搜索歷史命令模式中退出;
17、ctrl+l //清楚屏幕所有的內容,并開啟一個新的一行;
18、ctrl+s //鎖定終端,使之任何人無法輸入;
19、ctrl+q //解鎖ctrl+s的鎖定狀態(tài);
20、ctrl+z //暫停在終端運行的任務,使用"fg"命令可以使暫?;謴?
21、!! //執(zhí)行上一條命令;
22、!pw //這是一個例子,是執(zhí)行以pw開頭的命令,這里的pw可以換成任何已經執(zhí)行過的字符;
23、!pw:p //這是一個例子,是僅打印以pw開頭的命令,但不執(zhí)行,最后的那個“p”是命令固定字符;
24、!num //執(zhí)行歷史命令列表的第num條命令,num代指任何數(shù)字(前提是歷史命令里必須存在);
25、!$ //代指上一條命令的最后一個參數(shù),該命令常用于shell腳本中
26、esc+. //注意那個".“ 意思是獲取上一條命令的(以空格為分隔符)最后的部分;
27、esc+b //移動到當前單詞的開頭;
28、esc+f //移動到當前單詞的結尾;