一 前言
经常使用命令行的运维肯定会遇到如何防止网络中断导致正在进行从操作失败的情况,比如执行一个耗时好几个小时的操作或者方便管理窗口的需求,比如在同一个窗口边执行命令边查看程序的log 。通常我们使用screen 或者nohup的方式解决长时间执行的命令。本文介绍另一款窗口复用神器--tmux。用过tmux,大家都不想继续使用screen 了。。
其核心功能:
提供了强劲的、易于使用的命令行界面。可横向和纵向分割窗口。支持 UTF-8 编码及 256 色终端。可在多个缓冲区进行复制和粘贴。可通过交互式菜单来选择窗口、会话及客户端。支持跨窗口搜索。支持自动及手动锁定窗口。可以自由配置绑定快捷键。
二 tmux 构成
tmux(terminal multiplexer)是Linux上的终端复用神器,可从一个屏幕上管理多个终端,tmux的结构包括会话(session)、窗口(window)、窗格(pane)三部分。
三 使用
鉴于tmux的构成分三部分,tmux命令使用主要的对象是 会话(session),窗口(window)和窗格(pane)。常用的动作包含创建、关闭(退出)、重命名、连接、分离、选择。
tmux默认的快捷键前缀是Ctrl b(下文用prefix指代),按下前缀组合键后松开,再按下命令键进行快捷操作,比如使用prefix d分离会话(应该写作prefix d而不是prefix d,因为d键不需要与prefix同时按下)。
3.1 session操作
代码语言:javascript复制tmux new 创建默认名称的会话
tmux new -s mysession 创建名为mysession的会话
tmux ls 显示会话列表
tmux a 连接上一个会话
tmux a -t mysession 连接指定会话,tmux a -t 1
tmux rename -t s1 s2 重命名会话s1为s2
tmux kill-session 关闭上次打开的会话
tmux kill-session -t s1 关闭会话s1
tmux kill-session -a -t s1 关闭除s1外的所有会话
tmux kill-server 关闭所有会话
常用快捷键
prefix s 列出会话,可进行切换
prefix d 分离当前会话
prefix a -t number 其中number是 tmux ls 获取的序列号 从0 开始
3.2 window操作
代码语言:javascript复制prefix c 创建一个新窗口
prefix , 重命名当前窗口
prefix w 列出所有窗口,可进行切换
prefix n 进入下一个窗口
prefix p 进入上一个窗口
prefix l 进入之前操作的窗口
prefix 0~9 选择编号0~9对应的窗口
prefix . 修改当前窗口索引编号
prefix ' 切换至指定编号(可大于9)的窗口
prefix f 根据显示的内容搜索窗格
prefix & 关闭当前窗口
在 session 1 中 使用 crtl b c 创建三个窗口。
3.4 窗格管理
代码语言:javascript复制prefix % 水平方向创建窗格
prefix " 垂直方向创建窗格
prefix Up|Down|Left|Right 根据箭头方向切换窗格
prefix q 显示窗格编号
prefix o 顺时针切换窗格
prefix } 与下一个窗格交换位置
prefix { 与上一个窗格交换位置
prefix x 关闭当前窗格
prefix space(空格键) 重新排列当前窗口下的所有窗格
prefix ! 将当前窗格置于新窗口
prefix Ctrl o 逆时针旋转当前窗口的窗格
prefix t 在当前窗格显示时间
prefix z 放大当前窗格(再次按下将还原)
prefix i 显示当前窗格信息
3.3 自定义 tmux 适配
一般安装完tmux ,可以通过 ~/.tmux.conf
来调整tmux 的配置,获取最佳的用户体验。推荐一个mac OS 的配置 https://github.com/gpakosz/.tmux
小结
本文算是一篇how to 文档,大家有兴趣的 可以进一步探索 tmux 的各种功能,比如结合鼠标提高自己的工作效率。