终端复用神器tmux

一、简介

        Tmux 的全称是 Terminal MUtipleXer,即终端复用软件。顾名思义,它的主要功能就是在你关闭终端窗口之后保持进程的运行,它是一个远程多任务管理的工具(多会话+多窗口+工作现场保留和复原)。Tmux 与 Zsh、Vim 一起被大家称为“文本三巨头”,即使是在 GUI 发达的今天,Tmux 仍然拥有大量的用户。还有一个和 Tmux 相似的软件叫 Screen,不过 Screen 项目已经停止维护了。

为什么要用 tmux:

        一般我们远程在服务其上工作都是通过远程连接软件进行操作,比如使用item2或者xshell之类的终端工具通过ssh来进行远程连接。如果需要进行一个比较耗时的操作,比如打包运行JavaWeb应用或者处理大文件,一般情况下我们希望可以在下班的时候进行,然后第二天上班就可以直接看到结果,这样可以合理的分配自己的工作时间。但是令人尴尬的是,正常通过ssh启动的进程都是ssh进程的子进程,如果ssh断开,ssh进程就会被系统kill,与此同时所有通过ssh启动的进程也都会被killed。这个时候,正常情况下我们会选择使用nohup等命令来让其后台运行,切断和ssh进程的联系。但是这样做也有很多不便之处,比如多命令运行,合理管控,工作环境恢复等等。这个时候就不得不提screen或者tmux等工具了。tmux可以看作是screen的升级版本,可以帮助我们后台运行任务,同时通过其回话,创建,分屏等功能,我们可以在ssh中完成更复杂的工作。即使工作过程中不慎断开连接,也可以在重新连接ssh后直接恢复会话,原来运行和打开的程序也都在正常运行,十分方便。

tmux 中几个重要概念:

  • 会话(session): 建立一个 tmux 工作区会话,会话可以长期驻留,重新连接服务器不会丢失,我们只需重新 tmux attach 到之前的工作区就可以恢复会话,一个会话可以包含多个窗口。
  • 窗口(window): 一个窗口可以被分割成多个窗格。
  • 窗格(pane): 我们工作的最小单位是窗格,在窗格里执行各种命令。

二、安装

mac:

brew install tmux

ubuntu:

sudo apt-get install tmux

三、 常用操作

tmux 默认的快捷键前缀是 ctrl+b,比如,快捷键 ctrl+b k 的意思就是先同时按下 ctrl 和 b,然后松开,再按 k。

进入tmux后,状态栏颜色为绿色,状态栏显示的信息为 [<session_name>] 0:<window0_name> 1:<window1_name>* 2:<window2_name>,*所在的窗口为当前活动窗口。光标所在窗格为当前活动窗格。

在tmux会话环境中,按 ctrl+b : 可进入tmux命令行模式(下面状态栏变成橙色)。

通过 ctrl+b ? 可查询 tmux 的帮助文档和快捷键信息,按 esc 或 q 可退出帮助文档。

(1)会话(session)常用操作

操作 bash命令

tmux命令行模式 

快捷键

新建 session

tmux (默认通过数字编号来命名)

tmux new -s  <session_name>

(创建一个会话后会默认创建一个窗口,

并从shell终端环境进入tmux会话环境,

关闭掉该终端,下次可再attach进入这个会话依) 

new (默认通过数字编号来命名)

new -s <session_name>

 
查看 session 列表 tmux ls ls (按 esc 或 q 退出) ctrl+b s
重命名 session

tmux rename -t <old_session_name> <new_session_name>

tmux rename-session -t <old_session_name> <new_session_name>

  ctrl+b $

切换 session

  switch -t <session_name> ctrl+b s

离开 session

(退出会话,回到shell终端环境,会话里面的程序继续在后台执行)

  detach ctrl+b d

进入 session

tmux attach -t  <session_name>

tmux a -t  <session_name>

   
关闭 session tmux kill-session -t <session_name> kill-session -t <session_name>  

(2)窗口(window)常用操作

操作 bash命令 快捷键
新建窗口

tmux new-window -n <window_name>

(在当前会话里新建窗口)

