介绍
背景
有时候, 你正在愉快的coding. 突然产品过来跟你沟通需求, 你离开了你的vim
, 跟他扯淡扯了一个小时, 等你回来, WTF! ssh
自动断开了. 或者你必须离开工位, 把你的电脑锁屏,等你回来你的iterm2
上面所有的服务器连接全都这样了, 每一次你都要重新连接一遍,是不是很闹心.
tmux
是一款终端复用命令行工具,一般用于 Terminal 的窗口管理。在 macOS 下,使用 iTerm2
能应付绝大多数需求。
你可以建立多个标签页, 每个标签页又可以分离出若干个窗格. 但是它解决不了前面所说的问题. 超时断开的问题.
tmux可以在终端重启之后通过命令行恢复上次的 session, 而其他的终端软件不行.
tmux设计非常简单优雅, 一切可以通过快捷键(默认是ctrl+b)再加上一个键来触发. 熟悉之后如行云流水.逼格很高, 又解决了效率问题.
安装
(方法一)手动安装和配置
mac安装
brew install tmux
centos安装
不要直接yum install tmux这样安装的是1.8很低的版本,不支持鼠标操作。 要安装最新版
sudo yum install http://galaxy4.net/repo/galaxy4-release-7-current.noarch.rpm
sudo yum install tmux
linux上非root用户离线安装
下载源码包
wget https://github.com/tmux/tmux/releases/download/2.2/tmux-2.2.tar.gz
wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
wget http://ftp.gnu.org/gnu/ncurses/ncurses-6.0.tar.gz
解压
tar -zxvf libevent-2.0.22-stable.tar.gz
tar -zxvf ncurses-6.0.tar.gz
tar -zxvf tmux-2.2.tar.gz
安装
#libevent
cd libevent-2.0.22-stable
./configure --prefix=$HOME/.local --disable-shared
make
make install
cd ..
#ncurses
cd ncurses-6.0
./configure --prefix=$HOME/.local
make
make install
cd ..
#tmux
cd tmux-2.2
./configure CFLAGS="-I$HOME/.local/include -I$HOME/.local/include/ncurses" LDFLAGS="-L$HOME/.local/lib -L$HOME/.local/include/ncurses -L$HOME/.local/include" --prefix=$HOME/.local
make
cp tmux $HOME/.local/bin
cd ..
配置环境变量
#环境变量设置
#将下面的语句添加到.bashrc中
export PATH="$HOME/.local/bin:$PATH"
#重载环境
source .bashrc
配置
配置文件~/.tmux.conf
set -g allow-rename off
setw -g mouse on
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-sidebar'
run '~/.tmux/plugins/tpm/tpm'
安装插件管理器
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
如果特殊时期访问不了,可以换gitee的
git clone https://gitee.com/guanvi/tpm ~/.tmux/plugins/tpm
(方法二)自动安装和配置
运行下面的自动安装配置脚本
sudo yum install -y http://galaxy4.net/repo/galaxy4-release-7-current.noarch.rpm
sudo yum install -y tmux
cat > /root/.tmux.conf <<EOF
set -g allow-rename off
setw -g mouse on
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
# 文件目录树
# 切换到侧栏的目录树: <prefix+Tab>
# 光标移动到侧边栏上: <prefix+Backspace>
set -g @plugin 'tmux-plugins/tmux-sidebar'
run '~/.tmux/plugins/tpm/tpm'
EOF
yum install -y git
git clone https://gitee.com/guanvi/tpm ~/.tmux/plugins/tpm
tmux安装插件
上面的手动安装配置之后需要安装插件,自动安装配置运行之后也需要安装插件 进入 Tmux 后加载上述配置,并安装插件:
:source-file ~/.tmux.conf
<prefix> + I
I
是 Install 的简写,用来安装前述 @plugin
声明的插件。安装成功后你会看到 Tmux 的成功提示。
使用介绍
快捷键
一般情况下 tmux 中所有的快捷键都需要和前缀快捷键 ⌃b
来组合使用(注:⌃ 为 Mac 的 control 键)
tmux把所有操作分作三个概念session window pane
pane操作
pane就是同一个标签页下面的不同的窗格
-
%
左右平分出两个窗格 -
"
上下平分出两个窗格 -
x
关闭当前窗格 -
{
当前窗格前移 -
}
当前窗格后移 -
;
选择上次使用的窗格 -
o
选择下一个窗格,也可以使用上下左右方向键来选择 -
space
切换窗格布局,tmux 内置了五种窗格布局,也可以通过⌥1
至⌥5
来切换 -
z
最大化当前窗格,再次执行可恢复原来大小 -
q
显示所有窗格的序号,在序号出现期间按下对应的数字,即可跳转至对应的窗格如图所示, 在一个窗口下划分出了多个窗格
window操作
tmux 除了窗格以外,还有窗口(window) 的概念。依次使用以下快捷键来熟悉 tmux 的窗口操作:
c
新建窗口,此时当前窗口会切换至新窗口,不影响原有窗口的状态p
切换至上一窗口n
切换至下一窗口w
窗口列表选择,注意 macOS 下使用⌃p
和⌃n
进行上下选择&
关闭当前窗口,
重命名窗口,可以使用中文,重命名后能在 tmux 状态栏更快速的识别窗口 id0
切换至 0 号窗口,使用其他数字 id 切换至对应窗口f
根据窗口名搜索选择窗口,可模糊匹配
会话操作
如果运行了多次 tmux
命令则会开启多个 tmux 会话(session)。在 tmux 会话中,使用前缀快捷键 ⌃b
配合以下快捷键可操作会话:
$
重命名当前会话s
选择会话列表d
detach 当前会话,运行后将会退出 tmux 进程,返回至 shell 主进程
在 shell 主进程下运行以下命令可以操作 tmux 会话:
tmux new -s foo # 新建名称为 foo 的会话
tmux ls # 列出所有 tmux 会话
tmux a # 恢复至上一次的会话
tmux a -t foo # 恢复名称为 foo 的会话,会话默认名称为数字
tmux kill-session -t foo # 删除名称为 foo 的会话
tmux kill-server # 删除所有的会话
最佳实践
-
mac本地: tmux创建并打开一个新的tmux session. 然后进入经常进入的文件夹, 以文件夹名字命名window, 保存多个window. 如iblog文件夹, 进入之后
^b + ,
重命名为iblog. 然后^b+c
新建一个window 进入Downloads文件夹, 按^b+,
重命名为Downloads. 以后关掉终端之后直接按tmux a
直接进入之前的环境 -
tmux默认在进入一个文件夹之后会自动重新命名window. 为了防止这个行为可以在
.tmux.conf
当中加入set allow-rename off
.然后再命令行中执行tmux source-file ~/.tmux.conf
来让配置文件生效. 这样就不会在自动重命名window了.或者可以在tmux窗口下按:
进入命令行模式执行source-file ~/.tmux.conf
也可以. -
jump跳板机: tmux创建并打开一个新的tmux session. 然后ssh连接对应的服务器, 使用
^b+,
重命名为服务器的简称,使用^b+c
新建window, 再做用样的操作即可. 可以通过^b + $
重命名session为server
, 以后也是通过tmux a
直接进入环境mac本地:
跳板机:
-
切换window用
^b + 数字
, 使用多window比多pane好, 因为好复制. 想在所有window中切换或者查看有哪些用^b + w
, 关闭当前window用^b + &
-
如果需要用pane, 一般用
^b + %
左右分, 用^b + "
上下分,^b + x
关闭当前窗格.^b + o
切换窗格,^b + z
最大化窗格和恢复窗格. -
还有一个问题, 就是在tmux下默认鼠标滚轮滚动不再是屏幕滚动而是历史命令切换. 解决办法
^b + :
然后输入set-window-option -g mouse on
, 如果不想每次都是用可以写到配置文件`.tmux.conf
想在本地mac上运行, 但每次tmux server
自动关闭,想恢复
保存和恢复
安装完成后,在 Tmux 中可以随时保存状态,快捷键:
<prefix> Ctrl+s
下次打开 Tmux 后可以一键恢复:
<prefix> Ctrl+r
这样所有的 Session,Window,Pane 都会恢复到上次保存的状态,关键在于关机前一定要记住保存。
使用后果
想要盒上mac的盖子? 想要锁屏? 随便! 重新解锁之后, ssh jump 登录到跳板机, 执行tmux a
之后即可回到你之前的工作状态. 我连接了所有的服务器, 保存成了不同的window. 这样可以一直在跳板机上一直连着, 再也不用重新连接登录了.