相信做过 Linux 服务运维的同学,都用 scp 进行过服务器间的大文件网络传输。一般这需要很长的时间,这期间,如果工作电脑出现断网或者断电的情况,则会导致远程连接工具无法与服务器通信,从而使得它所控制的数据传输也因此中断。
情景再现:
localhost:~ roc$ ls -hl
total 36419584
-rw------- 1 roc staff 17G 1 20 11:06 win7.vdi
localhost:~ roc$ scp -P 22000 win7.vdi [email protected]:/home/roc
win7.vdi 0% 7296KB 800.3KB/s 6:19:05
一个 17GB 的大文件,刚刚开始传输,预估耗时 6 小时 19 分钟,谁能保证中间不出现关机和断电的情况呢。
有些同学说可以用 nohup 来解决啊,是的,这是一个办法,可是使用 nohup 的问题在于如果同时传输的任务众多,则最后你自己可能都分不清哪个任务对应哪个传输了,何况 nohup 还会留下 nohup.out 这么一个临时文件在那里。
还有同学说,即使中断了,也可以断点续传啊。可惜的是,scp 并不支持断点续传。如果改用 rsync 倒是可以,可惜 rsync 参数用起来很是复杂,谁能保证每位运维工程师都能熟练掌握那么多复杂的参数呢?这个时候,请试一试 tmux 吧!
和大文件数据传输情况类似,一些大型的开发项目的代码编译过程,往往也需要很长的时间,短则几分钟,长则一通宵。对于一通宵的编译来说,这要是中间出现断网断电,那就相当悲剧了。整个项目进展就又要向后推迟至少一天。这个时候,我们向你推荐 tmux!
作为运维工程师,一定有过在众多窗口间切换,查看各种服务器上的信息和状态的情况,这个时候,如果没有一款好用的窗口管理软件,过不了多久,你就会晕头转向了。就像图 2 所示的这种情况。
有时候为了进行多文件内容对比,如果没有一款很好用的分屏管理工具,那么我们只好创建多个终端,然后手动调整它们的大小和位置,如图 3 所示。
$ sudo apt-get install tmux
打开tmux 运行该命令会新建一个窗口为0,此时窗格就是窗口的默认会话,会话名默认为0,也可以自定义会话名字,这个后面会说到。
$ tmux
按下Ctrl+d或者显式输入exit命令,就可以退出 Tmux 窗口
首先,如果你有一个已有的 tmux 配置文件,请对其进行备份。tmux 的配置文件是 ~/.tmux.conf
特别是要配置鼠标操作,这部分很重要不然记不住切换的一些命令
//18.04配置
#below reset tmux prefix command key
set -g prefix C-x
unbind C-b
bind C-x send-prefix
#set swap pane key
bind-key k select-pane -U
bind-key j select-pane -D
bind-key h select-pane -L
bind-key l select-pane -R
set-option -g mouse on
在14.04上会出现不能用出现鼠标不能选取窗口或则回滚,故将
set-option -g mouse on
替换为
setw -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on
为了使自身的快捷键和其他软件的快捷键互不干扰,Tmux 提供了一个快捷键前缀。当想要使用快捷键时,需要先按下快捷键前缀,然后再按下快捷键。Tmux 所使用的快捷键前缀默认是组合键 Ctrl-b(同时按下 Ctrl 键和 b 键)。例如,假如你想通过快捷键列出当前 Tmux 中的会话(对应的快捷键是 s),那么你只需要做以下几步:
• 按下组合键 Ctrl-b (Tmux 快捷键前缀)
• 放开组合键 Ctrl-b
• 按下 s 键
新建 session
新建一个 session ,在终端输入一个 tmux 命令即可:
tmux
上面的命令会创建一个 session ,默认是通过数字编号来命令的,有时候我们需要明确的知道我们的 session 的名字,方便我们快速进入该 session ,我们可以使用如下的命令:
tmux new -s
例如新建一个名称是 keenon 的session :
tmux new -s keenon
离开 session
有时候我们需要离开终端,操作其他的任务,需要离开该任务,但是又想该任务继续在后台执行,这时候我们需要在 tmux 的任何一个窗格中输入如下命令:
tmux detach
也可以使用快捷键
ctrl + b d
这里解释一下该快捷键,上面已经提到过快捷键。 tmux 离开 session 的快捷键是 d ,但是在 tmux 当中任何快捷键都需要搭配 tmux 的前缀按键 ctrl + b 来唤醒,所以改快捷键的操作是先按 ctrl +b ,紧接着按下按键 d ,这样我们便顺利的离开当前 session 了。
查看 session 列表
有时候我们可能同时操作了好几个 session, 我们可以通过如下的命令来查看我们目前操作了几个session:
tmux ls
也可以通过快捷键操作
ctrl + b s
列出所有的 session。
进入 session
离开 session 之后,有时候我们还需要对某个 session 进行操作,这时候可以通过如下的操作:
tmux attach -t
例如我的 session 名称是 keenon , 就可以通过 tmux attach -t keenon 顺利进入 session,
也可以通过 tmux a -t keenon,该命令中的 a 是 attach 的简写形式
关闭 session
如果需要关闭 session, 可以通过执行如下的命令即可:
tmux kill-session -t
例如关闭zempty 这个session :
tmux kill-session -t zempty
也可以使用快捷键 ctrl + d 来关闭当前的 session。
切换 session
执行命令,可以从当前的 session 快速切换到另一个 session:
tmux switch -t
重命名 session
tmux rename-session -t
例如: tmux rename-session -t keenon wuxi 该命令会把 keenon这个 session 重新命名为 wuxi.
也可以通过快捷键 ctrl +b $ 来重命名当前的session 。
session 总结
session 在 tmux 操作当中非常重要,希望你可以熟练的使用以上操作: 新建 session -> 离开 session -> 查看
session 列表 -> 进入 session -> 关闭 session -> 不同 session 之间的切换 -> 重命名 session。
新建 切换 关闭
输入tmux后进入到终端复用器,其会话名默认为0,依次累加。
& 关闭当前窗口
l 前后窗口间互相切换
. 修改当前窗口编号,相当于重新排序
f 在所有窗口中查找关键词
, 重命名当前窗口
w 列出所有窗口
% 水平分割窗口
" 竖直分割窗口
n 选择下一个窗口
p 选择上一个窗口
0~9 选择 0~9 对应的窗口
分屏(新建)切换 关闭
好了,至此,你已经掌握了最最基本的 tmux 使用方法了。当然,tmux 还有很多更高级的用法,但是为了方便调试,用到基本功能就足够了。
>tmux new 创建默认名称的会话(在tmux命令模式使用new命令可实现同样的功能,其他命令同理,后文不再列出tmux终端命令)
>tmux new -s mysession 创建名为mysession的会话
>tmux ls 显示会话列表
>tmux a -t mysession 连接指定会话
>tmux rename -t s1 s2 重命名会话s1为s2
>tmux kill-session 关闭上次打开的会话
>tmux kill-session -ts1 关闭会话s1
>tmux kill-session -a -t s1 关闭除s1外的所有会话 tmux
>kill-server 关闭所有会话