ctrl+b c (窗口默认名字为bash,用户名@主机名?)
重命名窗口

tmux rename-window <new_window_name>

(重命名最当前窗口)

ctrl+b ,
切换窗口

tmux select-window -t <window_name>

(切换当前会话里的窗口)

ctrl+b n 切换到下一个窗口(next首字母)

ctrl+b p 切换到上一个窗口(previous首字母)

ctrl+b w 显示窗口列表,通过上下箭头选择窗口(windows首字母)

ctrl+b 0 切换到0号窗口,依次类推,可换成任意窗口序号

ctrl+b l (字母L的小写)相邻的窗口切换

关闭窗口

tmux kill-window -t <window_name>

(关闭当前窗口)

ctrl+b & 关闭当前窗口

(会提示是否关闭当前窗口,按下y确认即可)

(3)窗格(pane)常用操作

操作 bash命令 快捷键
左右切割窗格 tmux split-window -h
(切割当前窗格)
ctrl+b %
上下切割窗格

tmux split-window

(切割当前窗格)

ctrl+b "
切换窗格

tmux select-pane -U 把当前光标移动到上方的窗格

tmux select-pane -D 把当前光标移动到下方的窗格

tmux select-pane -L 把当前光标移动到左边的窗格

tmux select-pane -R 把当前光标移动到右边的窗格

ctrl+b <arrow key> 例如 ctrl +b ⬆ 会把光标移动到上方的窗格

ctrl+b ; 光标切换到上一个窗格?

ctrl+b o 光标依次切换到当前窗口中的各个窗格

ctrl+b space (空格键) 对当前窗口中的所有窗格重新排列布局,每按一次,换一种样式。

交换窗格位置

tmux swap-pane -U 当前窗格向上移动

tmux swap-pane -D 当前窗格向下移动

 
最大化当前窗格   ctrl+b z 再按一次后恢复
关闭当前窗格  

ctrl+b x

(会提示是否关闭当前窗格,按下y确认即可)

窗格显示时间   ctrl+b t 点击回车键将会复原
查看窗格日志   ctrl+b [ (右上角会出现橙色的log页码,可用箭头或鼠标滚动查看,按 esc 或 q 退出)

四、配置文件

tmux 的简单配置文件 ~/.tmux.conf 如下(如果没有可创建一个)

vim ~/.tmux.conf
set -g mouse on # 开启鼠标操作

# below reset tmux prefix command key
set -g prefix C-x
unbind C-b
bind C-x send-prefix

# set swap pane key
bind-key k select-pane -U
bind-key j select-pane -D
bind-key h select-pane -L
bind-key l select-pane -R

set-window-option -g utf8 on # 开启窗口的UTF-8支持
set-window-option -g mode-keys vi # 可以设置为vi或emacs

该配置文件把默认快捷键前缀 ctrl+b 改成了 ctrl+x,设置多个窗格之间的光标切换,比如可以通过 ctrl+x k 切换到上一个窗格。

五、常用工作方式

在公司上班时用台式机ssh远程登入开发机。

ssh alan@ubuntu

创建一个tmux会话(session)进行开发(每类工作或者每个项目都新建一个会话,通过 ctrl+b s 切换不同会话)

tmux new -s <session_name>

每个会话打开两个窗口(window),一个窗口用vim编辑代码,另一个窗口通过 ctrl+b % 或 ctrl+b " 切分多个窗格(pane),分别用于编译调试、git 操作、或其他 shell 命令。通过 ctrl+b nctrl+b p  ctrl+b w 快速切换不同窗口,通过 ctrl+b <arrow_key> 在不同窗格间移动光标。

tmux new-window -n <window_name>

晚上下班回家,用笔记本ssh远程登入开发机。

ssh alan@ubuntu

进入之前的tmux会话,里面打开的vim、cd目录通通保留,做到了“工作现场的复原”。

tmux ls
tmux a -t <session_name>

第二天去公司,台式机的ssh已经退出,重新ssh进去,进入之前的tmux会话,继续昨晚的工作,perfect !

猜你喜欢

转载自blog.csdn.net/A_L_A_N/article/details/106862565