前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tmux 使用教程

tmux 使用教程

作者头像
为为为什么
发布2022-08-06 15:06:38
3.6K0
发布2022-08-06 15:06:38
举报
文章被收录于专栏:又见苍岚又见苍岚

tmux 是一个 terminal multiplexer(终端复用器),它可以启动一系列终端会话,本文介绍 tmux 使用方法。

简介

窗口与会话

讲解使用之前,我们需要先搞清楚窗口与会话的概念。

  • 命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session)
  • 会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
  • 简单来说
    • 窗口:终端打开的一个tab
    • 会话:终端里面所操作的命令、启动的服务等
tmux 是什么

tmux 是一个 终端复用器(terminal multiplexer),它可以启动一系列终端会话。

我们使用命令行时,打开一个终端窗口,,会话开始,执行某些命令如npm run dev,关闭此终端窗口,会话结束,npm run dev服务会话随之被关闭。有时我们希望我们运行的服务如npm run dev 或者一些cd命令等,被保留,而不是关闭窗口再打开后,重新手动执行。tmux的主要用途就在于此。

  • tmux 解绑了会话和终端窗口。关闭终端窗口再打开,会话并不终止,而是继续运行在执行。将会话与终端窗后彻底分离。
  • tmux使用c语言实现的,可运行在OpenBSD, FreeBSD, NetBSD, Linux, OS X, Solaris上。
  • 项目地址:https://github.com/tmux/tmux
相比于普通终端的优势
  1. 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
  2. 它可以让新窗口"接入"已经存在的会话。
  3. 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
  4. 它还支持窗口任意的垂直和水平拆分。

工具安装

安装方法一
代码语言:javascript
复制
git clone https://github.com/tmux/tmux.git
cd tmux
sh autogen.sh
./configure && make

安装方法二
代码语言:javascript
复制
# Ubuntu 或 Debian
$ sudo apt-get install tmux

# CentOS 或 Fedora
$ sudo yum install tmux

# Mac
$ brew install tmux

会话控制

启动 tumx
代码语言:javascript
复制
# 启动tmux
$ tmux

在终端窗口上,运行tmux,其实就打开了一个终端与tmux服务的会话。只不过我们可以在tmux会话上层,再次输入’会话‘命令,使tmux上层运行的’会话’与终端窗口进行分离。这里面tmux其实可以称之为伪窗口(它其实是会话)。

  • 启动tmux后,底部[0] 表示第0个tmux伪窗口,再启动一个tmux伪窗口,则为[1],依次递增。
代码语言:javascript
复制
# 启动命名tmux
$ tmux new -s <name>

  • 底部不再是数字,而是命名的名字

例如:

代码语言:javascript
复制
$ tmux new -s test
退出会话

按下Ctrl+d或者显式输入exit命令,就可以退出 Tmux 窗口。

分离会话

在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。

代码语言:javascript
复制
# 分离会话
$ tmux detach

承接刚刚的示例:

查看会话

执行tmux ls可看到当前所有的 tmux 伪窗口

代码语言:javascript
复制
$ tmux ls
test: 1 windows (created Wed Jan  5 16:13:49 2022)

重接会话

tmux 工具的宝贵之处就在于会话可以重接

  • 在我们已经执行tmux detach关闭tmux伪窗口后,可以使用如下命令重新接入之前的会话
代码语言:javascript
复制
# 重接会话 使用伪窗口编号
$ tmux attach -t 0

# 重接会话 使用伪窗口名称
$ tmux attach -t <name>

杀死会话

有时候我们想彻底关闭某个会话,不想让其再执行,怎么操作?

代码语言:javascript
复制
# 使用会话编号
$ tmux kill-session -t 0

# 使用会话名称
$ tmux kill-session -t <name>

切换会话
代码语言:javascript
复制
# 使用会话编号
$ tmux switch -t 0

# 使用会话名称
$ tmux switch -t <session-name>

重命名会话
代码语言:javascript
复制
$ tmux rename-session -t 0 <new-name>

窗格操作

Tmux 可以将窗口分成多个窗格(pane),每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。

划分窗格

tmux split-window命令用来划分窗格。

代码语言:javascript
复制
# 划分上下两个窗格
$ tmux split-window

# 划分左右两个窗格
$ tmux split-window -h

移动光标

tmux select-pane命令用来移动光标位置。

