为了强化Linux使用技巧,打算学习一下超强Linux工具。
0x01 初识Tmux
Tmux 是一个终端复用器(terminal multiplexer),非常有用。如果能够熟练使用将会给日常的操作带来极大的便利。Tmux 解决了会话(session)与窗口(windows)绑定(共生存)的问题。可以使得session脱离窗口而存活,这个改变解决了很多问题,相当于一个接口实现了解耦合。
举个例子,我们打开terminal执行命令,然后关掉再次打开时不会是以前的会话,而是一个新的会话。如果使用tmux创建的会话,那么就可以将窗口关掉下次直接attach 就可以还原当前会话,是不是很方便。
0x1 基本概念
前面说了这么多先了解一下基本的几个概念,在tmux中有个操作键在所有功能键之前施放,如下所示,该键后续均用Cb表示
1 session(会话)
tmux的最大单元,所有session加起来存储的是整个tmux记录,再次打开时读取的session信息。利用Cb + s 展示当前计算机中所有的session
2 window(窗口)
在session中有window的概念,一个session可包含多个window如下图所示。利用Cb + n/p 可以选择或移动窗口,或者更改配置文件激活鼠标点击,后面有详细的配置介绍。
3 pane(面板)
pane是对窗口进行分割,也就是一个屏幕中可以有多个pane。如下图所示就是面板样式
0x02 安装
0x1 安装tmux
# Ubuntu 或 Debian
$ sudo apt-get install tmux
# CentOS 或 Fedora
$ sudo yum install tmux
# Mac
$ brew install tmux
0x2 安装插件管理器 TPM(Tmux Plugin Manager)
tmux有专门的插件管理器(2.1版本后才支持),通过插件管理器可以很方便地安装插件。安装过程如下:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
下载完成后将下面代码粘贴在~/.tmux.conf
中
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'git@github.com/user/plugin'
# set -g @plugin 'git@bitbucket.com/user/plugin'
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
更新配置 tmux source ~/.tmux.conf
0x4 Tmux配置文件
1 tmux 新配置项
新的配置项已简化为
set -g mouse on
之后执行tmux source ~/.tmux.conf
2 tmux 老配置项
以下的配置项在新版本中已经被废弃
setw -g mouse-resize-pane on
setw -g mouse-select-pane on
setw -g mouse-select-window on
setw -g mode-mouse on
setw 指令为老版本tmux内置指令,在bash中不能运行
0x03 基本用法
0x1 bash内会话管理
1 新建会话
第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。 $ tmux new -s
上面命令新建一个指定名称的会话。
2 后台运行
在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。 $ tmux detach
上面命令执行后,就会退出当前 Tmux 窗口,但是会话和里面的进程仍然在后台运行。 tmux ls
命令可以查看当前所有的 Tmux 会话。
$ tmux ls
# or
$ tmux list-session
3 接入会话
tmux attach
命令用于重新接入某个已存在的会话。
# 使用会话编号
$ tmux attach -t 0
# 使用会话名称
$ tmux attach -t
4 发送指令到会话执行
tmux send
命令用于发送给后台session去执行命令,用于已经存在的会话。
# 指定发送的session_name 和指令command内容
tmux send -t session_name "command" ENTER
5 关闭会话
tmux kill-session
命令用于杀死某个会话。
# 使用会话编号
$ tmux kill-session -t 0
# 使用会话名称
$ tmux kill-session -t
0x2 tmux内会话管理
指令 | 功能 |
---|
Cb+d | 将当前会话放置后台运行 |
Cb+s | 列出所有会话 并选择 |
Cb+$ | 重命名当前对话 |
0x3 bash内window操作
1 划分窗口
tmux split-window
命令用来划分窗格。一般用处不大只做记录。
# 划分上下两个窗格
$ tmux split-window
# 划分左右两个窗格
$ tmux split-window -h
2 创建新窗口
tmux new-window
命令用来创建新窗口。
$ tmux new-window
# 新建一个指定名称的窗口
$ tmux new-window -n
3 切换窗口
tmux select-window
命令用来切换窗口。
# 切换到指定编号的窗口
$ tmux select-window -t
# 切换到指定名称的窗口
$ tmux select-window -t
4 重命名窗口
tmux rename-window
命令用于为当前窗口起名(或重命名)。
$ tmux rename-window
0x4 tmux内window操作
指令 | 功能 |
---|
Ctrl+b c | 创建一个新窗口,状态栏会显示多个窗口的信息 |
Ctrl+b & | 关闭当前窗口 |
Ctrl+b p | 切换到上一个窗口(按照状态栏上的顺序) |
Ctrl+b n | 切换到下一个窗口 |
Ctrl+b w | 从列表中选择窗口 |
Ctrl+b
| 切换到指定编号的窗口,其中的 是状态栏上的窗口编号 |
Ctrl+b , | 窗口重命名 |
0x5 pane操作
1 移动光标
tmux select-pane
命令用来移动光标位置。一般用处不大只做记录。
# 光标切换到上方窗格
$ tmux select-pane -U
# 光标切换到下方窗格
$ tmux select-pane -D
# 光标切换到左边窗格
$ tmux select-pane -L
# 光标切换到右边窗格
$ tmux select-pane -R
2 交换pane位置
tmux swap-pane命令用来交换窗格位置。
# 当前窗格上移
$ tmux swap-pane -U
# 当前窗格下移
$ tmux swap-pane -D
3 pane快捷键
指令 | 功能 |
---|
Ctrl+b % | 划分左右两个pane |
Ctrl+b " | 划分上下两个pane |
Ctrl+b
| 光标切换到其他pane 是指向要切换到的pane的方向键,比如切换到下方pane,就按方向键↓ |
Ctrl+b ; | 光标切换到上一个pane |
Ctrl+b o | 光标切换到下一个pane |
Ctrl+b { | 当前pane左移 |
Ctrl+b } | 当前pane右移 |
Ctrl+b Ctrl+o | 当前pane上移 |
Ctrl+b Alt+o | 当前pane下移 |
Ctrl+b x | 关闭当前pane |
Ctrl+b ! | 将当前pane拆分为一个独立窗口 |
Ctrl+b z | 当前pane全屏显示,再使用一次会变回原来大小 |
Ctrl+b Ctrl+
| 按箭头方向调整pane大小 |
Ctrl+b q | 显示pane编号 |
0x04 插件
0x1 安装log记录插件
有两种安装方法,一种利用tpm插件安装一种手动安装 日志记录插件使用方法为:Cb + P 记录格式:tmux-#{session_name}-#{window_index}-#{pane_index}-%Y%m%dT%H%M%S.log
记录目录: $HOME (user home dir)
tpm插件安装 在 ~/.tmux.conf
中添加 set -g @plugin 'tmux-plugins/tmux-logging'
在tmux中利用Cb + I 更新并使用插件
git clone http://www.github.com/tmux-plugins/tmux-logging
0x05 操作流
0x1 日常操作流
tmux new -s "session name"
Cb + c 创建新窗口
Cb + , 修改窗口名字
重复2,3操作
利用Cb + n/p切换窗口
0x2 批量操作流
tmux new -d -s "a1" 在后台创建会话
tmux send -t a1 "command" ENTER a1发送会话
重复执行1,2