当运行一个web应用时,我们希望在退出登录或关闭终端的时候,web应用仍然能够运行,这时候就要用到 nohup
。nohup
有个缺点就是它会将输出重定向到 nohup.out
文件,虽然也有其他方法能够在终端实时查看 nohup
输出,但重新登录服务器的时候,这些输出将会丢失。
同样的,当我们想在终端进行其他活动时,就必须打开一个新的终端,这显然不够greek。
基于上述两个痛点,tmux就派上用场了。tmux主要有如下三大功能:
- 保护现场:即使命令行的工作只进行到一半,关闭终端后还可以重新进入到操作现场,继续工作。对于ssh远程连接而言,即使网络不稳定也没有关系,掉线后重新连接,可以直奔现场,之前运行中的任务,依旧在跑,就好像从来没有离开过一样;特别是在远程服务器上运行耗时的任务,tmux可以帮你一直保持住会话。如此一来,你就可以随时随地放心地进行移动办公,只要你附近的计算机装有tmux(没有你也可以花几分钟装一个),你就能继续刚才的工作。
- 分屏:tmux窗口中,新开的pane,默认进入到之前的路径,如果是ssh连接,登录状态也依旧保持着,如此一来,我就可以随意的增删pane,非常灵活。
- 会话共享:将tmux会话的地址分享给他人,这样他们就可以通过 SSH 接入该会话。
session & window & pane
- 一个tmux session(会话)可以包含多个window(窗口),窗口默认充满会话界面,因此这些窗口中可以运行相关性不大的任务。
- 一个window又可以包含多个pane(面板),窗口下的面板,都处于同一界面下,这些面板适合运行相关性高的任务,以便同时观察到它们的运行情况。
最佳实践
安装
1
| sudo yum install -y tmux
|
会话
新建会话
断开当前会话
也可以使用快捷键,先按 ctrl + b
,再按 d
。
进入之前的会话
关闭会话
1 2
| tmux kill-session -t test tmux kill-server
|
查看会话
也可以使用快捷键 ctrl + b + s
,此时tmux将打开会话列表。按上下键可切换会话,按左右键可收起或展开会话。
tmux快捷键
前缀 |
指令 |
说明 |
ctrl+b |
? |
显示快捷键帮助文档 |
ctrl+b |
d |
断开当前会话 |
ctrl+b |
D |
选择要断开的会话 |
ctrl+b |
ctrl+z |
挂起当前会话 |
ctrl+b |
r |
强制重载当前会话 |
ctrl+b |
s |
显示会话列表用于选择并切换 |
ctrl+b |
: |
进入命令行模式 |
ctrl+b |
[ |
进入复制模式 |
ctrl+b |
] |
粘贴复制模式中复制的文本 |
ctrl+b |
~ |
列出提示信息缓存 |
前缀 |
指令 |
说明 |
ctrl+b |
c |
新建窗口 |
ctrl+b |
& |
关闭当前窗口 |
ctrl+b |
0~9 |
切换到指定窗口 |
ctrl+b |
p |
切换到上一窗口 |
ctrl+b |
n |
切换到下一窗口 |
ctrl+b |
w |
打开窗口列表且切换窗口 |
ctrl+b |
, |
重命名当前窗口 |
ctrl+b |
. |
修改当前窗口编号 |
ctrl+b |
f |
快速定位到窗口 |
前缀 |
指令 |
说明 |
ctrl+b |
" |
当前面板上下一分为二,下侧新建面板 |
ctrl+b |
% |
当前面板左右一分为二,右侧新建面板 |
ctrl+b |
x |
关闭当前面板 |
ctrl+b |
z |
最大化当前面板,再重复一次按键后恢复正常 |
ctrl+b |
! |
将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效) |
ctrl+b |
; |
切换到最后一次使用的面板 |
ctrl+b |
q |
显示面板编号,在编号消失前输入对应的数字可切换到相应的面板 |
ctrl+b |
{ |
向前置换当前面板 |
ctrl+b |
} |
向后置换当前面板 |
ctrl+b |
ctrl+o |
顺时针旋转当前窗口中的所有面板 |
ctrl+b |
方向键 |
移动光标切换面板 |
ctrl+b |
o |
选择下一面板 |
ctrl+b |
space |
在自带的面板布局中循环切换 |
ctrl+b |
alt+方向键 |
以5个单元格为单位调整当前面板边缘 |
ctrl+b |
ctrl+方向键 |
以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖) |
ctrl+b |
t |
显示时钟 |
关于tmux的高阶应用,如个性化配置、保存会话、会话共享等,请参照: