慣性聚合 高效追蹤和閱讀你感興趣的部落格、新聞、科技資訊
閱讀原文 在慣性聚合中打開

推薦訂閱源

博客园 - 司徒正美
V
V2EX
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
月光博客
月光博客
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI

阮一峰的网络日志

科技爱好者周刊(第 396 期):互联网通信的替代方案 科技爱好者周刊(第 396 期):互联网通信的替代方案 - 阮一峰的网络日志 科技爱好者周刊(第 395 期):软件开发的第三种方式 科技爱好者周刊(第 395 期):软件开发的第三种方式 - 阮一峰的网络日志 科技爱好者周刊(第 393 期):脑腐状态 科技爱好者周刊(第 392 期):axios 投毒与好莱坞式骗术 科技爱好者周刊(第 391 期):AI 的贫富分化 科技爱好者周刊(第 390 期):没有语料,大模型就是智障 套壳中国大模型撑起500亿美元估值?扒一扒 Cursor 的"套壳"疑云 科技爱好者周刊(第 389 期):未来如何招聘程序员 科技爱好者周刊(第 388 期):测试是新的护城河 零安装的"云养虾":ArkClaw 使用指南 科技爱好者周刊(第 387 期):你是领先的 科技爱好者周刊(第 386 期):当外卖员接入 AI 字节全家桶 Seed 2.0 + TRAE 玩转 Skill 科技爱好者周刊(第 385 期):马斯克害怕中国车企吗? 智谱旗舰 GLM-5 实测:对比 Opus 4.6 和 GPT-5.3-Codex 科技爱好者周刊(第 384 期):为什么软件股下跌 科技爱好者周刊(第 383 期):你是第几级 AI 编程 Kimi 的一体化,Manus 的分层 科技爱好者周刊(第 382 期):独立软件的黄昏 AI native Workspace 也许是智能体的下一阶段 科技爱好者周刊(第 381 期):中国 AI 大模型领导者在想什么 科技爱好者周刊(第 380 期):为什么人们拥抱"不对称收益" 科技爱好者周刊(第 379 期):《硅谷钢铁侠》摘录 我如何用 AI 处理历史遗留代码:MiniMax M2.1 升级体验 科技爱好者周刊(第 378 期):预测是新的互联网热点 科技爱好者周刊(第 377 期):14万美元的贫困线 科技爱好者周刊(第 376 期):太空数据中心的争议 科技爱好者周刊(第 375 期):一扇门的 Bug 终于有人做了 Subagent,TRAE 国内版 SOLO 模式来了 科技爱好者周刊(第 374 期):6GHz 的问题 VS Code 使用国产大模型 MiniMax M2 教程 科技爱好者周刊(第 373 期):数据模型是新产品的核心 国产大模型接入 Claude Code 教程:以 Doubao-Seed-Code 为例 科技爱好者周刊(第 372 期):软件界面如何设计 大模型比拼:MiniMax M2 vs GLM 4.6 vs Claude Sonnet 4.5 科技爱好者周刊(第 371 期):一个乐观主义者的专访 科技爱好者周刊(第 370 期):正确的代码高亮 错误处理:异常好于状态码 科技爱好者周刊(第 369 期):Tim 与罗永浩的对谈 科技爱好者周刊(第 368 期):不要这样管理软件团队 一天之内,智谱和 Anthropic 都发了最强编程模型 科技爱好者周刊(第 367 期):Nano Banana 的几个妙用 科技爱好者周刊(第 366 期):旧金山疯狂的 AI 广告 科技爱好者周刊(第 365 期):流量变现正在崩塌 科技爱好者周刊(第 364 期):最难还原的魔方 科技爱好者周刊(第 363 期):最好懂的神经网络解释 科技爱好者周刊(第 362 期):GitHub 工程师谈系统设计 科技爱好者周刊(第 361 期):暗网 Tor 安全吗?
Tmux 使用教程
阮一峰 · 2019-10-21 · via 阮一峰的网络日志

Tmux 是一個終端複用器(terminal multiplexer),非常有用,屬於常用的開發工具。

