本文最后更新于 777 天前,如遇到任何问题欢迎在评论区留言呀!
基本概念
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 类似于网页。
session 部分
新建 session
tmux new -s [会话名]
断开 session
prefix d
# detach
展示已有 session
tmux ls
恢复 session
tmux attach -t [会话名]
# 或者
tmux a -t [会话名]
# a 为 attach 的简写
# t 为 target 的简写
window 部分
新建 window
prefix c
切换 window
# 切换到下一窗口
prefix n
# 切换到上一窗口
prefix p
pane 部分
新建 pane
# 竖直分割线
prefix v
# 水平分割线
prefix h
切换 pane
# 顺时针方向切换 pane
prefix o
配置文件
用户目录下的.tmux.conf
中:
#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"
FAQ
- 为什么在服务器上使用 tmux 可以防止远程运行的程序中断?
通过 SSH 连接到服务器,所运行的所有程序,都是 SSH 的守护进程sshd
的子进程,当连接断开的时候,由于 ssh 对应的进程中断,所有的子进程都会中断。如果用 tmux,运行的程序是作为 tmux 的子进程存在的。
父子进程的关系如下:
仅通过 SSH:调用的程序 -> bash -> sshd -> systemd
tmux:调用的程序 -> bash -> tmux server -> systemd