为什么要使用tmux
在linux服务器上,我们一般都通过ssh工具进行远程连接,当我们要进行编译代码或下载大文件,这些操作一般都需要较长时间,一旦网络中途不稳定或连接直接断开,那我们之前所做的所有操作就中断了,再连接上又要重新开始。也许有人会说:"我可以写个脚本,让他后台运行"。那只是一个小小的操作写个脚本那确实有点不方便,再者我们要运行一些加载后台控制,虽然可以让他后台执行,也是不方便。这就需要一个ssh工具断开了能解决以上的问题的工具,当然这类工具有很多,比如screen,gun,tmux等,这里我们选用tmux,当我们在tmux中进行工作操作,即使关掉ssh工具/终端,再连接linux服务时,接入tmux的会话,还能继续我们之前的工作操作流程。
tmux 是什么
tmux 是 linux系统下的一个工具,是一个基于类Unix系统的终端多路复用器,允许在一个终端窗口里面开多个子窗口(这里的子窗口可以是对一个屏幕做分割,也是可以是开启多个会话), 支持快速切换,总的来说就是一个能一直保持在系统上的多开器的软件。tmux有个比screen的更骚的操作,就是一个会话可以多人连接,而且一个会话操作流程,会同时给多个人进行展示,有点像屏幕分享,还是可交互的屏幕分享。
tmux有三种概念:
- 会话(session):
会话是tmux 中一个很重要的概念,创建一个会话是使用tmux的第一步,因为所有的操作都是在会话中完成,会话之间还能互相切换,不需要Detach,一个会话包含多个窗口。 - 窗口(window):
窗口可以看成是一块屏幕,和普通终端一样,就很像windows桌面那种窗口全部最大化了你只能看到最前面那一个窗口,区别就是在窗口的底下会显示当前窗口的数据信息,一个窗口可以切分成多个窗格。 - 窗格(pane):
窗格是最小的显示单元,可以显示不同的数据,就类似一些ide的软件的窗口内的一些文件区、编辑区、调试区等。可以在一个窗口里面拆分多个窗格。
下载
这里我推荐直接去github上下载最新的,因为有一些操作系统的源的tmux版本很低,当然自己编译tmux,确实有难度,因为会经常少了一些库什么的就编译不了,所以没有编译代码的新手,还是直接从源里面安装。
https://github.com/tmux/tmux/releases
安装
编译安装
- 下载github的源码,然后解压
$ ./configure && make
$ sudo make install
软件源安装(其实都大同小异)
- centos
yum install tmux
- ubuntu
sudo apt install tmux
- macos
brew install tmux
- manjaro
sudo pacman -S tmux
- centos
会话管理
- 新建会话
tmux
- 新建会话(名称)
tmux new -s <session-name>
- 查看所有会话
tmux ls
- 接入会话
tmux a
或tmux at
或tmux attach
- 使用会话编号接入
tmux attach -t 0
- 使用会话名称接入
tmux attach -t <session-name>
- 杀死会话
tmux kill-session
- 杀死会话(编号)
tmux kill-session -t 0
- 杀死会话(名称)
tmux kill-session -t <session-name>
- 切换会话
tmux switch
- 切换会话(编号)
tmux switch -t 0
- 切换会话(名称)
tmux switch -t <session-name>
- 重命名会话
tmux rename-session
- 将会话编号0改成新的名字
tmux rename-session -t 0 <new-session-name>
- 将旧会话的名字改成新的名字
tmux rename-session -t <old-session-name> <new-session-name>
其他一些操作
- 强行关闭tmux
tmux kill-server
- 列出所有的快捷键以及对应的tmux命令
tmux list-keys
- 列出所有tmux命令以及参数
tmux list-commands
- 列出当前所有tmux的会话消息
tmux ls
- 重载当前的tmux配置
tmux source-file ./.tmux.conf
会话快捷键
Ctrl+b d #分离当前会话
Ctrl+b s #列出所有会话
Ctrl+b $ #重命名当前会话
窗口操作
c:新建窗口;
w:列出所有窗口,此时可通过方向键和回车键切换;
n:切换到后一个窗口(使用后面的主题后失效);
p:切换到前一个窗口(使用后面的主题后失效);
,:重命名当前窗口(不知是否可以在创建时就命名);
&:关闭当前窗口。
窗格操作
%:垂直分割
":水平分割
ctrl+b Up/Down/Left/Right 切换空格
x: 关闭窗格
z: 窗格最大化/最小化
{: 与上一个窗格交换位置
}: 与下一个窗格交换位置
q: 显示窗格标号