七個(gè)超級(jí)神奇的 Shell 快捷方式,助您開發(fā)事半功倍
隨著優(yōu)雅、全功能的集成開發(fā)環(huán)境的出現(xiàn),開發(fā)者與命令行的互動(dòng)越來越少。當(dāng)您可以通過漂亮的用戶界面安裝包或管理文件時(shí),為什么還需要一堆過時(shí)的shell技巧呢?但如果您曾遇到無法通過高級(jí)IDE解決的問題,就會(huì)明白擁有這些工具的重要性。
在本文中,我們將介紹一些簡單但極其有效的shell快捷方式和命令。使用這些技巧,您可以快速解決錯(cuò)誤、更快地運(yùn)行命令,并以最小的努力執(zhí)行搜索。

1、倒序搜索歷史記錄
這是您可以利用shell歷史記錄運(yùn)行之前執(zhí)行過的命令的最快方法之一。如果您在記得之前運(yùn)行的命令時(shí)感到困難(您并不孤單),簡單地滾動(dòng)瀏覽您的歷史記錄不會(huì)是一種有效的方式。
這就是倒序搜索的用途。使用這個(gè)工具,您可以快速搜索您的shell歷史記錄,然后快速執(zhí)行它們。您不必?zé)劳ㄟ^歷史記錄進(jìn)行g(shù)rep搜索或復(fù)制粘貼命令。
假設(shè)我很久以前運(yùn)行了以下命令:
echo “l(fā)inuxmi.com”現(xiàn)在已經(jīng)過了一段時(shí)間,我無法完全記住我使用的單詞。如果我想使用倒序搜索,我可以按Ctrl + R,然后進(jìn)入搜索提示符并輸入 linuxmi.com:
(reverse-i-search)`linuxmi.com’: echo “foobar”
當(dāng)您開始在搜索欄中輸入時(shí),它將自動(dòng)填充結(jié)果。當(dāng)您想要的結(jié)果出現(xiàn)時(shí),只需按回車鍵即可運(yùn)行命令。簡單、快速、簡便。
2、執(zhí)行歷史記錄中的特定命令
這是一種稍微不同的利用shell歷史記錄的方式。當(dāng)您運(yùn)行普通的history命令時(shí),您會(huì)得到一個(gè)您運(yùn)行過的命令列表。旁邊是ID號(hào)碼,它們對(duì)應(yīng)每個(gè)命令執(zhí)行的順序:
1htop
......
95 top
96 echo "www.linuxmi.com"
97 lynx
98 uname -a
99 neofetch
100 uname -a
101 history
使用這些ID號(hào)碼,您可以重新運(yùn)行歷史記錄中列出的任何命令。您只需在數(shù)字前面加上一個(gè)感嘆號(hào)(驚嘆號(hào))即可,像這樣:
!99當(dāng)您運(yùn)行此命令時(shí),您將執(zhí)行在ID號(hào)碼99處存儲(chǔ)的任何命令。在本文中,它將運(yùn)行neofetch命令。
這是一種非常方便的方式,可以回顧歷史記錄并執(zhí)行任何您想要重新運(yùn)行的較長命令。您還可以在shell腳本中聰明地使用它。
3、再次運(yùn)行上一個(gè)命令
這很簡單,但卻非常有用。如果您想重新運(yùn)行剛剛執(zhí)行的最后一個(gè)命令,只需輸入:
!!看起來按上箭頭然后按回車鍵會(huì)更容易,而且在大多數(shù)情況下確實(shí)如此。但是,也許您想運(yùn)行一個(gè)新的代碼片段,并在下一個(gè)命令中包含上一個(gè)命令的輸出。您可以在括號(hào)中調(diào)用!!并嵌套命令來執(zhí)行其他有趣的技巧:
linuxmi@linuxmi:~/www.linuxmi.com$ echo "linuxmi.com"
linuxmi@linuxmi:~/www.linuxmi.com$ echo -e "上一個(gè)命令是 $(!!)"
使用這種方法,您可以確保絕對(duì)引用最后執(zhí)行的命令。不再需要重新輸入或復(fù)制粘貼。
4、移動(dòng)到長命令的開頭或結(jié)尾
當(dāng)您需要編寫一個(gè)非常復(fù)雜的單行命令時(shí),如果需要在開頭或結(jié)尾進(jìn)行編輯,那將是一種痛苦。幸運(yùn)的是,還有一種快速的方法可以做到這一點(diǎn)。
如果您想要移動(dòng)到命令的開頭,您可以按下:
Ctrl + a如果您想要移動(dòng)到結(jié)尾,您可以按下:
Ctrl + e這兩個(gè)快捷鍵將使您不再需要按住箭頭鍵來來回在一行內(nèi)移動(dòng)。
5、從光標(biāo)位置刪除字符
如果您仍在處理那個(gè)長的單行命令,刪除其中的一小部分可能會(huì)很麻煩。特別是如果您需要?jiǎng)h除線條中某個(gè)特定點(diǎn)之前或之后的所有內(nèi)容。
對(duì)于這個(gè)確切的問題,也有一個(gè) shell 快捷鍵。
如果您想要?jiǎng)h除光標(biāo)當(dāng)前位置之前的所有內(nèi)容,可以按下:
Ctrl + u同樣地,如果您想要?jiǎng)h除光標(biāo)后的所有內(nèi)容,可以按下:
Ctrl + k現(xiàn)在,您不必長時(shí)間按住退格鍵來修改一個(gè)冗長的命令。
6、檢查命令
有時(shí)候,一個(gè)命令并不總是看起來那么簡單。您在控制臺(tái)中輸入的命令在背后可能會(huì)被多種不同的進(jìn)程或配置所操控。
舉個(gè)例子,您可以為常用命令添加別名,以便在它們后面附加您喜歡的參數(shù)。比如,您可以像這樣為 ls 添加額外的參數(shù):
alias ls='ls -lah'在這種情況下,當(dāng)您輸入 ls 并執(zhí)行它時(shí),您可能認(rèn)為您只是運(yùn)行了 ls,但實(shí)際上您運(yùn)行的是帶有隱藏參數(shù)的 ls。
如果您對(duì)某個(gè)特定命令感到懷疑,可以使用命令行工具 command 快速檢查它:
command -V ls
ls is aliased to 'ls -lah'當(dāng)您使用 -V 參數(shù)運(yùn)行 command 命令時(shí),您可以看到實(shí)際執(zhí)行的內(nèi)容。在這個(gè)例子中,command 告訴我們實(shí)際上運(yùn)行的是 ls -lah 而不僅僅是 ls。
7、在無限循環(huán)中運(yùn)行一些命令
最后是一個(gè)經(jīng)典的單行命令。這個(gè)代碼片段允許您在一組命令之間以一個(gè)簡短的延遲進(jìn)行循環(huán)運(yùn)行。如果您需要不斷監(jiān)視一個(gè)進(jìn)程或在某些事件發(fā)生時(shí)發(fā)送一些警報(bào),這將非常有幫助。
讓我們使用一個(gè)簡單的例子,它將運(yùn)行一個(gè)循環(huán),打印當(dāng)前日期,然后休眠一秒鐘:
linuxmi@linuxmi:~/www.linuxmi.com$ while true; do echo "$(date)"; sleep 1; done
這行代碼由分號(hào)分隔,表示要執(zhí)行多個(gè)命令或函數(shù):
- 第一個(gè)命令是 while true,它將啟動(dòng)我們的無限循環(huán)。
- 接下來的命令是 do echo “$(date)”,它告訴 shell 在循環(huán)內(nèi)運(yùn)行此命令并將日期打印到控制臺(tái)。
- 最后,我們休眠一秒鐘,然后使用 done 結(jié)束循環(huán)。 由于循環(huán)以 true 作為條件開始,它將一直持續(xù)下去,直到您退出循環(huán)或按下 Ctrl + c。
在這個(gè)循環(huán)中,您可以將 echo 命令替換為任何您想要持續(xù)運(yùn)行的命令。這可以是監(jiān)聽文件、檢查文件是否存在,甚至進(jìn)行一些簡單的算術(shù)計(jì)算。最好的部分是您甚至不需要離開 shell 來執(zhí)行任何操作。

































