远程终端神器-tmux

2,353 阅读3分钟

tmux

tmux 是一个优秀的终端复用器软件。用户可以通过 tmux在一个终端内管理多个分离的会话,窗口及面板。可以同时使用多个命令行,如下图

macOS系统

安装

macOS 上使用 Homebrew 安装即可:

$ brew install tmux

使用

shell下操作 tmux 会话

tmux ls # 列出所有 tmux 会话 -->常用

tmux new -s foo # 新建名称为 foo 的会话 -->常用

tmux a # 恢复至上一次的会话 -->常用

tmux a -t foo # 恢复名称为 foo 的会话,会话默认名称为数字 -->常用

tmux kill-session -t foo # 删除名称为 foo 的会话 -->常用

tmux kill-server # 删除所有的会话 -->常用

tmux list-panes -a 列出当前session的所有窗格 -->常用

快捷键

一般情况下 tmux 中所有的快捷键都需要和前缀快捷键 ⌃b 来组合使用(注:⌃ 为 Mac 的 control 键)

会话session/server操作


$ 重命名当前会话 -->常用

d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux a能够重新进入之前的会话 -->常用

D 选择要脱离的会话;在同时开启了多个会话时使用 -->常用

s 选择并切换会话;在同时开启了多个会话时使用 -->常用

? 列出所有快捷键;按q返回

: 进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器

Ctrl+z 挂起当前会话

r 强制重绘未脱离的会话

[ 进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出 不好用,不建议

~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息

窗口window操作

tmux 除了窗格以外,还有窗口(window) 的概念。依次使用以下快捷键来熟悉 tmux 的窗口操作:

c 新建窗口,此时当前窗口会切换至新窗口,不影响原有窗口的状态 -->常用

, 重命名窗口,可以使用中文,重命名后能在 tmux 状态栏更快速的识别窗口 -->常用

<n> <n>为键盘数字,切换到第 n 个 Window. 例:0 切换至 0 号窗口,使用其他数字切换至对应窗口 -->常用

& 关闭当前窗口 -->常用

p 切换至上一窗口

n 切换至下一窗口

w 窗口列表选择,注意 macOS 下使用 ⌃p 和 ⌃n 进行上下选择

f 根据窗口名搜索选择窗口,可模糊匹配

窗格panel操作

% 左右平分出两个窗格 -->常用

" 上下平分出两个窗格 -->常用

z 最大化当前窗格,再次执行可恢复原来大小 -->常用

x 关闭当前窗格 -->常用

space 切换窗格布局,tmux 内置了五种窗格布局,也可以通过 ⌥1 至 ⌥5来切换 -->常用

{ 当前窗格前移

} 当前窗格后移

; 选择上次使用的窗格

o 选择下一个窗格,也可以使用上下左右方向键来选择

q 显示所有窗格的序号,在序号出现期间按下对应的数字,即可跳转至对应的窗格

扩展

To create a new session, The quickest way is:

ctrl-b :new -s <name>

Then ctrl-b s to interactively select and attach to the session.



If we try to create a new session while attached it will result in a nesting error

$ tmux new -s bar > sessions should be nested with care, unset $TMUX to force

To solve this we create a new detached session

$ tmux new -s bar -d

必备配置

多窗格同步执行相同命令功能

(Type your command to be executed in all panes in same window)

方法1 当前window有效
To turn on: Ctrl-b then :setw synchronize-panes

To turn off: Ctrl-b then :setw synchronize-panes off
方法2 全局有效
Actually, I bind a couple of keyboard shortcuts in ~/.tmux-conf to switch on/off panes synchronization:

bind e setw synchronize-panes on bind E setw synchronize-panes off
方法3 全局有效
Just to note, you don't need to set 2 keys, instead you can use one key to toggle synchronization option: 

bind e set-window-option synchronize-panes
配置完需要重新加载~/.tmux-conf,见下文:重新加载配置文件

开启鼠标功能

点击选择窗格/窗口,拖动窗格大小,以及拖动鼠标滚屏复制文字

tmux 默认配置中最糟糕的体验就是滚屏查看和文本复制(大家可以先试试看)。你需要先使用 ⌃b [ 快捷键进入 copy模式,然后使用翻页、字符定位来选择需要的字符,效率远没有鼠标选择来的快。因此 tmux 提供了一些个性化配置项来优化这些配置,在 shell 中编辑~/.tmux-conf 配置文件。在文件中增加以下内容:

## 开启了所有鼠标功能:点击选择窗格/窗口,拖动窗格大小,以及拖动鼠标滚屏复制文字
$ set -g mouse on
老版本

需要设置 mode-mouse, mouse-select-pane, mouse-resize-pane, mouse-select-window 等4 个选项来开启所有鼠标功能,现在只需要设置 mouse 选项了。 使用 tmux -V 可以查看当前安装的 tmux 版本,版本更新日志见 Tmux Changelog 保存后重新加载配置文件。见下文:重新加载配置文件)

重新加载配置文件

配置文件修改完成后,重新加载配置文件,三种方式:

$ tmux kill-server 重启所有 tmux 进程
$ tmux source-file ~/.tmux.conf
$ tmux 会话中使用 ⌃b进入控制台模式,输入 source-file ~/.tmux.conf

鼠标复制

tmux 下开启鼠标滚屏后,复制文本有两种方式:

方法 1:使用 ⌃b z 进入窗格全屏模式,鼠标选择文本的同时按住 option 键 ⌥,然后使用 ⌘c 进行复制;

方法 2:开启 iTerm2 「在选择时复制」选项,即可实现选择即复制

linux下使用tmux

方式一: yum install tmux

$ yum install tmux 此安装的可能不是tmux最新版本
$ tmux ls 
## 可能报下面错
## tmux failed to connect to server
$ tmux 后再tmux ls就不报错了

方式二: 安装指定的tmux版本

# Install tmux on rhel/centos 7
# install deps
yum install gcc kernel-devel make ncurses-devel

# DOWNLOAD SOURCES FOR LIBEVENT AND MAKE AND INSTALL
curl -OL https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz

tar -xvzf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
./configure --prefix=/usr/local
make
sudo make install
cd ..

# DOWNLOAD SOURCES FOR TMUX AND MAKE AND INSTALL
curl -OL https://github.com/tmux/tmux/releases/download/2.3/tmux-2.3.tar.gz
tar -xvzf tmux-2.3.tar.gz
cd tmux-2.3

LDFLAGS="-L/usr/local/lib -Wl,-rpath=/usr/local/lib" ./configure --prefix=/usr/local

make
sudo make install
cd ..

# pkill tmux
sudo killall -9 tmux

# close your terminal window (flushes cached tmux executable)
# open new shell and check tmux version
tmux -V

原味地址:远程终端神器-tmux

进阶

tmux结合alfred实现一步登录远程服务器现场,可以说绝对是神器操作,参见: 开发效率神器之alfred集成ssh+iTerm2实现一步登录服务器