tmux的简介:

          tmux是一个优秀的终端复用软件,即使非正常掉线,也能保证当前的任务运行;这一点对于远程SSH访问特别有用,网络不好的情况下仍然能保证工作现场不丢失;此外,tmux完全使用键盘控制窗口,实现窗口的切换功能。

tmux两个主要功能:

           split(切割)窗口;可以在一个terminal下打开多个终端,也可以对当前屏幕进行各种split,即可以 同时打开多个显示范围更小的终端。

           在使用SSH的环境下,避免网络不稳定,导致工作现场的丢失。想象以下场景, 你在执行一条命令的过程中,由于网络不稳定,SSH连接断开了。这个时候,你就不知道之前 的那条命令是否执行成功。如果此时你打开了很多文件,进入了较深层次的目录,由于网络 不稳定,SSH连接断开。重新连接以后,你又不得不重新打开那些文件,进入那个深层次的 目录。如果使用了tmux,重新连接以后,就可以直接回到原来的工作环境,不但提高了工作 效率,还降低了风险,增加了安全性。


以下是 tmux 超越 screen 的地方:

           screen 的项目大体上已经终止了,并且代码中有大量的问题;

           tmux 是一个活跃的项目,并且其代码库经常进行更新;

           tmux 使用的是真正的客户端/服务器模型,而 screen 只是模拟了这种模型的行为;

           tmux 同时支持 emacs 和 vim 的快捷键;

           tmux 支持自动重命名窗口;

           tmux 可以高度的脚本化;

           tmux 的窗口分割功能更加先进;

初识tmux---编译安装tmux

PS:一个会话(Session)可以包含多个窗口,一个窗口(Window)可以包含多个窗格(Pane)。



一,编译安装tmux

1,首先安装依赖包libevent-2.0.21-stable.tar.gz

# wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz

# tar xf libevent-2.0.21-stable.tar.gz

# cd libevent-2.0.21-stable

# ./configure 

# make && make install


2,编译安装tmux

# git clone https://github.com/tmux/tmux.git

# cd tmux

# sh autogen.sh

# ./configure --prefix=/usr/lcoal/tmux

# make && make install


3,提供头文件

# ln -sv /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

# ldconfig -v


4,将tmux 脚本路径加入到PATH

# vim /etc/profile.d/tmux.sh

export PATH=$PATH:/usr/local/tmux/bin

# source /etc/profile


5,将tmux命令man 文档路径添加到MANPATH

# vim /etc/man.config

MANPATH /usr/local/tmux/share/man

6,配置tmux

# vim ~/.tmux.conf

# 设定tmux 命令**按键为ctrl+a
set-option -g prefix C-a
unbind-key C-b
bind-key C-a send-prefix

# 设定默认Shell
set-option -g default-shell /bin/zsh

# 设置窗口可自动调整index
set -g renumber-windows on

# 设定窗口起始
set-option -g base-index 1      ### 窗口的初始序号;默认为0,这里设置为1

set-option -g status-keys vi          ###操作状态栏时的默认键盘布局;可以设置为vi或emacs
set-option -g display-time 5000   ### 提示信息的持续时间;设置足够的时间以避免看不清提示,单位为毫秒
set-option -g repeat-time 1000    ###控制台**后的持续时间;设置合适的时间以避免每次操作都要先**控制台,单位为毫秒

# history
set-option -g history-limit 4096

# 设置复制模式,空格开始选,Enter结束复制
set-window-option -g mode-keys vi

# 开启status-bar uft-8支持
set-option -g status-utf8 on        ### 开启状态栏的UTF-8支持

# 设置pane前景色  
set -g pane-border-fg green  

# 设置pane背景色  
set -g pane-border-bg black

# 设置终端颜色为256色
set -g default-terminal "screen-256color"

# 设置窗口列表颜色
setw -g window-status-fg cyan
setw -g window-status-bg default
setw -g window-status-attr dim

# 切换panes
bind h select-pane -L
bind j select-pane -D
bind K select-pane -U
bind l select-pane -R
bind-key C-l last-pane

##Status bar
#colors
set -g status-bg black
set -g status-fg white

#开启status-bar uft-8支持
set -g status-utf8 on

## slignment
set-option -g status-justify centre

## spot at left
set-option -g status-left '#[bg=black,fg=green][#[fg=cyan]#S#[fg=green]]'
set-option -g status-left-length 20

## window
setw -g automatic-rename on
set-window-option -g window-status-format '#[dim]#I:#[default]#W#[fg=grey,dim]'

## spot at right
set -g status-right '#[fg=green][#[fg=cyan]%Y-%m-%d#[fg=green]]'
set-option -g status-right-length 50

## resize pane
bind -r ^k resizep -U 10
bind -r ^j resizep -D 10
bind -r ^h resizep -L 10
bind -r ^l resizep -R 10

# 设置 r 键为加载配置文件,并提示信息
bind r source-file ~/.tmux.conf \; display "配置文件已重新加载!"

# 设置窗口名字不能修改
set-option -g allow-rename off

# 设置启动窗口时默认名字
bind-key c new-window -n 'zsh'

# 开启window事件提示
setw -g monitor-activity on
set -g visual-activity on

set-window-option -g mode-keys vi    ### 复制模式中的默认键盘布局;可以设置为vi或emacs
set-window-option -g utf8 on              ### 开启窗口的UTF-8支持

# 复制和粘贴模式的快捷键
bind y copy-mode
bind c-y copy-mode
bind p paste-buffer
bind c-p paste-buffer

按下 Ctrl-a 后的快捷键如下:

基础
           ?     获取帮助信息

会话管理
           s     列出所有会话
           $     重命名当前的会话
           d     断开当前的会话
           
窗口管理
           c     创建一个新窗口
           ,     重命名当前窗口
           w     列出所有窗口
           %     水平分割窗口
           "      竖直分割窗口
           n     选择下一个窗口
           p     选择上一个窗口
           0~9 选择0~9对应的窗口
           
窗格管理
           %      创建一个水平窗格
           "       创建一个竖直窗格
           h       将光标移入左侧的窗格
           j        将光标移入下方的窗格
           l        将光标移入右侧的窗格
           k       将光标移入上方的窗格
           q       显示窗格的编号
           o       在窗格间切换
           }        与下一个窗格交换位置
           {        与上一个窗格交换位置
           !        在新窗口中显示当前窗格
           x       关闭当前窗格
           
其他
           t        在当前窗格显示时间