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