咱们在linux服务器上的工做通常都是经过一个远程的终端链接软件链接到远端系统进行操做,例如使用xshell或者SecureCRT工具经过ssh进行远程链接。在使用过程当中,若是要作比较耗时的操做,例若有时候进行编译,或者下载大文件须要比较长的时间,通常状况下是下班以后直接运行但愿次日早上过来运行完成,这样就不用耽误工做时间。可是网络有时候不稳定,可能在半夜会出现链接断掉的状况,一旦链接断掉,咱们所执行的程序也就中断,咱们固然能够写一个脚本后台运行,可是仍是不方便。那么有没有一种工具能够解决这样的问题呢。这就是咱们这里要提到的tmux了。其实相似tmux的工具还有不少。例如gnu screen等。tmux恰好能够解决咱们描述的问题,当咱们在tmux中工做的时候,即便关掉SecureCRT的链接窗口,再次链接,进入tmux的会话咱们以前的工做仍然在继续。linux
tmux是一个linux下面的工具,在使用以前须要安装,就像安装linux下的其余工具同样方便。首先咱们经过SecureCRT链接登入远程的linux机器,咱们将此时的环境称为终端环境。若是这个机器上并无安装tmux,咱们须要安装。例如在CentOs上是yum install tmux,完成以后咱们就可使用tmux命令了。tmux中有3种概念,会话,窗口(window),窗格(pane)。会话有点像是tmux的服务,在后端运行,咱们能够经过tmux命令建立这种服务,而且能够经过tmux命令查看,附加到后端运行的会话中。一个会话能够包含多个窗口,一个窗口能够被分割成多个窗格(pane)。首先咱们来看一下tmux的会话。shell
1. tmux new -s session1 新建会话windows
使用 tmux new -s 命令新建一个会话 -s (实际上是session的头字母)。后面指定会话名便可。运行以后会从shell的终端环境进入到会话环境中,并停留在刚才新建的会话中。例如:后端
能够看到进入session以后的显示,在下面有一条绿色的状态指示栏,左边显示的是当前会话的名字,紧接着是会话中的窗口(window)序号以及窗口名字。关于窗口的概念咱们后面再说,窗口名字后面有一个星号*表示是咱们操做的当前窗口,一个会话中能够有多个窗口。当进入一个会话以后,会自动建立一个窗口。如上图所示,上面的环境在本章中称为会话环境。这样咱们就已经开始了tmux的使用,若是此时关闭掉SecureCRT软件,下次在进入,该会话仍然在运行工。也就是说咱们在刚刚进入的会话环境中使用wget下载一个超大的文件,或者是编译一个很是耗时的项目,咱们关闭掉该SecureCRT的链接,下次再进入,这个会话依然存在,会话里面运行的编译命令或者wget下载命令仍然在运行,并不会由于关闭SecureCRT而终止,这正是咱们须要的功能。不受SecureCRT网络链接的影响。甚至咱们能够关掉整个SecureCRT程序。服务器
2. ctrl+b d 退出会话,回到shell的终端环境网络
咱们刚才是经过 tmux new -s 命令建立一个tmux会话并进入该会话的,若是要退出这个会话环境回到终端环境(会话里面的程序不会退出在后台保持继续运行)。应该如何操做呢,例如上图,当前咱们在tmux的会话环境中,使用一个快捷键 ctrl+b d (按ctrl+b 以后再按一个字母d便可,字母d是detach的缩写)。操做以后的结果以下:session
能够看到绿色的状态栏消失了,而顶部出现一个[detached],表示已经脱离tmux会话,如今已经不在tmux的会话环境中回到shell终端环境中了。ssh
这里有必要说一下在tmux会话环境中,咱们常常会用到tmux的组合键,通常的组合键中都会加一个前缀也就是 ctrl+b 另外,在后面的描述中,咱们说的终端环境是指使用SecureCRT进入远程linux以后可是没有进入tmux的会话环境的状态。工具
经过上面的操做 ctrl+b d 以后,回到终端环境,实际上如今tmux的会话还在后台运行,如何查看呢。布局
3. tmux ls 终端环境查看会话列表
在终端环境中,咱们能够经过tmux ls 命令来查看后台运行中的tmux的会话列表,例如:
能够看到在列出的列表中,只有1行,说明只有一个session,其中左边的session1表示该session的名字,中间2 windows说明该session1会话中有2个window,右边表示该会话建立的时间。若是该机器中有多个tmux会话在后台运行,那么这里会列出多行。由于tmux会话在后台运行,咱们猜想实际上确定是有tmux的进程在后台运行来维持这些会话。咱们能够ps看一下:
能够看到咱们以前建立会话的命令还在后端运行。
4. ctrl+b s 会话环境查看会话列表
上面的命令中咱们已经退出了tmux的会话环境,在终端环境中经过tmux ls 来列出当前linux机器后台运行的tmux会话列表。那么假设咱们当前环境已经在tmux的会话环境中,咱们如何获得当前tmux的会话列表呢,若是每次都要退出当前会话,先回到shell终端环境再运行tmux ls 来查看就很不方便,那么在tmux的会话环境中,咱们能够经过 ctrl+b s 来获取当前linux机器上tmux全部的后台会话列表,例如操做以后显示以下:
此时能够经过方向键选择会话并回车,在会话间进行切换。
5. tmux a -t session1 从终端环境进入会话
若是在终端环境中运行 tmux ls 查看有tmux会话正在后台运行,如何进入到该正在后台中运行的会话呢,经过运行 tmux a -t session1 便可进入到该已存在的会话 session1 中。其中a字母是attach的头字母,表示附加, -t 指定要进入已存在的会话名,若是不存在则会报告 session not found 错误。
6. tmux kill-session -t session1 销毁会话
咱们能够在终端环境和会话环境中销毁会话,例如在终端环境中运行 tmux kill-session -t session1 结束名字为session1的tmux会话。
在会话环境中运行 ctrl+b :
(注意按组合键以后再按一个冒号键),状态栏变成黄色以后提示咱们能够在会话环境中输入命令,此时输入 kill-session -t session1 回车便可。其中session1是要销毁的会话名。
会话销毁以后,在终端环境中运行tmux ls 或者在会话环境中运行 ctrl+b s 则被销毁的会话不会再出如今会话列表中。
7. tmux rename -t old_session_name new_session_name 重命名会话
咱们能够在终端环境中将会话重命名,如上面的命令,重命名以后经过 tmux ls 命令在终端环境中看到的列表中会显示会话的新名称。
8. ctrl + b $ 重命名会话 (在会话环境中)
在会话环境中,咱们能够经过前缀命令加上 $ 的组合来重命名当前打开的会话的名字
一个tmux的会话中能够有多个窗口(window),每一个窗口又能够分割成多个pane(窗格)。咱们工做的最小单位实际上是窗格。默认状况下在一个window中,只有一个大窗格,占满整个窗口区域。咱们在这个区域工做。
本节咱们讲解一下tmux窗口的相关操做,后面咱们再说一下关于窗格(pane)的相关知识。首先在新建立的一个会话里面是会默认建立一个窗口的。正如咱们上面提到过的图同样,以下所示:
新建立的会话中会默认建立一个窗口,该窗口名字通常是登录终端的用户名@主机名,咱们能够经过 crtl+b ,
(组合键以后按一个逗号)来修改当前窗口的名字,如上图所示的窗口名字myserver1就是修改以后的名字。该名字后面有一个*号,表示该窗口是活动窗口(键盘输入会输入到该窗口中)
1. 建立window
能够在当前会话窗口中建立多个窗口,例如 ctrl+b c 建立以后会多出一个窗口以下图所示:
默认状况下建立出来的窗口由窗口序号+窗口名字组成,窗口名字能够由上面提到的方法修改,能够看到新建立的窗口后面有*号,表示是当前窗口。
2. 切换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切换
3. ctrl+b & 关闭window
ctrl+b & 关闭当前window,会给出提示是否关闭当前窗口,按下y确认便可。
tmux的一个窗口能够被分红多个pane(窗格),能够作出分屏的效果。
1. ctrl+b % 垂直分屏(组合键以后按一个百分号),用一条垂线把当前窗口分红左右两屏。
2. ctrl+b " 水平分屏(组合键以后按一个双引号),用一条水平线把当前窗口分红上下两屏。
分屏以后光标停留在哪一个pane上,表示该pane是活动的,另一般状况下当前pane会被绿色的线条围起来。通常分屏以后当前窗口名字会重置为默认窗口名字。经过屡次分屏操做,咱们能够获得各类样子的分屏效果,例以下图显示的是一次垂直分屏以后,在右边pane中再次水平分屏的效果:
能够看到右下角的分屏是绿色框,说明是当前活动pane
3. 切换pane
ctrl+b o 依次切换当前窗口下的各个pane。
ctrl+b Up|Down|Left|Right 根据按箭方向选择切换到某个pane。
ctrl+b Space (空格键) 对当前窗口下的全部pane从新排列布局,每按一次,换一种样式。
ctrl+b z 最大化当前pane。再按一次后恢复。
4. 关闭pane
ctrl+b x 关闭当前使用中的pane,操做以后会给出是否关闭的提示,按y确认即关闭。
在tmux里面,由于每一个窗口(tmux window)的历史内容已经被tmux接管了,当咱们在每一个tmux的window之间进行来回切换,来回操做,那么咱们没有办法看到一个window里面屏幕上的历史输出。没办法使用鼠标滚动(例如在SecureCRT中)查看以前的内容,在SecureCRT中经过鼠标滚动看到的输出必定是各个tmux的window的输出混乱夹杂在一块儿的,若是要看当前窗口的历史内容,那么应该怎么办呢,经过在当前的tmux window 按 ctrl-b 进入copy mode,而后就能够用PgUp/PgDn来浏览历史输出了,按q退出。
tmux中的最重要的三个概念会话,窗口,pane的使用方法已经介绍完毕,其实这是咱们操做tmux的最经常使用功能,若是掌握好,足以应付大多数工做。另外tmux还有一些高级用法,例如能够个性化的配置其组合键(官方默认的ctrl+b组合键按起来不太方即可以修改,UI设置,鼠标支持,复制粘贴等),可是我以为这些高级功能基本不太用的到。若有须要你们能够自行查阅相关资料。