linux tmux 终端复用神器 走过路过不要错过

tmux是一个优秀的终端复用软件,即使非正常掉线,也能保证当前的任务运行,这一点对于远程SSH访问特别有用。例如我们正在linux环境中编写代码或者查看某个文件, 突然断网了,代码没有报错文件没有关闭,等我们再打开linux连接的时候发现代码不见,文件乱了。

简单地说,tmux对于我主要有三个功能:

  1. split窗口。可以在一个terminal下打开多个终端,也可以对当前屏幕进行各种split,即可以 同时打开多个显示范围更小的终端。
  2. 在使用SSH的环境下,避免网络不稳定,导致工作现场的丢失。
  3. 装*(这是我说的)

安装

centos系统: sudo yum install tmux
Ubuntu系统: sudo apt-get install tmux

基础概念

server服务器。输入tmux命令时就开启了一个服务器。
session会话。一个服务器可以包含多个会话。
window窗口。一个会话可以包含多个窗口。
pane面板。一个窗口可以包含多个面板。
tmux顶层概念

操作

Ctrl+d激活控制台;此时以下按键生效
系统操作?列出所有快捷键;按q返回
d脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
D选择要脱离的会话;在同时开启了多个会话时使用
Ctrl+z挂起当前会话
r强制重绘未脱离的会话
s选择并切换会话;在同时开启了多个会话时使用
:进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器
[进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出
~列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
窗口操作c创建新窗口
&关闭当前窗口
数字键切换至指定窗口
p切换至上一窗口
n切换至下一窗口
l在前后两个窗口间互相切换
w通过窗口列表切换窗口
,重命名当前窗口;这样便于识别
.修改当前窗口编号;相当于窗口重新排序
f在所有窗口中查找指定文本
面板操作将当前面板平分为上下两块
%将当前面板平分为左右两块
x关闭当前面板
!将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板
Ctrl+方向键以1个单元格为单位移动边缘以调整当前面板大小
Alt+方向键以5个单元格为单位移动边缘以调整当前面板大小
Space在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled
q显示面板编号
o在当前窗口中选择下一面板
方向键移动光标以选择面板
{向前置换当前面板
}向后置换当前面板
Alt+o逆时针旋转当前窗口的面板
Ctrl+o顺时针旋转当前窗口的面板
tmux使用键盘操作,常用快捷键

配置

tmux的系统级配置文件为/etc/tmux.conf,用户级配置文件为~/.tmux.conf。

一般我们使用时都是用的用户级,在linux session窗体输入命令: cd 回车。

再输入命令: ls -thla 回车,看一下有没有一个文件 .tmux.conf。

如果不存在.tmux.conf ,则直接touch .tmux.conf 或者 vim .tmux.conf, 在文件中增加以下内容(笔者使用多年,耐用配置),改完后按 esc键进入命令模式,再输入 (:wq)保存退出。

# 取消crtl + b 的前缀命令
unbind C-b
# 设置ctrl + a 位前缀命令
set -g prefix C-a
setw -g mode-keys vi
#水平或垂直分割窗口 (C+A+ :split-window + v/h)
unbind '"'
bind v splitw -v #分割成上下两个窗口
unbind %
bind h splitw -h #分割成左右两个窗口
#up
bind-key k select-pane -U
#down
bind-key j select-pane -D
#left
bind-key i select-pane -L
#right
bind-key l select-pane -R
bind r source ~/.tmux.conf \; display "Configuration reloaded!"

# resize pane
bind -r ^k resizep -U 10 # upward (prefix Ctrl+k)
bind -r ^j resizep -D 10 # downward (prefix Ctrl+j)
bind -r ^i resizep -L 10 # to the left (prefix Ctrl+h)
bind -r ^l resizep -R 10 # to the right (prefix Ctrl+l)

至此,在linux session窗口输入 tmux命令,然后回车(如下图),就可以开始浪了。

tmux入口

比如按我们的配置来说,进入到tmux 端口后,按键盘的 ctrl +a 松手的同事按下 h键, 则屏幕就会被分成左右两个。

发表回复