工具用的好,下班回家早!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最大的特點就是透明和懸浮,它能夠懸浮在任意窗口上面。

普通Window

新建Window:Command + N
關閉Window:Command + W
全螢幕:Command + Enter, 再按一次還原
展示所有窗口:Command + Option + e
關閉窗口:Command + w

選項卡Tab

新建標籤:Command + t
關閉標籤:Command + w
切換標籤:Command + 數字 或者 Command + 左/右方向

窗格Panes

垂直分屏:Command + d
水平分屏:Command + shift + d
切換窗格:Command + Option + 方向鍵 或者 Command + 左右中括弧

02 即時回放

除了窗口劃分,Term2的另一殺手鐧就是回放。不僅可以查看剪切板的歷史記錄,還能像影片一樣回放窗口內的歷史記錄!

歷史剪切板

對於普通文本編輯器來說,每次複製後都會覆蓋之前的剪切板,非常不好用。而iTerm2提供了和IDEA一樣查看歷史剪切板功能,對於筆者這種CV工程師來說是相當友好了!

快捷鍵:Command + Shift + h

歷史命令提示

命令提示,能夠提示最近輸入的內容,以及常用的命令;需要注意的是,這裡僅僅會輸入過的內容,當然iTerm也有命令補全插件,後面會進行介紹。

快捷鍵:Command + ;

當然除了歷史命令提示之外,也可以使用系統支援的方式來搜索和查看歷史命令。

上一條命令:Ctrl + p(previous) 或 向上方向鍵
下一條命令: Ctrl + n(next) 或 向下方向鍵
搜索歷史命令:ctrl + r

即時回放

非常有意思的功能,像錄屏一樣,記錄過去一段時間內窗口顯示的內容。

快捷鍵:Command + Option + b


前進/後退:左右箭頭/滑鼠拖動進度條**
退出回放:esc

03 快捷功能

智慧複製

在item中選中即複製,被選擇的文本會自動保存在剪切板中。雙擊選中,三擊選中整行,四擊智慧選擇,可以智慧的選中你想要的數據,如網址,郵箱,括弧或引號中的數據等。

同樣也支援快速粘貼,滑鼠選中複製後,可以通過滑鼠中鍵或者Command+v進行粘貼。同時,選中後也可以通過拖拽實現快速的複製和粘貼。

使用Command+f即可完成搜索,搜索後,通過Tab 或者 Tab + Shift可向右或向左擴大選中範圍,完成複製。

Command+f

妙用Command

Command既可以和其他按鍵組合成快捷鍵,也可以搭配滑鼠實現一些快捷功能。只需要按下Command在搭配一下操作即可。

  • 點擊url,調用默認瀏覽器訪問該網址

  • 點擊文件,調用默認程式打開文件。如果選中的是 文件名:數字,且默認文本編輯器是Mac vim 將會直接打開到這一行。

  • 點擊文件夾,在Finder中打開該文件夾

  • 配合Optional鍵,使用滑鼠可以選擇矩形區域內容

常用快捷鍵

這些快捷鍵並非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命令直接登錄遠程伺服器。

它支援密碼從命令行,文件,環境變數中讀取。三種用法如下:

# 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]

需要注意的是,為了防止密碼先是在螢幕上,一般使用密碼文件和環境變數的方式登陸。

expect腳本

工作中通常不能直接連線上伺服器或資料庫,而是需要先登陸跳板機,再通過跳板機連接線上伺服器/資料庫。這些就可以通過expect腳本來解決。

expect 是用來進行自動化控制和測試的工具,主要是用來和ssh/talnet/ftp等這些互動式軟體進行自動交互,比如遠程自動輸入密碼,執行腳本等。

expect的大致原理就是,首先spawn我們要執行的命令A,然後設置一個或多個預期命令A會輸出的結果,根據設置匹配的結果選擇接下來執行的分支,然後通過send命令執行後續命令,模擬鍵盤輸入。

假如我們要實現自動登錄線上資料庫,並查看所有數據表。具體步驟可以分為以下幾步:

  1. 登陸跳板機
  2. 通過跳板機登陸線上資料庫
  3. 選擇database,然後執行 show tables 命令

以下是筆者提供一個簡單的腳本程式模版:

#!/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中配置腳本文件和執行參數

/Users/xxx/ssh_login.exp mysql [email protected]:3456  資料庫密碼 use dbzz_zzpayaccount

1

執行配置文件,效果圖:

05 等你探索

iTerm2支援很多自定義的個性化配置,還有有趣且實用的功能等著你去探索。如果你想讓你的iTerm2外觀變得炫酷的,更加極客。不妨看看這裡//www.jianshu.com/p/7de00c73a2bb,以下是筆者修改後的效果圖:

篇幅有限,像密碼管理器輸入(命令)廣播等實用的功能還有很多,這裡就不一一列舉。據說每個程式設計師都有自己的一套葵花寶典,歡迎各位同學在留言區把你最順手的工具分享給大家!

Tags: