分享生產(chǎn)力Shell命令和命令行技巧
如果您想成為一名高效的開(kāi)發(fā)人員,那么無(wú)論您使用什么技術(shù),就離不開(kāi)使用命令行。
下面列出了我多年來(lái)學(xué)到的最喜歡和最常用的Shell命令和技巧。我相信你肯定知道其中的一些命令或技巧,那么就請(qǐng)?zhí)^(guò),但其他的命令可能會(huì)給你提高生產(chǎn)力。
免責(zé)聲明:我在Ubuntu 20.04上使用默認(rèn)的終端使用這些命令。只要您在類似Unix的操作系統(tǒng)上運(yùn)行類似bash的shell,這些命令也應(yīng)該適用于您。但是如果你在Windows上運(yùn)行Powershell,那么祝你好運(yùn)!
cd -
您可能知道可以使用cd切換到某個(gè)目錄。
但是您知道您可以使用破折號(hào)(-)作為參數(shù)返回上一個(gè)目錄嗎?
- linuxmi@linuxmi:~/www.linuxmi.com$ cd
- linuxmi@linuxmi:~$ cd -
- /home/linuxmi/www.linuxmi.com
- linuxmi@linuxmi:~/www.linuxmi.com$ cd -
- /home/linuxmi
如下圖:
溫馨提示:破折號(hào)參數(shù)也適用于git checkout,所以你可以使用它在主分支和工作分支之間進(jìn)行快速切換。
Shell 歷史
這可能是本人最常用的一個(gè)shell技巧:(連續(xù))按向上箭頭以選擇我的shell歷史記錄中的最后一個(gè)命令。
您也可以按ctrl + r(依次)按LRU順序通過(guò)關(guān)鍵字反向搜索Shell歷史記錄。
或者直接鍵入history來(lái)查看終端中的整個(gè)shell歷史記錄。然后您可以寫入![number]以在歷史記錄中的位置編號(hào)處選擇命令。
- linuxmi@linuxmi:~/www.linuxmi.com$ history
- linuxmi@linuxmi:~/www.linuxmi.com$ !849
你甚至可以使用負(fù)數(shù)作為索引來(lái)選擇倒數(shù)第n個(gè)命令,就像這樣:
- linuxmi@linuxmi:~/www.linuxmi.com$ !-2
!^ !$
前一個(gè)命令的第一個(gè) (!^) 和最后一個(gè) (!$) 參數(shù)也有快捷方式:
- linuxmi@linuxmi:~/www.linuxmi.com$ echo linuxmi linux ubuntu java python
- linuxmi linux ubuntu java python
- linuxmi@linuxmi:~/www.linuxmi.com$ echo !^ !$
- echo linuxmi python
- linuxmi python
如下圖:
!!
如果您只需要最后一條命令,則可以添加!! 在您當(dāng)前的命令中,它將替換為最后的命令并執(zhí)行:
- linuxmi@linuxmi:~/www.linuxmi.com$ uname -r
- 5.12.0-051200-generic
- linuxmi@linuxmi:~/www.linuxmi.com$ !!
- uname -r
- 5.12.0-051200-generic
如下圖:
!:[index]
或者,您可以通過(guò)在命令中包含!:[index]來(lái)選擇所需命令的一部分,然后插入前一個(gè)命令的索引[index]處的參數(shù)。
- linuxmi@linuxmi:~/www.linuxmi.com$ echo linuxmi linux ubuntu java python
- linuxmi linux ubuntu java python
- linuxmi@linuxmi:~/www.linuxmi.com$ echo !:1
- echo linuxmi
- linuxmi
你甚至可以用[index]-[index]來(lái)選擇范圍:
- linuxmi@linuxmi:~/www.linuxmi.com$ echo linuxmi linux ubuntu java python
- linuxmi linux ubuntu java python
- linuxmi@linuxmi:~/www.linuxmi.com$ echo !:2-3
- echo linux ubuntu
- linux ubuntu
編輯當(dāng)前行
當(dāng)你剛從歷史記錄中選擇了需要稍作更改的命令時(shí),那么這個(gè)功能特別有用。
您可以通過(guò)按ctrl + a將光標(biāo)移動(dòng)到行的開(kāi)頭,并通過(guò)按ctrl + e將光標(biāo)移動(dòng)到行的結(jié)尾(請(qǐng)記?。篹表示結(jié)尾,a表示字母的開(kāi)頭)。
此外還有:
ctrl + k 剪切光標(biāo)及其后邊的內(nèi)容;
ctrl + u 剪切光標(biāo)之前的內(nèi)容;
ctrl + y 在光標(biāo)處粘貼上兩個(gè)命令,粘貼方式和被剪切方式相同;
ctrl + c 結(jié)束正在運(yùn)行的程序或命令;
ctrl + d 結(jié)束當(dāng)前命令窗口;
ctrl + r 輸入關(guān)鍵字可彈出曾經(jīng)用過(guò)的命令;
ctrl + l 清屏;(和clear效果相同)
ctrl + x + e
如果你意識(shí)到你現(xiàn)在需要做一個(gè)更大的編輯或?qū)懸粋€(gè)非常長(zhǎng)的命令,可能帶有一些循環(huán)或一些復(fù)雜的解析邏輯,需要更多的編輯功能,你也可以切換到你的編輯器,請(qǐng)按ctrl + e + x
Vim(或Nano或VI等)就會(huì)馬上打開(kāi),并且您已經(jīng)在緩沖區(qū)中鍵入的命令已打開(kāi)。
如下圖:
使用一個(gè)命令處理多個(gè)文件
你以前應(yīng)該使用過(guò)cp或mv之類的命令來(lái)處理文件。
不過(guò)現(xiàn)在介紹的是{}參數(shù)擴(kuò)展。
通過(guò)使用{},您可以指示shell擴(kuò)展大括號(hào)中的每個(gè)值:
- linuxmi@linuxmi:~/www.linuxmi.com$ mv linuxmi.{py,sh} linux
這個(gè)命令將移動(dòng)linuxmi.py文件和linuxmi.java文件,而不用鍵入兩次linuxmi。
如下圖:
此外,你還可以使用如下的例子
以下命令將五個(gè)文件(linuxmi1.png,linuxmi2.png,linuxmi3.png 和 linuxmi4.png)復(fù)制到 linux/目錄:
- linuxmi@linuxmi:~/www.linuxmi.com$ cp linuxmi{1..4}.png linuxmi/
從歷史記錄粘貼修改后的命令
您也可以在一個(gè)步驟中完成,而不是檢索最后一個(gè)命令,然后在兩個(gè)單獨(dú)的步驟中修改它。
^x^y就是用y代替x的命令:
- linuxmi@linuxmi:~/www.linuxmi.com$ unaem -r
- Command 'unaem' not found, did you mean:
- command 'uname' from deb coreutils (8.30-3ubuntu2)
- Try: sudo apt install <deb name>
- linuxmi@linuxmi:~/www.linuxmi.com$ ^unaem^uname
- uname -r
- 5.12.0-051200-generic
總結(jié)
看了本文,你是不是覺(jué)得有更多的命令可以幫助您提高生產(chǎn)效率,以后遇到精彩的命令與技巧時(shí),我會(huì)更新本文。你也可以把這篇文章收藏起來(lái),以便將來(lái)可以參考。