终端复用工具TMUX入门实践 (TMUX best practice)

Tmux是什么

终端复用工具:在一个终端窗口下打开多个终端

为什么要用Tmux

  1. ssh/telnet登录远程计算机时,如果在前台终端执行一些脚本任务,当网络出现中断时,终端连接断开,则任务自动终止;
  2. 用不同终端进入不同目录,执行不同任务。我是一周开关机一次,每次要干很多事,省去重复的cd操作,能省下不少时间
  3. 登录远程计算机时,提供一种轻量级的多窗口打开方式。如果你直接使用类似ubuntu桌面系统,那你已经可以很方便的通过建立多窗口和选项卡了。原生的终端,只是比tmux少了一个多pane的拆分。

安装

$ sudo apt-get install tmux

Tmux概念

会话(session)、窗口(window)、窗格(pane)
在这里插入图片描述
从这张图上就能比较清楚的看出窗口和pane的关系了,说白了就是一个大窗口下的多个小窗口。
对于session和window的关系,按照以下步骤操作以后,也就很好理解了。

配置文件

$ vim ~/.tmux.conf

添加以下两行配置,分别配置纵向、横向分割窗口的快捷键。

bind | split-window -h
bind - split-window -v

工作流

1. 新建会话,同时给会话命名

$ tmux new -s work   ## 新建会话work

得到以下窗口:
在这里插入图片描述
创建会话时,同时创建了一个默认窗口0,bash显示当前终端执行的程序。

然后我们觉得bash这种毫无意义的命名令人费解,我们来改掉它。

这里提一句:“tmux的所有快捷键都以ctrl + b开始。”

1.1 给默认创建的窗口0改名

ctrl+b  ,      # 同时按下ctrl+b,之后松开按键,再按`,`

这里我将该窗口改名为’tmp’,并将当前窗口的工作目录也cd到/tmp目录。
个人习惯将窗口名称改成工作目录名称,表示我要在这个窗口下操作/tmp目录下的文件
在这里插入图片描述

2. 当前会话中新建窗口,并改名

接下来我们来看下tmux的“复用能力”

ctrl+b c           # 同时按下ctrl+b,之后松开按键,再按`c`

我们在当前的会话[work]下,得到了一个新的窗口:“1:bash”
在这里插入图片描述
同样的,这个新建的窗口一般也需要改名,这里我将它改成work,并切换工作目录:
在这里插入图片描述

3. 当前窗口中新建pane

会话中建多个窗口,属于session级别的终端复用,同样的,我们也可以在一个窗口中建立多个pane,进行终端的复用。

这个特性在一些应用场景可能非常有用,如:

  1. socket调试,左边的pane运行server,右边的pane运行client
  2. 代码编译,上边的窗口执行编译操作,下边的窗口查看编译生成文件
  3. 临时帮同事找点东西。。。
  4. 。。。。

3.1 横向分割

ctrl+b -      #得益于上面给出的配置文件,这里可以直接用'-',进行横向的窗口切分

在这里插入图片描述

3.2 纵向分割

ctrl+b |            # 纵向切分窗口

我们在3.1执行的基础上,直接执行纵向切分的操作,得到以下窗格:
在这里插入图片描述

3.3 pane之间的切换

ctrl+b o             # 切换到下一个pane
ctrl+b 方向键         # 切换的指定方向的pane
ctrl+b q             # 该组合按键,会在当前窗口的所有pane上显示pane编号,在编号消失之前,按下对应编号,即可直接跳到对应的pane

3.4 pane的窗口独占

pane的优势时对比查看不同目录下的内容,缺点是好好的一个大屏幕被切小了,再执行grep等搜索命令时,非常不友好,此时需要一个将当前pane独占整个窗口的功能,当然这是临时的,因为我们并不想要退出其他pane。

ctrl+b z

如下图,当我们看到窗口名称后面有’Z’符号时,就表明这个窗口中,有其他的pane被隐藏了。
之后你可以通过同样的操作退出pane的窗口独占,或者直接使用3.3介绍的命令,进行pane的切换。
在这里插入图片描述

4. 窗口之间的切换

我们在"1:work"窗口下已经干了很多事了,现在想要回到“0:tmp”下:

ctrl+b 0                  # 0为切换目的窗口的编号
ctrl+b p                  # 切换到previous窗口
ctrl+b n                  # 切换到next窗口

我们在work窗口下执行以上任意一个操作,都会跳到0窗口。

5. TMUX翻页

翻页操作是很多人拒绝使用tmux的原因,因为它默认不支持鼠标翻页的。
在我们使用grep搜索代码时(特别是linux内核这种大工程),搜索结果可能有很多页,这时翻页的体验比较重要。但是到这时,我已经觉得tmux真香了,实在不愿意因为这种原因而放弃它。

于是我开始反过来思考:
1. 为什么搜索结果会有这么多页?
2. grep的时候是不是要使用-w参数?
3. 我是不是一定要在根目录下执行搜索?
4. 我是不是直接搜索某单一文件、文件夹就可以
5. grep -rni搜索出来的结果,我会不会一行一行的仔细看完

基于以上思考,我认为如果搜索结果太多,那就想办法减少一些,让搜索结果更有针对性。

ctrl+b pageup/pagedown

6. 把tmux会话扔回后台

6.1 detach当前会话

ctrl+b d           # detach

6.2 查看后台会话

$ tmux ls

6.3 重新连接后台会话

$ tmux attach -t work           # work为后台会话名称。
                                # 这里有一个助记技巧,来自油管上一个哥们录制tmux教程的语音
                                # “tmux attach to”,所以就是tmux attach -t,‘-t’对应to

6.4 杀掉后台会话

$ tmux kill -session -t session-name

7. TMUX常用操作总结

Ctrl-b $     # 重命名当前session
Ctrl-b c     # 创建新窗口
Ctrl-b d     # session detach
Ctrl-b l     # 跳转到上一个(刚才操作的)活动窗口
Ctrl-b n     # 跳转到下一个窗口
Ctrl-b p     # 跳转到前一个窗口(窗口编号概念上的前后)
Ctrl-b w     # 列出当前会话的所有窗口
Ctrl-b &     # 干掉当前窗口,如果你当前窗口只有一个pane的话,你也可以直接执行exit命令
Ctrl-b ,     # 重命名当前窗口
Ctrl-b q     # 显示当前窗口的pane编号
Ctrl-b o     # 切换到下一个pane
Ctrl-b ?     # 列出所有按键绑定
Ctrl+b f     # 在多个window里搜索关键字
Ctrl-b %     # 垂直分割窗口,我们已经在配置文件里改成'|'了
CTRL-b "     # 水平分割窗口,我们已经在配置文件里改成'-' 了
Ctrl+b :kill-session     # 干掉当前session
Ctrl+b :kill-server      # 干掉所有session,
                         # 这两个命令我是现查的,因为周五下班的时候,
                         # 我就直接关机了,一般不需要kill session
Ctrl+b x                 # 退出当前pane,执行exit的作用是一样的
Ctrl+b (                 # 切换到前一个session
Ctrl+b )                 # 切换到后一个session

8. 命令操作

Ctrl + b : # 进入命令行模式

move-window -t 0               # 当前窗口移动到0号窗口位置,要求0号窗口未被占用
swap-window -t 0               # 当前窗口与0号窗口交换

9. TMUX鼠标操作

TMUX是支持鼠标操作的,喜欢的同学可以在网上找到一些文章。
个人用下来不是很习惯,就不给各位留传送门了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值