代码语言:javascript
复制
# 光标切换到上方窗格
$ tmux select-pane -U

# 光标切换到下方窗格
$ tmux select-pane -D

# 光标切换到左边窗格
$ tmux select-pane -L

# 光标切换到右边窗格
$ tmux select-pane -R

交换窗格位置

tmux swap-pane命令用来交换窗格位置。

代码语言:javascript
复制
# 当前窗格上移
$ tmux swap-pane -U

# 当前窗格下移
$ tmux swap-pane -D

窗口管理

除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口。

新建窗口

tmux new-window命令用来创建新窗口。

代码语言:javascript
复制
$ tmux new-window

# 新建一个指定名称的窗口
$ tmux new-window -n <window-name>	

新建窗口后左下角可以看到多个选项卡,星号表示当前所在窗口

切换窗口

tmux select-window命令用来切换窗口。

代码语言:javascript
复制
# 切换到指定编号的窗口
$ tmux select-window -t <window-number>

# 切换到指定名称的窗口
$ tmux select-window -t <window-name>

重命名窗口

tmux rename-window命令用于为当前窗口起名(或重命名)。

代码语言:javascript
复制
$ tmux rename-window <new-name>

其他命令

代码语言:javascript
复制
# 列出所有快捷键,及其对应的 Tmux 命令
$ tmux list-keys

# 列出所有 Tmux 命令及其参数
$ tmux list-commands

# 列出当前所有 Tmux 会话的信息
$ tmux info

# 重新加载当前的 Tmux 配置
$ tmux source-file ~/.tmux.conf

快捷键

Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b,即先按下Ctrl+b,快捷键才会生效。

系统操作

按键

含义

?

列出所有快捷键;按q返回

d

脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话

D

选择要脱离的会话;在同时开启了多个会话时使用

Ctrl+z

挂起当前会话

r

强制重绘未脱离的会话

s

选择并切换会话;在同时开启了多个会话时使用

:

进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器

[

进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出

~

列出提示信息缓存;其中包含了之前tmux返回的各种提示信息

$

重命名当前会话

窗口操作

按键

含义

c

创建一个新窗口,状态栏会显示多个窗口的信息

&

关闭当前窗口

数字键

切换到指定编号的窗口,数字对应状态栏上的窗口编号

p

切换至上一窗口

n

切换至下一窗口

l

在前后两个窗口间互相切换

w

通过窗口列表切换窗口

,

重命名当前窗口;这样便于识别

.

修改当前窗口编号;相当于窗口重新排序

f

在所有窗口中查找指定文本

窗格操作

按键

含义

"

将当前窗格平分为上下两块

%

将当前窗格平分为左右两块

x

关闭当前窗格

!

将当前窗格置于新窗口;即新建一个窗口,其中仅包含当前窗格

Ctrl+方向键

以1个单元格为单位移动边缘以调整当前窗格大小

Alt+方向键

以5个单元格为单位移动边缘以调整当前窗格大小

Space

在预置的窗格布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled

q

显示窗格编号

o

在当前窗口中选择下一窗格

方向键

移动光标以选择窗格

{

当前窗格与上一个窗格交换位置

}

当前窗格与下一个窗格交换位置

Alt+o

逆时针旋转当前窗口的窗格,所有窗格向后移动一个位置,最后一个窗格变成第一个窗格

Ctrl+o

顺时针旋转当前窗口的窗格,所有窗格向前移动一个位置,第一个窗格变成最后一个窗格

;

光标切换到上一个窗格

o

光标切换到下一个窗格

z

当前窗格全屏显示,再使用一次会变回原来大小

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月5日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
    • 窗口与会话
      • tmux 是什么
        • 相比于普通终端的优势
        • 工具安装
          • 安装方法一
            • 安装方法二
            • 会话控制
              • 启动 tumx
                • 退出会话
                  • 分离会话
                    • 查看会话
                      • 重接会话
                        • 杀死会话
                          • 切换会话
                            • 重命名会话
                            • 窗格操作
                              • 划分窗格
                                • 移动光标
                                  • 交换窗格位置
                                  • 窗口管理
                                    • 新建窗口
                                      • 切换窗口
                                        • 重命名窗口
                                        • 其他命令
                                        • 快捷键
                                          • 系统操作
                                            • 窗口操作
                                              • 窗格操作
                                              • 参考资料
                                              领券
                                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档