tmux是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件。
tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机;当然其功能远不止于此。
sudo apt-get install tmux安装完成后输入命令tmux即可打开软件,界面十分简单,类似一个下方带有状态栏的终端控制台;但根据tmux的定义,在开启了tmux服务器后,会首先创建一个会话,而这个会话则会首先创建一个窗口,其中仅包含一个面板;也就是说,这里看到的所谓终端控制台应该称作tmux的一个面板,虽然其使用方法与终端控制台完全相同。
server
|
服务器。输入tmux命令时就开启了一个服务器。
|
session
|
会话。一个服务器可以包含多个会话。
|
window
|
窗口。一个会话可以包含多个窗口。
|
panel
|
面板。一个窗口可以包含多个面板。
|
Ctrl+b
|
激活控制台;此时以下按键生效
|
|
系统操作
|
?
|
列出所有快捷键;按q返回
|
d
|
脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
|
|
D
|
选择要脱离的会话;在同时开启了多个会话时使用
|
|
Ctrl+z
|
挂起当前会话
|
|
r
|
强制重绘未脱离的会话
|
|
s
|
选择并切换会话;在同时开启了多个会话时使用
|
|
:
|
进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器
|
|
[
|
进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出
|
|
~
|
列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
|
|
窗口操作
|
c
|
创建新窗口
|
&
|
关闭当前窗口
|
|
数字键
|
切换至指定窗口
|
|
p
|
切换至上一窗口
|
|
n
|
切换至下一窗口
|
|
l
|
在前后两个窗口间互相切换
|
|
w
|
通过窗口列表切换窗口
|
|
,
|
重命名当前窗口;这样便于识别
|
|
.
|
修改当前窗口编号;相当于窗口重新排序
|
|
f
|
在所有窗口中查找指定文本
|
|
面板操作
|
”
|
将当前面板平分为上下两块
|
%
|
将当前面板平分为左右两块
|
|
x
|
关闭当前面板
|
|
!
|
将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板
|
|
Ctrl+方向键
|
以1个单元格为单位移动边缘以调整当前面板大小
|
|
Alt+方向键
|
以5个单元格为单位移动边缘以调整当前面板大小
|
|
Space
|
在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled
|
|
q
|
显示面板编号
|
|
o
|
在当前窗口中选择下一面板
|
|
方向键
|
移动光标以选择面板
|
|
{
|
向前置换当前面板
|
|
}
|
向后置换当前面板
|
|
Alt+o
|
逆时针旋转当前窗口的面板
|
|
Ctrl+o
|
顺时针旋转当前窗口的面板
|
tmux里的session,window,pane
—-
session指的是按下tmux命令后 存在的连接便是session
创建session
tmux
创建并指定session名字
tmux new -s session_name
删除session
Ctrl+b :kill-session
临时退出session
Ctrl+b d
列出session
tmux ls
进入已存在的session
tmux a -t session_name
删除所有session
Ctrl+b :kill-server
删除指定session
tmux kill-session -t session_name
—-
window在session里,可以有N个window,并且window可以在不同的session里移动
创建window
Ctrl+b +c
删除window
Ctrl+b &
下一个window
Ctrl+b n
上一个window
Ctrl+b p
重命名window
Ctrl+b ,
在多个window里搜索关键字
Ctrl+b f
在相邻的两个window里切换
Ctrl+b l
—-
pane在window里,可以有N个pane,并且pane可以在不同的window里移动、合并、拆分
创建pane
横切split pane horizontal
Ctrl+b ” (问号的上面,shift+’)
竖切split pane vertical
Ctrl+b % (shift+5)
按顺序在pane之间移动
Ctrl+b o
上下左右选择pane
Ctrl+b 方向键上下左右
调整pane的大小
Ctrl+b :resize-pane -U #向上
Ctrl+b :resize-pane -D #向下
Ctrl+b :resize-pane -L #向左
Ctrl+b :resize-pane -R #向右
在上下左右的调整里,最后的参数可以加数字 用以控制移动的大小,例如:
Ctrl+b :resize-pane -D 50
在同一个window里左右移动pane
Ctrl+b { (往左边,往上面)
Ctrl+b } (往右边,往下面)
删除pane
Ctrl+b x
更换pane排版
Ctrl+b “空格”
移动pane至window
Ctrl+b !
移动pane合并至某个window
Ctrl+b :join-pane -t $window_name
显示pane编号
Ctrl+b q
按顺序移动pane位置
Ctrl+b Ctrl+o
—-
其他:
复制模式
Ctrl+b [
空格标记复制开始,回车结束复制。
粘贴最后一个缓冲区内容
Ctrl+b ]
选择性粘贴缓冲区
Ctrl+b =
列出缓冲区目标
Ctrl+b :list-buffer
查看缓冲区内容
Ctrl+b :show-buffer
vi模式
Ctrl+b :set mode-keys vi
显示时间
Ctrl+b t
快捷键帮助
Ctrl+b ? (Ctrl+b :list-keys)
tmux内置命令帮助
Ctrl+b :list-commands
使用Tmux的最好方式是使用会话的方式,这样你就可以以你想要的方式,将任务和应用组织到不同的会话中。如果你想改变一个会话,会话里面的任何工作都无须停止或者杀掉。让我们来看看这是怎么工作的。
让我们开始一个叫做"session"的会话,并且运行top命令
- $ tmux new -s new session
- $ top
然后输入CTRL-b d从此会话脱离,想要重新连接此会话,需输入:
- $ tmux attach-session -t session
之后你会看到top操作仍然运行在重新连接的会话上。
一些管理sessions的命令:
- $ tmux list-session
- $ tmux new-session <会话名>
- $ tmux attach-session -t <会话名>
- $ tmux rename-session -t <会话名>
- $ tmux choose-session -t <会话名>
- $ tmux kill-session -t <会话名>
很多情况下,你需要在一个会话中运行多个命令,执行多个任务。我们可以在一个会话的多个窗口里组织他们。在现代的GUI终端(比如 iTerm或者Konsole),一个窗口被视为一个标签。在会话中配置了我们默认的环境之后,我们就能够在一个会话中创建许多我们需要的窗口。窗口就像运行在会话中的应用程序,当我们脱离当前会话的时候,它仍在持续,让我们来看一个例子:
- $ tmux new -s my_session
按下CTRL-b c
这将会创建一个新的窗口,然后屏幕的光标移向它。现在你就可以在新窗口下运行你的新应用。你可以修改你当前窗口的名字。在目前的例子里,我运行的top程序,所以top就是该窗口的名字
如果你想要重命名,只需要按下:
CTRL-b
状态条将会改变,这时你将可以重命名当前的窗口
一旦在一个会话中创建多个窗口,我们需要在这些窗口间移动的办法。窗口像数组一样组织在一起,从0开始用数字标记每个窗口,想要快速跳转到其余窗口:
CTRL-b <窗口号>
如果我们给窗口起了名字,我们可以使用下面的命令找到它们:
CTRL-b f
也可以列出所有窗口:
CTRL-b w
按照顺序切换到不同的窗口:
CTRL-b n(到达下一个窗口) CTRL-b p(到达上一个窗口)
想要离开一个窗口,可以输入 exit 或者:
CTRL-b &
关闭窗口之前,你需要确认一下。
有时候你在编辑器工作的同时,需要查看日志文件。在编辑的同时追踪日志真的很有帮助。Tmux可以让我们把窗口分成许多面板。举个例子,我们可以创建一个控制台监测我们的服务器,同时用编辑器构造复杂的开发环境,这样就能同时进行编译和调试了。
让我们创建另一个Tmux会话,让其以面板的方式工作。首先,如果我们在某个会话中,那就从Tmux会话中脱离出来:
CTRL-b d
开始一个叫做"panes"的新会话:
$ tmux new -s panes
你可以水平或者竖直分割一个窗口,水平分割输入:
CRTL-b "
现在你就拥有两个面板,现在我们竖直分割:
CRTL-b %
又增加了两个:
在他们之间移动:
CTRL-b <光标键>