tmux — 会话保存、终端复用工具

Tags
linux
Created
Jan 8, 2016 2:56 PM

优点是连接远端服务器开启 tmux 服务就可以在一个终端内启用多个控制台

并且在下次进入 ssh 服务器时会话还能通过 tmux 还原

在远端服务器上:不要轻易 按 ctrl+d, ctrl+z,输入 exit,不要 kill 任何进程,不要 rm 任何文件,不要执行你不确定的命令。

tmux 可以用 socket 隔离,默认使用 default

其中一个 socket 中有且仅有一个 tmux 服务进程和一些 session 进程(客户端)

https://gist.github.com/ryerh/14b7c24dfd623ef8edc7

tmux参数:

usage: tmux [-28lquvV] [-c shell-command] [-f file] [-L socket-name]

[-S socket-path] [command [flags]]

tmux ls 查看session列表(list-session),不同socket之间还要加-L参数

tmux attach [-t sessionname]重新进入 session(默认自然数)(attach可简写成a、at)。

tmux new-session -s session-name 创建一个命名session(可简写成new)

tmux kill-server

tmux kill-session -t sessionname

tmux show -g prefix 查看全局设置

默认前置键:C-b ,

s 选择一个会话

$ 重命名当前会话

c 新建window

重命名当前window

.  移动window

& 关闭当前window(提示)

f 搜索window

w 选择window ,n(下一个),p(上一个),l 最后一个选择窗口(切换)

" 新开水平面板

% 新开垂直面板

x 删除当前面板(提示)

q 面板显示数字,接着按数字切换

z 临时全屏化面板

方向键 切换面板(o切换)

C-方向键  改变面板大小

{ / }左右pane交换

空格 切换面板布局

? 查看绑定键

! 移动当前面板到新window

d 分离当前会话(detached,回到tmux外面)

[ 进入选择模式

空格开始复制

回车结束复制

] 粘贴

= 选择buffer粘贴

键入 y 复制 buffer 中最新的内容到系统剪贴板。

: 命令模式,运行的命令对所有session生效,如:

kill-session 关闭当前 session(exit、ctrl+d最后一个面板会关闭会话),所有快捷键通过命令显示

对于linux,可以使用xclip,配置(.tmux.conf)如下:

bind y run-shell "tmux show-buffer | xclip -sel clip -i" \; display-message "Copied tmux buffer to system clipboard"

自定义前置键:

unbind C-b

set -g prefix M-q

bind M-q send-prefix

set-option -g display-time 5000 #提示信息的持续时间;设置足够的时间以避免看不清提示,单位为毫秒

自动生成布局

新建一个文件 ~/.tmux/mylayout:

selectp -t 0 #选中第0个窗格

splitw -h -p 50 #将其分成左右两个

selectp -t 1 #选中第一个,也就是右边那个

splitw -v -p 50 #将右边那个分成上下两个

selectp -t 0 #选中第一个

然后在 .tmux.conf 后面添加:

bind D source-file ~/.tmux/mylayout

这样,每次当我们启动 tmux 后, 可以使用 ctrl-b + D 来生成布局

脚本化:

# auto tmux open

tmuxpath=$(which tmux)      # tmux path

sessionname="mantou" # session name

if [ -z $tmuxpath ]; then

echo "You need to install tmux."

fi

$tmuxpath has -t $sessionname 2> /dev/null # 有没有这个会话,没有就会执行下面的if

if [ $? != 0 ] && [ "${TMUX_OPENED}" == "" ]; then

$tmuxpath new -d  -n herweb -s $sessionname "cd ~/her-web && node app" #w1

$tmuxpath splitw -h "cd ~/her-web && gulp watch"

$tmuxpath splitw -v "cd ~/her-web"

$tmuxpath neww -n heradmin "cd ~/her-admin && node app" #w2

$tmuxpath splitw -h "cd ~/her-admin && gulp watch"

$tmuxpath splitw -v "cd ~/her-admin"

$tmuxpath neww -n ssh "ssh dev -t 'tmux a -t mt'" #3

$tmuxpath neww -n local "cd ~ && node www" #4

$tmuxpath neww -n ngrok "cd ~/下载/ittun_linux64 && ./bin/ngrok -config ./bin/ngrok.cfg start web web3 web2 ssh" #5

$tmuxpath splitw -h "cd ~/下载/ngrok && ./ngrok -config ./ngrok.cfg start ssh"

$tmuxpath neww -n bash #6

$tmuxpath selectw -t $sessionname:6

$tmuxpath selectp -t 1

export TMUX_OPENED=1

fi

$tmuxpath a -t $sessionname # 新开的面板这里会在执行一次,所以有嵌套提示

SuperMade with Super