概览

Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具。

安装

yum install tmux
如无法在线安装,可手动下载包进行离线安装
https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/tmux-1.8-4.el7.x86_64.rpm
yum install ./tmux-1.8-4.el7.x86_64.rpm

rpm -ql tmux

快速使用

场景假设:比如我们需要执行一条命令,清理docker缓存镜像docker system prune,这种命令执行前我们已经知道需要执行很久,可能是几个小时,也可能是几天,而且这种命令是挂在前台执行的,因此我们需要确保即使终端窗口关掉,服务也不会停止运行

在命令敲tmux进入tmux模拟终端,如下图

在这里插入图片描述

最下面有一条绿色的标志带,清楚的告诉我们当前处在tmux窗口里,如果我们在开一个窗口ps aux | grep tmux也可以看到有相关tmux进程正在执行

我们使用 tail -F /tmp/tmp.txt 来模拟一个在前台执行的并且需要很久时间的命令,如下图
在这里插入图片描述

此时我们不能去CTRL+C或者说关掉窗口,那样当前执行的程序就退出了,我们需要用tmux提供的退出tmux窗口的方法,即

Ctrl+b d

这个命令跟vim一些操作逻辑相似,输入的过程中不会有任何提示,先按CTRL+b,再按d,即可(都是小写字母),操作完成之后退出到原本的shell终端

程序还在后台执行着,可以看到这种操作用英文描述是detached,docker里有attach的操作,功能都类似,简单理解就是窗口的最小化和最大化,程序本身正常运行无影响

过了一段时间,我们想看看被我们放到后台(也就是最小化)的tmux里面的程序执行的如何了,我们可以使用

tmux a

重新进去

查看帮助

Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b,即先按下Ctrl+b,快捷键才会生效

Ctrl+b ?  退出帮助是q
man tmux
tmux --help

最简操作流程

1. tmux 创建会话,会话编号是0
2. 执行需要长时间运行在前台的命令(不需要nohup、不需要在最后加&)
3. CTRL+b d 退出会话
4. tmux a 进入会话查看执行效果(进入上一个刚创建的会话)

如果我们只用一个会话(这也是最常见的需求),上面的步骤就已经完全足够了

如果我们需要用到多个会话,可以在创建会话和进入会话的时候加入名称

tmux new -s <session-name>    创建会话
tmux attach -t <session-name> 进入会话

演示

tmux new -s abc

[root@10-222-32-122 ~]# tmux ls
0: 1 windows (created Wed Nov 18 12:02:35 2020) [204x53]
abc: 1 windows (created Wed Nov 18 16:10:49 2020) [204x53]

tmux attach -t abc

会话管理

第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。

tmux ls  查看当前所有的 Tmux 会话
tmux attach -t 0  进入会0 (或者 tmux a)
exit 退出当前会话
tmux new -s <session-name> 新建会话
tmux attach -t <session-name> 进入会话

tmux 对比 nohup

  • nohup 和 tmux 都能实现一个需要长时间执行的命令稳妥放后台执行,不会因为窗口关闭什么的导致程序停止
  • nohup 更适合用来跑一个长期的服务,比如kafka服务放后台执行 (当然管理后台服务还可以用supervisor)
  • tmux 比较适合明确知道这条命令不需要当成服务来跑,可能是跑几个小时就停止,或者我们自己的测试服务
  • nohup 启动的服务如果想把它关掉,需要记住pid,或者关键的信息用ps命令过滤,然后kill,这点比tmux麻烦
  • nohup 想要知道程序是否执行完毕,以及是否执行成功,只能去看日志
  • tmux学习成本比nohup略微高点

nohup 一般的使用方式是 nohup linux-command &> /tmp/tmp.log &

注意事项

如果执行的程序有大量输出,不要输出到屏幕上,放到文件里

参考连接

http://www.ruanyifeng.com/blog/2019/10/tmux.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