1. 程式人生 > >工具用的好,下班回家早!5分鐘玩轉iTerm2!

工具用的好,下班回家早!5分鐘玩轉iTerm2!

1. **同時開啟多個終端視窗,來回切換太麻煩!** 2. **能不能像IDEA一樣,能夠檢視歷史貼上記錄?** 3. **有沒有辦法一鍵登陸伺服器?** 工欲善其事,必先利其器!無論工作還是學習,選擇好用的工具真的太重要了。今天就給大家介紹一下筆者感覺相見恨晚的工具iTerm2,如果讓我說日常開發中好用的工具有哪些,iTerm2必須擁有姓名。 作為經常和Terminal打交道的工程師來說,對於自帶的Terminal來說,Windows的命令列最難用,筆者一般使用XShell。入坑Mac後發現大家都在用iTerm2,半年下來感受只有兩個字:真香! # 01 視窗管理 視窗,當然是想怎麼分就怎麼分!和Mac原生的Terminal一個關鍵的區別就是iTerm2支援任意分割和建立視窗。 ## 熱鍵Window 首先,你可以設定一個開啟iTerm視窗的快捷鍵,iTerm2->Perferences->Kes->Hotkey,這樣就可以在開啟時快人一步! 如果已經打開了iTem2應用,就可以通過快捷鍵一鍵開啟和隱藏。預設的Hotkey Window最大的特點就是透明和懸浮,它能夠懸浮在任意視窗上面。 ![](https://source.mycookies.cn/354bed0e0f48d9e923a014349657b668.png) ## 普通Window ![](https://source.mycookies.cn/35ee24bda11b4265badfcab6e153879f.png) 新建Window:**Command + N** 關閉Window:**Command + W** 全屏:**Command + Enter**, 再按一次還原 展示所有視窗:**Command + Option + e** 關閉視窗:**Command + w** ## 選項卡Tab ![](https://source.mycookies.cn/43f1e257083f1243e18f8ccbe7650593.png) 新建標籤:**Command + t** 關閉標籤:**Command + w** 切換標籤:**Command + 數字** 或者 **Command + 左/右方向** ## 窗格Panes ![](https://source.mycookies.cn/b71b5653846859b81ec06d0469c25654.png) 垂直分屏:**Command + d** 水平分屏:**Command + shift + d** 切換窗格:**Command + Option + 方向鍵** 或者 **Command + 左右中括號** # 02 即時回放 除了視窗劃分,Term2的另一殺手鐗就是**回放**。不僅可以檢視剪下板的歷史記錄,還能像視訊一樣回放視窗內的歷史記錄! ## 歷史剪下板 對於普通文字編輯器來說,每次複製後都會覆蓋之前的剪下板,非常不好用。而iTerm2提供了和IDEA一樣檢視歷史剪下板功能,對於筆者這種CV工程師來說是相當友好了! 快捷鍵**:Command + Shift + h** ![](https://source.mycookies.cn/544dc58c1a145f16da3aabea89391cef.png) ## 歷史命令提示 命令提示,能夠提示最近輸入的內容,以及常用的命令;需要注意的是,這裡僅僅會**輸入過的內容**,當然iTerm也有命令補全外掛,後面會進行介紹。 快捷鍵:**Command + ;** ![](https://source.mycookies.cn/794725b72527d959e36b970520e6ac05.png) 當然除了歷史命令提示之外,也可以使用系統支援的方式來搜尋和檢視歷史命令。 **上一條命令**:Ctrl + p(previous) 或 向上方向鍵 **下一條命令**: Ctrl + n(next) 或 向下方向鍵 **搜尋歷史命令**:ctrl + r ![](https://source.mycookies.cn/d08c79619675c82107dcd023233537db.gif) ## 即時回放 非常有意思的功能,像錄屏一樣,記錄過去一段時間內視窗顯示的內容。 快捷鍵:**Command + Option + b** ![](https://source.mycookies.cn/66ce672e31173e656734dab98343f4b0.gif) **前進/後退**:左右箭頭/滑鼠拖動進度條** **退出回放**:esc # 03 快捷功能 ## 智慧複製 在item中**選中即複製**,被選擇的文字會自動儲存在剪下板中。雙擊選中,三擊選中整行,四擊智慧選擇,可以智慧的選中你想要的資料,如網址,郵箱,括號或引號中的資料等。 同樣也支援快速貼上,滑鼠選中複製後,可以通過**滑鼠中鍵**或者Command+v進行貼上。同時,選中後也可以通過**拖拽**實現快速的複製和貼上。 ![](https://source.mycookies.cn/9609061c7ca9f1486347c2ebc0db70e1.gif) 使用**Command+f**即可完成搜尋,搜尋後,通過**Tab** 或者 **Tab + Shift**可向右或向左擴大選中範圍,完成複製。 ![Command+f](https://source.mycookies.cn/4b8158d203aac6742d9952dd014e049d.gif) ## 妙用Command Command既可以和其他按鍵組合成快捷鍵,也可以搭配滑鼠實現一些快捷功能。只需要**按下Command**在搭配一下操作即可。 * **點選url**,呼叫預設瀏覽器訪問該網址 * **點選檔案**,呼叫預設程式開啟檔案。如果選中的是 **檔名:數字**,且預設文字編輯器是Mac vim 將會直接開啟到這一行。 * **點選資料夾**,在Finder中開啟該資料夾 * 配合**Optional**鍵,使用滑鼠可以選擇**矩形區域**內容 ![](https://source.mycookies.cn/8beacd6202e4c5d4c150b7210a83a046.gif) ## 常用快捷鍵 這些快捷鍵並非iTem2特有,也是非常基礎的快捷鍵。當然最重要的是它們非常實用,幾乎每天都會用到。 **清屏**:Command + r 或者 ctrl + l **清除當前行**:Ctrl + u **刪除當前游標的字元**:ctrl + d **刪除游標之前的字元**:ctrl + h **刪除游標之前的單詞**:ctrl + w **刪除到文字末尾**:ctrl + k **交換游標處文字**:ctrl + t **游標移動導行首**:Ctrl + a **游標移動到行位**:Ctrl + e # 04 一鍵登陸 對於快捷登陸這種基本操作,iTerm2當然也能很好支援。只需要在將指令碼配置到iTerm2->Preferences->Profiles->General中的Command輸入框中,既可以是單行命令,也可以是Shell指令碼檔案。 ## ssh + sshpass ssh命令一般用來遠端登陸Linux主機,不過需要兩段式登陸,先輸ssh連線命令,當伺服器響應後再輸入密碼。 要把兩段式登陸合併成一步到位,只需要安裝sshpass工具即可,sshpass用於非互動的ssh密碼驗證,允許你指定明文密碼,然後配置ssh命令直接登入遠端伺服器。 它支援密碼從命令列,檔案,環境變數中讀取。三種用法如下: ```shell # 1. 密碼 sshpass -p {密碼} ssh -p ${埠} {使用者名稱}@{主機IP} # 2. 密碼文字檔案 sshpass -f {密碼文字檔案} ssh -p ${埠} {使用者名稱}@{主機IP} # 3. 環境變數 # 配置環境變數 export SSHPASS='my_pass_here' echo $SSHPASS # 登陸 sshpass -e ssh [email protected] ``` ![](https://source.mycookies.cn/f96004ebed87728ecbb02e04cec13307.jpg) 需要注意的是,為了防止密碼先是在螢幕上,一般使用密碼檔案和環境變數的方式登陸。 ## expect指令碼 工作中通常不能直接連線上伺服器或資料庫,而是需要先登陸跳板機,再通過跳板機連線線上伺服器/資料庫。這些就可以通過expect指令碼來解決。 expect 是用來進行自動化控制和測試的工具,主要是用來和ssh/talnet/ftp等這些互動式軟體進行自動互動,比如遠端自動輸入密碼,執行指令碼等。 expect的大致原理就是,首先spawn我們要執行的命令A,然後設定一個或多個預期命令A會輸出的結果,根據設定匹配的結果選擇接下來執行的分支,然後通過send命令執行後續命令,模擬鍵盤輸入。 假如我們要實現自動登入線上資料庫,並檢視所有資料表。具體步驟可以分為以下幾步: > 1. 登陸跳板機 > 2. 通過跳板機登陸線上資料庫 > 3. 選擇database,然後執行 show tables 命令 以下是筆者提供一個簡單的指令碼程式模版: ```shell #!/usr/bin/expect -f # 指令碼的引數,mysql伺服器的登陸地址,密碼,以及 選擇資料庫指令 set loginCommand [lrange $argv 0 1] set passwd [lrange $argv 2 2] set script [lrange $argv 3 4] # 等待命令執行的超時時間,10s set timeout 10 # 1. 登陸跳板機 spawn ssh 使用者名稱@跳板機的host expect { # 輸入跳板機登陸密碼(第1步指令執行完後,會輸出xxx@xxx's password: 提示輸入跳板機密碼) "使用者名稱@跳板機的host's password:" {send "跳板機密碼\r"; exp_continue} # 2. 通過跳板機登陸資料庫(筆者公司的跳板機登陸完成後,會提示輸入INPUT:,提示輸入要登陸的伺服器ip) "*INPUT:" {send "$loginCommand\r"; exp_continue} # 輸入要登陸資料庫的密碼 "Enter password:" {send "$passwd\r" ; exp_continue} # 密碼輸入錯誤,退出(如果密碼輸入錯誤,提示文案中會出現ERROR字樣) "*ERROR*" interact; # 3. 輸入資料庫指令 "Welcome to the MySQL monitor*" {send "$script\r"; exp_continue} # 執行show tables指令 "Reading table information*" {send "show tables;\r"} } interact ``` Command中配置指令碼檔案和執行引數 ```shell /Users/xxx/ssh_login.exp mysql [email protected]:3456 資料庫密碼 use dbzz_zzpayaccount ``` ![1](https://source.mycookies.cn/1.png) 執行配置檔案,效果圖: ![](https://source.mycookies.cn/2a221eef6c6d8e46db95c8850b27a80b.jpg) # 05 等你探索 iTerm2支援很多自定義的個性化配置,還有有趣且實用的功能等著你去探索。如果你想讓你的iTerm2外觀變得炫酷的,更加極客。不妨看看這裡https://www.jianshu.com/p/7de00c73a2bb,以下是筆者修改後的效果圖: ![](https://source.mycookies.cn/e5824e2aee3b16ae81cc607d03a50a26.jpg) 篇幅有限,像**密碼管理器**,**輸入(命令)廣播**等實用的功能還有很多,這裡就不一一列舉。據說每個程式設計師都有自己的一套葵花寶典,歡迎各位同學在留言區把你最順手的工具分享給大家! > 看後有收穫記得點推薦哦!