Linux终端利器tmux指南

tmux简介

tmux是BSD实现的Screen替代品,相对于Screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活、动态的进行各种布局和操作。它可以做到一条命令就启动起来(强大的配置)

安装方法
系统 安装命令
mac brew install tmux(前提需要安装homebrew)
ubuntu sudo apt-get install tmux
centos yum install -y tmux
其它 下载源码配置-编译-链接-安装
概念名词

在你输入tmux开启了tmux服务器后,会首先创建一个会话,而这个会话则会首先创建一个窗口,其中仅包含一个面板; 也就是说,这里看到的所谓终端控制台应该称作tmux的一个面板,虽然其使用方法与终端控制台完全相同。

概念 说明
server服务器 输入tmux命令时就开启了一个服务器
session会话 一个服务器可以包含多个会话
window窗口 通过c-b-c创建,所有窗口的名称显示在底部状态栏上,一个会话可以包含多个窗口
pane面板 窗口里面的分屏,可通过c-b-%创建,一个窗口可以包含多个面板
使用场景和优点
  1. tmux命令开启一个终端之后,可以在这个终端里开启多个windows,同时还可以把windows split成多个pane,并行工作
  2. ssh登录远程主机的情景下,一旦ssh断开,那么当前账户登录的任务就被取消了,但是使用 tmux 可以在断开之后继续工作,下次登录可以查看

常用默认快捷键

tmux里边所有快捷键都默认以c-b作为前缀,也就是以ctrl+b开头,当然你也可以自行配置;

  1. 基本命令
    • tmux创建一个tmux session
    • tmux new -s session_name创建一个叫做session_name的 session
    • tmux ls\tmux list-sessions列出现有的所有session
    • tmux info列出所有的 session, window, pane, 运行的进程号等
    • tmux list-keys列出所有可以的快捷键和其运行的 tmux 命令
    • tmux list-commands列出所有的 tmux 命令及其参数
    • tmux at(attach) -t session_name进入叫做session_name的session
    • tmux detach\c-b-d离开当前开启的session
    • tmux kill-session -t session关闭开启的session
  2. 基本操作

    • d脱离并保存当前会话,可暂时返回Shell界面,tmux仍在后台运行
    • ctrl + z挂起当前会话
    • s选择并切换会话;在同时开启了多个会话时使用
    • D选择要脱离的会话;在同时开启了多个会话时使用
    • :进入命令行模式;此时可输入支持的命令,例如 kill-server 关闭所有tmux会话
    • t显示当前的时间
  3. 窗口操作

    • c创建新窗口
    • &关闭当前窗口
    • [0-9]数字键切换到指定窗口
    • p切换至上一窗口
    • n切换至下一窗口
    • l切换到最后使用的窗口
    • l前后窗口间互相切换
    • w通过窗口列表切换窗口
    • ,重命名当前窗口,便于识别
    • .修改当前窗口编号,相当于重新排序
    • f在所有窗口中查找关键词,便于窗口多了切换
  4. (面板)分屏操作
    • ?显示快捷键帮助
    • "将当前面板上下分屏(建议设置成 |)
    • %将当前面板左右分屏(建议设置成 -)
    • x关闭当前分屏
    • q显示面板编号
    • o选择当前窗口中下一个面板
    • ;切换到最后一个使用的面板
    • 方向键移动光标选择对应面板
    • z最大化当前所在面板
    • !面板转变成窗口

推荐配置

如果你有个性化配置的需要,包括快捷键,状态栏等,那么修改~/.tmux.conf文件可以达到你的目的,让你用起来更符合自己的习惯; 也可以通过配置~/.bashrc每次ssh登录时都默认attach或者新建tmux会话

  1. tmux.conf配置快捷键,配色等
# 开启鼠标生效
set-option -g mouse on

#设置前缀为Ctrl + x
set -g prefix C-x
unbind C-b

# key bindings for horizontal and vertical panes
unbind %
bind | split-window -h      # 使用|竖屏,方便分屏
unbind '"'
bind - split-window -v      # 使用-横屏,方便分屏

# status bar with load and time
set -g status-bg blue
set -g status-fg '#bbbbbb'
set -g status-left-fg green
set -g status-left-bg blue
set -g status-right-fg green
set -g status-right-bg blue
set -g status-left-length 90
set -g status-right-length 90
set -g status-left '[#(whoami)]'
set -g status-right '[#(date +" %m-%d %H:%M ")]'
set -g status-justify "centre"
set -g window-status-format '#I #W'
set -g window-status-current-format ' #I #W '
setw -g window-status-current-bg blue
setw -g window-status-current-fg green
# pane number display
set -g display-panes-active-colour colour33 #blue
set -g display-panes-colour colour166 #orange
set -g base-index 1
set -g pane-base-index 1
set -g display-time 3000
set -g history-limit 10000

# copy-mode 将快捷键设置为 vi 模式
setw -g mode-keys vi

# 选中窗口
bind-key k select-pane -U
bind-key j select-pane -D
bind-key h select-pane -L
bind-key l select-pane -R
  1. ~/.bash_rc配置登录时自动进入tmux

    tmux_init()
    {
        tmux new-session -s "xiaoyong" -d -n "local"    # 开启一个会话
        tmux new-window -n "other"          # 开启一个窗口
        tmux split-window -h                # 开启一个竖屏
        tmux split-window -v                # 开启一个横屏
        tmux -2 attach-session -d           # tmux -2强制启用256color,连接已开启的tmux
    }
    
    # 判断是否已有开启的tmux会话,没有则开启
    if which tmux 2>&1 >/dev/null; then
        test -z "$TMUX" && (tmux attach || tmux_init)
    fi
    

参考链接

  1. tmux指南
  2. tmux如何将内容复制到系统clipboard ? Mac下如果用 iterm2 可以在 preference 下选择 Applications in terminal may access clipboard