tmux - 终端多路复用器 / 应用服务管理器(误)

tmux 意为 terminal multiplexer (终端多路复用器),它允许用户在终端中使用多个虚拟终端,支持多会话、多窗口、布局等功能。

安装

Arch Linux:

$ sudo pacman -S tmux

Ubuntu/Debian 系:

$ sudo apt install tmux

0x01 基本操作

创建并进入新的 tmux 会话 (session)

$ tmux

此时会看到用户默认的 shell 运行在 tmux 虚拟终端里,可以像往常一样在里面运行命令。

创建新窗口(标签页)C-b c (Ctrl+B 然后按一下 C)

C-b (Ctrl+B) 是 tmux 默认的命令前缀 (prefix),通常后跟一个别的按键执行一个 tmux 命令。

窗口内的程序(通常是一个 shell)结束运行后,窗口会自动关闭。在大部分交互式 shell 中可以按 ^d 或者运行 exit 结束 shell 的运行。

断开会话C-b d

tmux 会话被断开后,虚拟终端会在后台保持运行,其中运行的程序不会受到影响。

连接会话

$ tmux a

$ tmux attach

0x02 开启鼠标支持

开启方式

在配置文件中打开鼠标支持:

sudo echo 'set -g mouse on' >> /etc/tmux.conf

或者通过 tmux 命令临时打开:

两种方式:(1) 在 tmux 环境中执行 shell 命令 tmux set mouse on;(2) 或者按下 C-b :,然后输入 set mouse on 并回车。

鼠标功能

  • 鼠标点击切换 tab/panel
  • 鼠标滚轮查看历史
  • 鼠标选择复制
  • ……

0x03 常用快捷键

C-b ? 列出快捷键 C-b : 开始输入 tmux 内置命令

窗口:

C-b c 创建窗口

C-b [数字] 切换到对应的窗口

C-b , 重命名窗口

会话:

C-b d 断开会话

C-b s 列出会话 (支持同时运行多个会话)

C-b D 列出客户端 (大写的 D 表示按 Shift+D)

(tmux 支持多个客户端共享会话,快和小伙伴们通过 ssh 一起 tmux a 吧!)

布局:

C-b " 上下切割

C-b % 左右切割

C-b [方向键] 在当前窗口中切换当前面板

C-b C-[方向键] 调整当前面板的大小

查看历史/剪贴操作 (复制模式):

C-b PgUp 切换到复制模式并向上滚动

C-b [ 切换到复制模式

C-b ] 输入 tmux 剪贴板中的内容到当前窗口

复制模式:q 退出,PgUp/PgDown/[方向键] 移动光标,C-[空格] 开始选择文本,C-w 结束选择文本并复制。

0x04 开机自启动 / 应用服务管理器

跟随用户启动

创建文件 ~/.config/systemd/user/tmux-startup.service(systemd 用户服务)

[Unit]
Description=Tmux Startup

[Service]
ExecStart=%h/bin/tmux-startup
Type=forking

[Install]
WantedBy=default.target

创建文件 ~/bin/tmux-startupchmod +x

#!/bin/bash

# 创建 "startup" 会话,初始窗口名为 "my-app"
tmux new-session -d -s "startup" -n "my-app"

# 向 "my-app" 窗口输入 "/usr/bin/my-app" 并回车
tmux send-keys -t "my-app" "/usr/bin/my-app" C-m

启用 "tmux-startup" systemd 用户服务:

$ systemctl --user enable tmux-startup

跟随系统启动

创建文件 /etc/systemd/system/tmux-startup.service(systemd 系统服务)

[Unit]
Description=Tmux Startup

[Service]
ExecStart=/home/THE_USER/bin/tmux-startup
WorkingDirectory=/home/THE_USER/
User=THE_USER
Type=forking

[Install]
WantedBy=default.target

创建文件 /home/THE_USER/bin/tmux-startupchmod +x(同“跟随用户启动”)

启用 "tmux-startup" systemd 系统服务:

$ sudo systemctl enable tmux-startup