Tmux 使用笔记

0. 基本概念

server:server 是一个进程,在后台运行,负责管理 tmux 的状态信息、在 tmux 中运行的所有程序,并跟踪他们的输出。server 进程和下面提到的 client 的进程通过 socket 进行通信。

client:client 进程是接受用户输入和展示程序输出的终端窗口程序对应的进程。detach 关闭终端窗口后进程结束,attach 打开终端窗口进程创建。

panes:pane 就是图中显示的一块区域,一个 pane 下有一个 shell 的进程(例如 bash、zsh 等)负责处理用户的输入。

windows:window 类似于多桌面中的一个桌面。

sessions:多个 window 就组成了一个 session,同一个 window 可以归入不同的 session 进行管理。类似于网页,sesion 类似于收藏夹,window 类似于网页。

tmux 主要窗口示意图

1. session 部分

1.1. 新建 session

1
tmux new -s [会话名]

1.2. 断开 session

1
2
prefix d
# detach

1.3. 展示已有 session

1
tmux ls

1.4. 恢复 session

1
2
3
4
5
tmux attach -t [会话名]
# 或者
tmux a -t [会话名]
# a 为 attach 的简写
# t 为 target 的简写

2. window 部分

2.1. 新建 window

1
prefix c

2.2. 切换 window

1
2
3
4
# 切换到下一窗口
prefix n
# 切换到上一窗口
prefix p

3. pane 部分

3.1. 新建 pane

1
2
3
4
# 竖直分割线
prefix v
# 水平分割线
prefix h

3.2. 切换 pane

1
2
# 顺时针方向切换 pane
prefix o

4. 配置文件

用户目录下的.tmux.conf中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#remap prefix from 'C-b' to 'M-Space'
unbind C-b
set-option -g prefix M-Space

# split panes using | and -
bind v split-window -h
bind h split-window -v
unbind '"'
unbind %

# enable mouse
set -g mouse on

# add color
set -g default-terminal "xterm-256color"

5. FAQ

  • 为什么在服务器上使用 tmux 可以防止远程运行的程序中断?
    通过 SSH 连接到服务器,所运行的所有程序,都是 SSH 的守护进程sshd的子进程,当连接断开的时候,由于 ssh 对应的进程中断,所有的子进程都会中断。如果用 tmux,运行的程序是作为 tmux 的子进程存在的。
    父子进程的关系如下:
    仅通过 SSH:调用的程序 -> bash -> sshd -> systemd
    tmux:调用的程序 -> bash -> tmux server -> systemd

6. 参考资料

  1. Tmux Getting Started

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 协议 ,转载请注明出处!