tmux
tmux 可用于在一个终端窗口中运行多个终端会话。最关键的是可以通过 Tmux 使终端会话运行于后台,不会因你的会话中断而导致程序退出!
基本使用
常用命令
# 启动一个新窗口w1
$ tmux new -s w1
# 退出
Ctrl+B d
# 回到w1窗口
$ tmux a -t w1
# 修改名字
$ tmux rename-session -t 0 kps
$ tmux ls
kps: 5 windows (created Mon Jul 25 10:40:29 2022) [272x52] (attached)
w1: 1 windows (created Tue Sep 6 14:26:22 2022) [272x52]
# 关闭窗口
$ tmux kill-session -t w1
# remap prefix from 'C-b' to 'C-x'
unbind C-b
set-option -g prefix C-x
bind-key C-a send-prefix
# Display help
bind -n F2 new-window "cat ~/.tmux.conf | grep -P '#{2}' | sed 's/^#\#//g' | less" \; rename-window "help"
bind -n F3 new-window "tmux list-keys | less" \; rename-window "list-keys"
# split panes using | and -
bind \\ split-window -h
bind - split-window -v
unbind '"'
unbind %
# sync-input
bind a set-window-option synchronize-panes on
bind b set-window-option synchronize-panes off
# reload config file (change file location to your the tmux.conf you want to use)
bind r source-file ~/.tmux.conf
tmux.sh 批量窗口
#!/bin/bash
while getopts "i:l:p:" opt
do
case $opt in
l)user=$OPTARG;;
p)port=$OPTARG;;
esac
done
argNum=$#
list=`echo $* | awk '{print $NF}'`
starttmux() {
local j=0
for host in `cat $list`
do
echo "$host"
hosts[$j]=$host
((j++))
done
[ $argNum -eq 1 ] && SSHCMD="ssh " || SSHCMD="ssh -l $user -p $port "
tmux new-window -a -n "new_window" "$SSHCMD${hosts[0]}"
unset hosts[0];
for i in "${hosts[@]}"; do
tmux split-window -t :"new_window" -h "$SSHCMD $i" >> /dev/null
tmux select-layout -t :"new_window" tiled > /dev/null
done
tmux select-pane -t 0
tmux set-window-option -t :"new_window" synchronize-panes on > /dev/null
tmux set synchronize-panes on
}
starttmux
Tmux内部常用命令
系统指令
| 前缀 | 指令 | 描述 |
|---|---|---|
| Ctrl+b | ? | 显示快捷键帮助文档 |
| Ctrl+b | d | 断开当前会话 |
| Ctrl+b | D | 选择要断开的会话 |
| Ctrl+b | Ctrl+z | 挂起当前会话 |
| Ctrl+b | r | 强制重载当前会话 |
| Ctrl+b | s | 显示会话列表用于选择并切换 |
| Ctrl+b | : | 进入命令行模式,此时可直接输入ls等命令 |
| Ctrl+b | [ | 进入复制模式,按q退出 |
| Ctrl+b | ] | 粘贴复制模式中复制的文本 |
| Ctrl+b | ~ | 列出提示信息缓存 |
窗口(window)指令
| 前缀 | 指令 | 描述 |
|---|---|---|
| Ctrl+b | c | 新建窗口 |
| Ctrl+b | & | 关闭当前窗口 |
| Ctrl+b | 0~9 | 切换到指定窗口 |
| Ctrl+b | p | 切换到上一窗口 |
| Ctrl+b | n | 切换到下一窗口 |
| Ctrl+b | w | 打开窗口列表,用于且切换窗口 |
| Ctrl+b | , | 重命名当前窗口 |
| Ctrl+b | . | 修改当前窗口编号(适用于窗口重新排序) |
| Ctrl+b | f | 快速定位到窗口(输入关键字匹配窗口名称) |
面板(pane)指令
| 前缀 | 指令 | 描述 |
|---|---|---|
| Ctrl+b | " | 当前面板上下一分为二,下侧新建面板 |
| Ctrl+b | % | 当前面板左右一分为二,右侧新建面板 |
| Ctrl+b | x | 关闭当前面板(关闭前需输入y or n确认) |
| Ctrl+b | z | 最大化当前面板,再重复一次按键后恢复正常(v1.8版本新增) |
| Ctrl+b | ! | 将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效) |
| Ctrl+b | ; | 切换到最后一次使用的面板 |
| Ctrl+b | q | 显示面板编号,在编号消失前输入对应的数字可切换到相应的面板 |
| Ctrl+b | { | 向前置换当前面板 |
| Ctrl+b | } | 向后置换当前面板 |
| Ctrl+b | Ctrl+o | 顺时针旋转当前窗口中的所有面板 |
| Ctrl+b | 方向键 | 移动光标切换面板 |
| Ctrl+b | o | 选择下一面板 |
| Ctrl+b | 空格键 | 在自带的面板布局中循环切换 |
| Ctrl+b | Alt+方向键 | 以5个单元格为单位调整当前面板边缘 |
| Ctrl+b | Ctrl+方向键 | 以1个单元格为单位调整当前面板边缘(Mac下 |
| Ctrl+b | t | 显示时钟 |
多窗口同步操作
setw synchronize-panes on