之前的文章里面介绍过screen命令的应用,但是没有用到tmux,所以不了解. 最近用到了tmux,不过也只是简单的应用,并没有特别复杂高端的应用.
一: 简介
二: 安装和查询
三: tmux终端命令行操作
四: 快捷键操作
五: 配置文件
一:简介
What is a terminalmultiplexer? It lets you switch easily between several programs inone terminal, detach them (they keep running in the background) andreattach them to a different terminal.
Tmux简单来说就是终端里的"窗口管理器",如果使用终端登录到远程主机并运行前台程序,那么这个窗口等于就被占用了,想要做其他操作,就得再连接一次。但是如果在远程主机上运行tmux,那么就可以开启多个控制台(类似于窗口),相当高效.
另一个很有用的功能就是,连接到远程主机之后,一旦断开,那么当前账户登录的任务就被取消了,但是使用tmux 可以在断开之后继续工作,下次登录可以查看。其他的功能还有:
1: 窗口切换,每个窗口里还可以分割面板
2: 配置方便,可以使用脚本
3: 类似vim 的双层操作逻辑
4: 复制粘贴缓冲区
二: 安装和查询
Ubuntu: sudo apt-getinstall tmux
CentOS: sudo yuminstall tmux
Mac: brew intsalltmux
$tmux -V#查看版本
tmux 1.8
$ dpkg -L tmux#查看tmux安装的一些文件的位置
$tmux list-keys#列出所有可用的快捷键和其运行的tmux命令
$tmux list-commands#列出所有的tmux命令及参数
$tmux info#当前所有的session,window, pane, 进程号等信息
tmux show-option -g| grep prefix #查看绑定的前缀
三: tmux终端命令行操作
如上的图片可以看出session会话,window窗口,pane面板之间的关系.输入tmux打开的是一个session,一个session里面有若干个window,每个window可以有若干个pane.
session 操作:
tmux new -ssession_name #创建一个叫做session_name的tmux session
tmux a -tsession_name #重新开启一个叫做session_name的tmux session
tmux switch -tsession_name #转换到session_name这个tmuxsession
tmux list-session/tmux ls #列出所有session
tmux detach#暂时离开当前session
tmux kill-server#关闭所有session
tmux kill-server -tsession_name #关闭指定session
window操作:
tmux new-window#创建一个新的window
tmux list-windows
tmux select-window -t:0-9#根据索引转到该window
tmux rename-window #重命名当前window
pane操作:
tmux split-window #将window垂直划分为两个pane
tmux split=window -h #window 水平划分为两个pane
tmux swap-pane -[UDLR]. #在指定的方向交换pane
tmux select-pane -[UDLR] #在指定的方向选择下一个pane,也可以用ctrl+b加上下左右键来切换.
四: 快捷键操作
如下的bind-key默认都是ctrl+b,当然你也可以在配置文件中修改.
$ tmux list-keys
分类来看:
基本操作
? 列出所有快捷键;按q返回
d 脱离当前会话,可暂时返回shell界面s选择并切换会话;在同时开启了多个会话时使用
D 选择要脱离的会话;在同时开启了多个会话时使用
: 进入命令行模式;此时可输入支持的命令,例如kill-server关闭所有tmux会话
[ 复制模式,光标移动到复制内容位置,空格键开始,方向键选择复制,回车确认,q/Esc退出
] 进入粘贴模式,粘贴之前复制的内容,按q/Esc退出
~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
t 显示当前的时间
ctrl+z 挂起当前会话
window操作
c 创建新窗口
& 关闭当前窗口
:kill-server 关闭所有session
[0-9] 数字键切换到指定窗口
p 切换至上一窗口
n 切换至下一窗口
l 前后窗口间互相切换
w 通过窗口列表切换窗口
, 重命名当前窗口,便于识别
. 修改当前窗口编号,相当于重新排序
f 在所有窗口中查找关键词,便于窗口多了切换
面板操作
“ 将当前面板上下分屏
% 将当前面板左右分屏
x 关闭当前分屏
! 将当前面板置于新窗口,即新建一个窗口,其中仅包含当前面板
ctrl+方向键 以1个单元格为单位移动边缘以调整当前面板大小
alt+方向键 以5个单元格为单位移动边缘以调整当前面板大小
q 显示面板编号
o 选择当前窗口中下一个面板
方向键 移动光标选择对应面板
{ 向前置换当前面板
} 向后置换当前面板
alt+o 逆时针旋转当前窗口的面板
ctl+o 顺时针旋转当前窗口的面板
z最大化当前所在面板
page up向上滚动屏幕,q退出
page down 向下滚动屏幕,q退出
五: 配置文件
及时生效
#查看当前默认的设置
tmux show-options -g
#例如我想修改默认的快捷键的前缀:
tmux show-options -g| grep prefix #查看前缀
$ tmux show-options-g | grep prefix
prefix C-b
tmux set -g prefixC-a #我希望把它改成C-a
tmux unbind C-b
tmux bind C-asend-prefix #这些在终端输入,会在tmux的内置命令中及时生效,但是关闭后就失效了.
永久生效:
需要创建和修改配置文件.一般配置文件是/etc/tmux.conf或者~/.tmux.conf.在我的PC里面并没有查找到相应的配置文件,于是就需要我自己来配置了. https://askubuntu.com/questions/192401/where-is-the-default-tmux-conf-file-located
#生成配置文件,利用当前的配置
tmux show -g | cat >~/.tmux.conf
#或者在/usr/share/doc/tmux/examples里面cp一个conf文件过来,或者直接在网上找一个conf文件过来用用.
可以通过mantmux来看看各种设置的意义,也可以随便改改设置来观察到底有什么作用.
修改配置文件之后,需要重启tmux生效,命令行
source-file~/.tmux.conf
#或者在conf文件最后加上如下语句,以后直接前缀+r就可以更新生效
bind r source-file~/.tmux.conf \; display “Reloaded!”
如下是我当前的conf文件:
#base settings
set-option -gterminal-overrides 'xterm*:XT:smcup@:rmcup@'
set-option -gmode-keys vi #快捷键设置为vi模式
set-option -gdisplay-time 10000
set-option -gdisplay-panes-time 10000
set-option -ghistory-limit 10000
set-window-option -gaggressive-resize on
setenv -guBASH_PROFILE_READY
# Mimic GNU/screen.Muscle-memory FTW!
set-option -g prefixC-a
unbind-key C-b
bind-key asend-prefix #修改bind-key
bind-key C-aselect-window -l
bind-key Acommand-prompt -I "#W" "rename-window %%"
#bind-key '"'choose-window
# VIM-like bindings
bind-key hselect-pane -L
bind-key jselect-pane -D
bind-key kselect-pane -U
bind-key lselect-pane -R
bind-key Tbreak-pane
bind-key Hresize-pane -L 20
bind-key Jresize-pane -D 5
bind-key Kresize-pane -U 5
bind-key Lresize-pane -R 20
bind-key Escapecopy-mode
bind-key ssplit-window
bind-key vsplit-window -h
bind-key Schoose-window "join-pane -s %%"
bind-key Vchoose-window "join-pane -h -s %%"
# customisation
bind-key /command-prompt "find-window '%%'"
bind-key `choose-session
bind-key Mchoose-session "move-window -t '%%' \; switch-client -t '%1'"
bind-key Ncommand-prompt -p "New session name: " "new-session -s'%%'"
# Use "if-shell"to run a bash command
# and check theversion of tmux
if-shell '[ "$(tmux-V)" == "tmux 1.9" ]' "bind-key c new-window -c'#{pane_current_path}'"
if-shell '[ "$(tmux-V)" == "tmux 1.9" ]' "bind-key s split-window -c'#{pane_current_path}'"
if-shell '[ "$(tmux-V)" == "tmux 1.9" ]' "bind-key v split-window -h-c '#{pane_current_path}'"
# Terminalmanagement
set-option -gset-titles on
set-option -gset-titles-string "#S:#I:#W | #H"
# Aesthetics
set-option -gstatus-fg white
set-option -gstatus-bg blue
set-option -gwindow-status-current-bg red
set-option -gstatus-right "#H #(cat /proc/loadavg)"