本文介紹如何使用 Tmux。

一、Tmux 是什麼?

1.1 會話與進程

命令行的典型使用方式是,打開一個終端窗口(terminal window,以下簡稱"窗口"),在裡面輸入命令。用戶與計算機的這種臨時的交互,稱為一次"會話"(session)

會話的一個重要特點是,窗口與其中啟動的進程是連在一起的。打開窗口,會話開始;關閉窗口,會話結束,會話內部的進程也會隨之終止,不管有沒有運行完。

一個典型的例子就是,SSH 登錄遠程計算機,打開一個遠程窗口執行命令。這時,網絡突然斷線,再次登錄的時候,是找不回上一次執行的命令的。因為上一次 SSH 會話已經終止了,裡面的進程也隨之消失了。

為了解決這個問題,會話與窗口可以"解綁":窗口關閉時,會話並不終止,而是繼續運行,等到以後需要的時候,再讓會話"綁定"其他窗口。

1.2 Tmux 的作用

Tmux 就是會話與窗口的"解綁"工具,將它們徹底分離。

(1)它允許在單個窗口中,同時訪問多個會話。這對於同時運行多個命令行程序很有用。

(2) 它可以讓新窗口"接入"已經存在的會話。

(3)它允許每個會話有多個連接窗口,因此可以多人實時共享會話。

(4)它還支持窗口任意的垂直和水平拆分。

類似的終端複用器還有 GNU Screen。Tmux 與它功能相似,但是更易用,也更強大。

二、基本用法

2.1 安裝

Tmux 一般需要自己安裝。


# Ubuntu 或 Debian
$ sudo apt-get install tmux

# CentOS 或 Fedora
$ sudo yum install tmux

# Mac
$ brew install tmux

2.2 啟動與退出

安裝完成後,鍵入tmux命令,就進入了 Tmux 窗口。


$ tmux

上面命令會啟動 Tmux 窗口,底部有一個狀態欄。狀態欄的左側是窗口信息(編號和名稱),右側是系統信息。

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


$ exit

2.3 前綴鍵

Tmux 窗口有大量的快捷鍵。所有快捷鍵都要通過前綴鍵喚起。默認的前綴鍵是Ctrl+b,即先按下Ctrl+b,快捷鍵才會生效。

舉例來說,幫助命令的快捷鍵是Ctrl+b ?。它的用法是,在 Tmux 窗口中,先按下Ctrl+b,再按下?,就會顯示幫助信息。

然後,按下 ESC 鍵或q鍵,就可以退出幫助。

三、會話管理

3.1 新建會話

第一個啟動的 Tmux 窗口,編號是0,第二個窗口的編號是1,以此類推。這些窗口對應的會話,就是 0 號會話、1 號會話。

使用編號區分會話,不太直觀,更好的方法是為會話起名。


$ tmux new -s <session-name>

上面命令新建一個指定名稱的會話。

3.2 分離會話

在 Tmux 窗口中,按下Ctrl+b d或者輸入tmux detach命令,就會將當前會話與窗口分離。


$ tmux detach

上面命令執行後,就會退出當前 Tmux 窗口,但是會話和裡面的進程仍然在後臺運行。

tmux ls命令可以查看當前所有的 Tmux 會話。


$ tmux ls
# or
$ tmux list-session

3.3 接入會話

tmux attach命令用於重新接入某個已存在的會話。


# 使用會話編號
$ tmux attach -t 0

# 使用會話名稱
$ tmux attach -t <session-name>

3.4 殺死會話

tmux kill-session命令用於殺死某個會話。


# 使用會話編號
$ tmux kill-session -t 0

# 使用會話名稱
$ tmux kill-session -t <session-name>

3.5 切換會話

tmux switch命令用於切換會話。


# 使用會話編號
$ tmux switch -t 0

# 使用會話名稱
$ tmux switch -t <session-name>

3.6 重命名會話

tmux rename-session命令用於重命名會話。


$ tmux rename-session -t 0 <new-name>

