最近在linux大棚上,感觉有些东西对于自己而言,还是非常有用的。这里就简单介绍下tmux这款工具。

tmux是什么?

tmux是什么?tmux是linux中一种管理窗口的程序。那么问题来了:Mac自带的Iterm2很好用啊。既支持多标签,也支持窗体内部Panel的分割,为什么还要用tmux?其实,多标签和分割窗体只是tmux的部分功能。用tmux的主要原因是它提供了一个窗体组随时存储和恢复的功能。

为什么要用tmux?

考虑下面两个场景:

  1. 公司台式机开了一堆vim和log打印窗口。下班了,到家后灵感突发,想要继续coding,登陆VPN,SSH连上台式后发现又要重新打开各种窗口,瞬间没心情了。。。FUCK!这个时候你就可以在你的公司台式机上装个tmux。同一组工作环境,在多处共享。
  2. 公司服务器上调试程序,开了一堆窗口。出去吃了个饭,发现SSH超时了,重头开始。。。FUCK!如果你之前使用了tmux就不会有这样的问题,attach就能找回原来打开的那些窗口。
    看到了这里,无论是对于运维还是开发人员而言,tmux对于那些需要多会话、多窗口、多pane的同学而言,都是很有需求的。

    如何使用tmux?

    tmux中基本概念

    我们先来理解下tmux的几个元素。tmux的主要元素分为三层:
  • Session 一组窗口的集合,通常用来概括同一个任务。session可以有自己的名字便于任务之间的切换。
  • Window 单个可见窗口。Windows有自己的编号,也可以认为和ITerm2中的Tab类似。
  • Pane 窗格,被划分成小块的窗口,类似于Vim中 C-w +v 后的效果。
    为了更好的理解,下面是三个元素在tmux中的具体展现。
    tmux2.png
    这里只演示了一个window的情况,事实上,对于一个session而言,下面可以启动多个window,对于一个windows下面也可以启动多个pane.

    tmux安装

    1
    2
    3
    4
    5
    6
    7
    8
    // debian系列
    apt-get install tmux

    // redhat系列
    yum install tmux

    // macos系列
    brew install tmux

tmux基本使用

对于tmux使用的话,有一个最basic的规则,对于任何命令,首先都要先按下prefix,这个prefix是可以配置的,用户可以根据自己的喜好来进行配置。这么说有点抽象,那么举个栗子。比如

1
2
3
4
5
// 启动tmux
tmux

// 默认情况下,这里会启动一个tmux的session,对于一个session,下面最少有一个window,这个时候比如我们要启动在这个session下启动第二个window
// 首先按下ctrl+b,再按下c。这样就会在当前的这个session下启动另外一个window

很简单吧,easy.

tmux常用快捷键

tmux的快捷键是可配置的,tmux启动时,首先回去尝试搜索~/.tmux.conf,所有的key-binding都是在tmux下进行配置的。这里就大概展示下我这个比较搓的配置,这节看看就好,后面的话,会介绍第三方比较好点的配置。

1
2
3
4
5
6
# 把默认的的ctrl-b换成ctrl-a
unbind C-b
set -g prefix C-a

# 设置一个重新载入配置文件的快捷键ctrl-r,修改配置文件之后,先按住ctrl-a,再按ctrl-r就会让配置文件不用重启tmux直接生效。
bind R source-file ~/.tmux.conf ; display-message "Config reloaded.."

tmux常用快捷键(默认)

这里之前我也是介绍过了,tmux快捷键都是prefix+key binding的形式,这里我也直接用prefix+key binding来表示快捷键.

Session相关操作

操作 快捷键
查看/切换session prefix s
离开Session prefix d
重命名当前Session prefix $

Window相关操作

操作 快捷键
新建窗口 prefix c
切换到上一个活动的窗口 prefix space
关闭一个窗口 prefix &
使用窗口号切换 prefix 窗口号

Pane相关操作

操作 快捷键
切换到下一个窗格 prefix o
查看所有窗格的编号 prefix q
垂直拆分出一个新窗格 prefix “
水平拆分出一个新窗格 prefix %
关闭一个新窗格 prefix x
暂时把一个窗体放到最大 prefix z

tmux第三方配置

这里我就讲下我自己在用的一份配置
配置方法也简单

1
2
git clone https://github.com/tony/tmux-config.git ~/.tmux
ln -s ~/.tmux/.tmux.conf ~/.tmux.conf

配置好用起来大概是这样的
tmux3.png
如果还需要加入系统状态比如内存、cpu使用率之类的,tmux-config也提供,不过需要自行配置。