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-startup 并 chmod +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-startup 并 chmod +x(同“跟随用户启动”)
启用 "tmux-startup" systemd 系统服务:
$ sudo systemctl enable tmux-startup