上面命令將0號會話重命名。

3.7 會話快捷鍵

下面是一些會話相關的快捷鍵。

  • Ctrl+b d:分離當前會話。
  • Ctrl+b s:列出所有會話。
  • Ctrl+b $:重命名當前會話。

四、最簡操作流程

綜上所述,以下是 Tmux 的最簡操作流程。

  1. 新建會話tmux new -s my_session
  2. 在 Tmux 窗口運行所需的程序。
  3. 按下快捷鍵Ctrl+b d將會話分離。
  4. 下次使用時,重新連接到會話tmux attach-session -t my_session

五、窗格操作

Tmux 可以將窗口分成多個窗格(pane),每個窗格運行不同的命令。以下命令都是在 Tmux 窗口中執行。

5.1 劃分窗格

tmux split-window命令用來劃分窗格。


# 劃分上下兩個窗格
$ tmux split-window

# 劃分左右兩個窗格
$ tmux split-window -h

5.2 移動光標

tmux select-pane命令用來移動光標位置。


# 光標切換到上方窗格
$ tmux select-pane -U

# 光標切換到下方窗格
$ tmux select-pane -D

# 光標切換到左邊窗格
$ tmux select-pane -L

# 光標切換到右邊窗格
$ tmux select-pane -R

5.3 交換窗格位置

tmux swap-pane命令用來交換窗格位置。


# 當前窗格上移
$ tmux swap-pane -U

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

5.4 窗格快捷鍵

下面是一些窗格操作的快捷鍵。

  • Ctrl+b %:劃分左右兩個窗格。
  • Ctrl+b ":劃分上下兩個窗格。
  • Ctrl+b <arrow key>:光標切換到其他窗格。<arrow key>是指向要切換到的窗格的方向鍵,比如切換到下方窗格,就按方向鍵
  • Ctrl+b ;:光標切換到上一個窗格。
  • Ctrl+b o:光標切換到下一個窗格。
  • Ctrl+b {:當前窗格與上一個窗格交換位置。
  • Ctrl+b }:當前窗格與下一個窗格交換位置。
  • Ctrl+b Ctrl+o:所有窗格向前移動一個位置,第一個窗格變成最後一個窗格。
  • Ctrl+b Alt+o:所有窗格向後移動一個位置,最後一個窗格變成第一個窗格。
  • Ctrl+b x:關閉當前窗格。
  • Ctrl+b !:將當前窗格拆分為一個獨立窗口。
  • Ctrl+b z:當前窗格全屏顯示,再使用一次會變回原來大小。
  • Ctrl+b Ctrl+<arrow key>:按箭頭方向調整窗格大小。
  • Ctrl+b q:顯示窗格編號。

六、窗口管理

除了將一個窗口劃分成多個窗格,Tmux 也允許新建多個窗口。

6.1 新建窗口

tmux new-window命令用來創建新窗口。


$ tmux new-window

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

6.2 切換窗口

tmux select-window命令用來切換窗口。


# 切換到指定編號的窗口
$ tmux select-window -t <window-number>

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

6.3 重命名窗口

tmux rename-window命令用於為當前窗口起名(或重命名)。


$ tmux rename-window <new-name>

6.4 窗口快捷鍵

下面是一些窗口操作的快捷鍵。

  • Ctrl+b c:創建一個新窗口,狀態欄會顯示多個窗口的信息。
  • Ctrl+b p:切換到上一個窗口(按照狀態欄上的順序)。
  • Ctrl+b n:切換到下一個窗口。
  • Ctrl+b <number>:切換到指定編號的窗口,其中的<number>是狀態欄上的窗口編號。
  • Ctrl+b w:從列表中選擇窗口。
  • Ctrl+b ,:窗口重命名。

七、其他命令

下面是一些其他命令。


# 列出所有快捷鍵,及其對應的 Tmux 命令
$ tmux list-keys

# 列出所有 Tmux 命令及其參數
$ tmux list-commands

# 列出當前所有 Tmux 會話的信息
$ tmux info

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

八、參考鏈接

(完)