tmux : 你的终端也可以很酷
经常看大佬喝着咖啡对着几个屏幕,看着每个屏幕几个窗口都在自动地滚动着不同的图案。是不是瞬间软化了?你是不是也想像大佬那样酷呢?试试tmux 吧。
https://github.com/tmux/tmux/wiki
tmux 简介
tmux 是一个终端复用器,你可以在一个屏幕上管理多个终端。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机。是BSD实现的Screen替代品,相对于Screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活、动态的进行各种布局和操作。
tmux - a very simple beginner's guide
Tmux的使用场景
- 可以某个程序在执行时一直是输出状态,需要结合nohup、&来放在后台执行,并且ctrl+c结束。这时可以打开一个Tmux窗口,在该窗口里执行这个程序,用来保证该程序一直在执行中,只要Tmux这个窗口不关闭,可以看到任务执行细节
- 公司需要备份数据库时,数据量巨大,备份两三天弄不完,这时不小心关闭了终端窗口或误操作就前功尽弃了,使用Tmux会话运行命令或任务,就不用担心这些问题。
- 下班后,你需要断开ssh或关闭电脑,将运行的命令或任务放置后台运行。
- 关闭终端,再次打开时原终端里面的任务进程依然不会中断
基本功能
- 提供了强劲的、易于使用的命令行界面。
- 可横向和纵向分割窗口。
- 窗格可以自由移动和调整大小,或直接利用四个预设布局之一。
- 支持 UTF-8 编码及 256 色终端。
- 可在多个缓冲区进行复制和粘贴。
- 可通过交互式菜单来选择窗口、会话及客户端。
- 支持跨窗口搜索。
- 支持自动及手动锁定窗口。
背完了快捷键我们来看管理tmux的关键:window与pane1:
这俩概念要注意区分,因为我们往往就是知道window,其实也可以像理解vim的窗口那样理解,vim也是可以分面的嘛。
mux uses windows and panes.
- Sessions are for an overall theme, such as work, or experimentation, or sysadmin.
- window - think of it like a tab; only one window is ever visible at a time (this guide won't address windows)
- pane - belongs to a window; you can have many of these visible at once
tmux模型下翻屏(翻页):
1)进入tmux面板后,一定要先按ctrl+b,然后松开,再按其他的组合键才生效。
2)常用到的几个组合键:
ctrl+b ? 显示快捷键帮助
ctrl+b 空格键 采用下一个内置布局,这个很有意思,在多屏时,用这个就会将多有屏幕竖着展示
ctrl+b ! 把当前窗口变为新窗口
ctrl+b " 模向分隔窗口
ctrl+b % 纵向分隔窗口
ctrl+b q 显示分隔窗口的编号
ctrl+b o 跳到下一个分隔窗口。多屏之间的切换
ctrl+b 上下键 上一个及下一个分隔窗口
ctrl+b C-方向键 调整分隔窗口大小
ctrl+b & 确认后退出当前tmux
ctrl+b [ 复制模式,即将当前屏幕移到上一个的位置上,其他所有窗口都向前移动一个。
ctrl+b c 创建新窗口
ctrl+b n 选择下一个窗口
ctrl+b l 最后使用的窗口
ctrl+b p 选择前一个窗口
ctrl+b w 以菜单方式显示及选择窗口
ctrl+b s 以菜单方式显示和选择会话。这个常用到,可以选择进入哪个tmux
ctrl+b t 显示时钟。然后按enter键后就会恢复到shell终端状态
ctrl+b d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
############## 切换window
在同一个会话的多个窗口之间可以通过如下快捷键进行切换:
ctrl+b p (previous的首字母) 切换到上一个window。
ctrl+b n (next的首字母) 切换到下一个window。
ctrl+b 0 切换到0号window,依次类推,可换成任意窗口序号
ctrl+b w (windows的首字母) 列出当前session所有window,通过上、下键切换窗口
ctrl+b l (字母L的小写)相邻的window切换
ctrl+b & 关闭当前window,会给出提示是否关闭当前窗口,按下y确认即可。当然,如果当前窗口的最后一个程序被exit掉后,窗口也会直接关闭。
############## 切换pane
ctrl+b o 依次切换当前窗口下的各个pane。
ctrl+b Up|Down|Left|Right 根据按箭方向选择切换到某个pane。
ctrl+b Space (空格键) 对当前窗口下的所有pane重新排列布局,每按一次,换一种样式。
ctrl+b z 最大化当前pane。 再按一次后恢复。
C-b pageup/pagedown
退出
C-b q
tmux的远程批量操作的shell脚本
在使用SSH或telnet远程连接服务器时,可能都遇到为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。也许nohup命令可以达到这个目的,如果程序的标准输出/标准错误是终端, nohup默认将其重定向到nohup.out文件。值得注意的是nohup命令只是使得程序忽略SIGHUP信号,还需要使用标记&把它放在后台运行。
使用tmux打开一个终端窗口,可以在窗口里执行一个长时间运行的交互式命令操作,令其一直在后台跑着,并且在按键ctrl-b-d后,可以无感知的退出窗口,
而退出后窗口不会关闭,即窗口里执行的交互命令也不会结束。这比起传统的"nohup commang & (然后按ctrl+c)"的方式要还用很多。
如何在linux终端里创建一个tmux窗口的同时直接在窗口终端里执行命令呢?
这就需要用到:
tmux send -t session_name "command" ENTER!!!
tmux的厉害之处还在与它支持批量的管理你的任务,在创建窗口的同时,可以同时在窗口终端里连续执行两个或多个命令,而不必每个窗口只执行一个任务的命令了。
tmux中的最重要的三个概念:会话,窗口,pane的使用方法涵盖了它的基本框架,足以应付大多数工作。另外tmux还有一些高级用法,例如可以个性化的配置其组合键(官方默认的ctrl+b组合键按起来不太方便可以修改,UI设置,鼠标支持,复制粘贴等)。
Tmux 使用教程
Tmux常用快捷键以及我会常到的一些问题汇总
Ubuntu Tmux 启用鼠标滚动
Tmux(-yank,-cssh,-xpanes)使用指南
tmux:打造精致与实用并存的终端
Linux终端复用神器-Tmux使用梳理
https://danielmiessler.com/study/tmux/
https://www.howtogeek.com/671422/how-to-use-tmux-on-linux-and-why-its-better-than-screen/
ssh的最佳伴侣-tmux