Tmux 与 Byobu:终端中的窗口管理
本页目录
今天试用了一下 tmux,发现简直是神器!以前还傻傻不停开窗口,现在一个窗口就可以都搞定啦!
更新记录
- 2016.03.30: 初稿
Tmux 简单来说就是终端里的『窗口管理器』,如果我使用终端登录到远程主机并运行前台程序,那么这个窗口等于就被占用了,想要看一下 CPU 的使用率,就得再连接一次。但是如果在远程主机上运行 tmux,那么就可以开启多个控制台(类似于窗口),相当高效,比方说可以像下面这样:

需要注意的是,这里是在我本地使用 tmux,最好在远程主机也安装 tmux,这样就只需要连接一次。
Hello World
前面提到的窗口管理只是 tmux 功能的一小部分,另一个很有用的功能就是,连接到远程主机之后,断开连接可能导致前台任务随终端挂断而退出,但是使用 tmux 可以在断开之后继续工作,下次登录可以查看。其他的功能还有:
- 窗口切换,每个窗口里还可以分割面板
- 配置方便,可以使用脚本
- 通过前缀键访问快捷键
- 复制粘贴缓冲区
安装的话也很简单,在 mac 下直接 brew install tmux(前提需要安装 homebrew),ubuntu 下则直接 sudo apt-get install tmux
在终端中输入 tmux 就可以打开一个新的 tmux session,常用快捷键先按默认前缀 Ctrl-b,放开后再按后续键;这不是持续的命令模式。也可以直接运行 tmux 子命令。
基本操作
信息查询
tmux list-keys列出所有可以的快捷键和其运行的 tmux 命令tmux list-commands列出所有的 tmux 命令及其参数tmux list-sessions、tmux list-windows、tmux list-panes分别列出会话、窗口和面板。
窗口控制
先来看看在 tmux 之外如何进行控制
- session 会话:session是一个特定的终端组合。输入tmux就可以打开一个新的session
tmux new -s session_name创建一个叫做session_name的 tmux sessiontmux attach -t session_name重新开启叫做session_name的 tmux sessiontmux switch -t session_name转换到叫做session_name的 tmux sessiontmux list-sessions/tmux ls列出现有的所有 sessiontmux detach离开当前开启的 sessiontmux kill-server关闭所有 session
- window 窗口:session 中可以有不同的 window(但是同时只能看到一个 window)
tmux new-window创建一个新的 windowtmux list-windowstmux select-window -t :2转到当前会话编号为 2 的窗口tmux rename-window重命名当前 window
- pane 面板:window 中可以有不同的 pane(可以把 window 分成不同的部分)
tmux split-window将 window 上下分成两个 panetmux split-window -h将 window 左右分成两个 panetmux swap-pane -U/tmux swap-pane -D与前一个或后一个 pane 交换tmux select-pane -L(也可用-R、-U、-D) 在指定的方向选择下一个 pane
更常用的是在 tmux 中直接通过默认前缀 ctrl + b 之后输入对应命令来操作,具体如下(这里只列出输入默认前缀之后需要输入的操作):
基本操作
?列出所有快捷键;按q返回d脱离当前会话,可暂时返回Shell界面s选择并切换会话;在同时开启了多个会话时使用D选择要脱离的客户端:进入命令行模式;此时可输入支持的命令,例如kill-server关闭所有tmux会话[进入复制模式;选取和复制按键取决于mode-keys,可通过tmux list-keys -T copy-mode或copy-mode-vi查询]粘贴 tmux 缓冲区内容~列出提示信息缓存;其中包含了之前tmux返回的各种提示信息t显示当前的时间ctrl + z挂起当前会话
窗口操作
c创建新窗口&关闭当前窗口[0-9]数字键切换到指定窗口p切换至上一窗口n切换至下一窗口l前后窗口间互相切换w通过窗口列表切换窗口,重命名当前窗口,便于识别.修改当前窗口编号,相当于重新排序f在所有窗口中查找关键词,便于窗口多了切换
面板操作
"将当前面板上下分屏(下面配置另加-)%将当前面板左右分屏(下面配置另加|)x关闭当前分屏!将当前面板置于新窗口,即新建一个窗口,其中仅包含当前面板ctrl+方向键以1个单元格为单位移动边缘以调整当前面板大小alt+方向键以5个单元格为单位移动边缘以调整当前面板大小q显示面板编号o选择当前窗口中下一个面板方向键移动光标选择对应面板{向前置换当前面板}向后置换当前面板alt+o逆时针旋转当前窗口的面板ctrl+o顺时针旋转当前窗口的面板z最大化当前所在面板page up向上滚动屏幕,q 退出
因为 iTerm2 的支持,很多切换的操作可以直接用鼠标进行,非常方便。具体大家可以自己尝试一下。
配置
我们可以先进行一些简单的配置,修改 ~/.tmux.conf 即可,让整个使用更方便。
set -g mouse on
set -g history-limit 10000
set -g base-index 1
setw -g pane-base-index 1
bind | split-window -h
bind - split-window -v
bind r source-file ~/.tmux.conf \; display-message "Configuration Reloaded!"
set -g status-style 'bg=colour235,fg=colour136'
set -g status-left '#S '
set -g status-right '%m-%d %H:%M'
配置修改后可运行 tmux source-file ~/.tmux.conf。旧稿中分开的颜色和属性选项已合并为 style 写法;没有保留覆盖默认 q 的关闭面板绑定。
参考链接
Byobu:另一种操作习惯
以下体验来自 2016 年 9 月的补充笔记。具体键位还会受到后端和终端配置影响,以帮助界面为准。
如果你觉得 tmux 或者 screen 的快捷键设置反人类,那么 Byobu 就是一个让你重新热爱终端的理由。
作为一个黄金分段的 tmux 选手,在背熟了各种快捷键之后,就形成了一种惰性,懒得尝试新工具了。但是 byobu 绝对是一个值得尝试的『神器』,可以认为是 tmux 加上了一个靠谱的产品经理,各种功能和界面的设计都友好了很多,接下来就简要来说说如何使用。
按目标系统的软件包文档安装 Byobu,然后运行 byobu。不要为了启动 Byobu 而执行 tmux kill-server,它会终止现有 tmux 会话和其中的任务。
简介
我们先来简单了解一下 Byobu 的界面,命令行的部分和正常的终端没任何差别,主要的变化是下面的状态栏,集成了窗口管理和系统重要信息显示等功能。比如说:启动时间、系统负载、核心数目、核心频率、内存大小、内存占用率、日期时间等等(这些都可以配置,具体参考文档)
操作
如果是纯新手,那么上来先按一下 F9,就会进入 Byobu 的配置界面,这里包括了快速帮助和基本的配置调整
我们先跟着快速入门指南来学习一下基本的操作(这里只列出最常用的,具体的大家可以自己查阅):
Shift-F1在一个新窗口中显示帮助。有什么操作忘记的话,这是最快捷的方法F2创建一个新窗口。跟 F2 相关的操作都是跟界面相关的(其中 Session 部分因为不太直观,这里不介绍)Shift-F2水平切分窗口Ctrl-F2垂直切分窗口
F3/F4用来切换窗口。Alt-Left/Right切换窗口Shift-Left/Right/Up/Down在切分的窗口间切换Shift-F3/F4在切分的窗口间切换
F5重载 profile,刷新数据F6脱离会话,后台任务继续运行,但是在 Mac 上键盘是冲突的F7进入滚动模式,用来查看历史记录F8给当前的窗口重命名,方便以后辨认F9启动 byobu 配置窗口Ctrl-F9输入命令,并且在所有的窗口中执行Shift-F9输入命令,并且在所有的切分面板中执行
总结
就我个人的使用体验来说,byobu 在 tmux 的基础上把一些常用操作的逻辑和按键进行了优化,比方说窗口切换就从原来的两组按键变成了一个。不过工具这个东西,还是要按照个人喜好,见仁见智了,不过更多选择更多欢笑,至少 byobu 好看呀。
参考链接
相关文章
- Linux 实战:归档、磁盘与文本命令2016-09-28
- Linux 服务器检查指南2016-09-28
- Shell 入门指南2016-08-02
- Crontab 指南:周期任务与执行环境2016-07-26