文档章节

在 Linux/Mac 安装 Tmux 及其配置

EchoAm3
 EchoAm3
发布于 2017/03/23 23:24
字数 3066
阅读 7709
收藏 0

介绍

Tmux是linux中一种管理窗口的程序, 不同于iTerm2, 它提供了一个Session随时存储和恢复的功能(Session概念后面会介绍), detach Session(保持Session后台运行)然后重新attach Session

常用场景, 在公司Terimal中开了多个标签和文件, 下班回家忽然有了灵感想要继续编写, 使用ssh远程链接公司电脑, 然后发现标签页和文件都要重新打开, 如果使用Tmux, 下班了detach当前Session, 回家ssh远程连接后, attach Session后, 场景恢复又能愉快的继续编程了…

 

Mac安装

# 安装Mac OS X下遗失的包管理Homebrew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# 安装神器Tmux
$ brew install tmux

 

Ubuntu/Debain 安装

sudo apt-get install tmux

基础

# 启动Tmux
$ tmux
# 关闭Tmux
$ ctrl + d
# 或退出
$ exit

重点

tmux有三个基本概念:会话(Session),窗口(Window)和面板(Pane). 当你输入tmux后, tmux实际做的事是首先创建一个会话(Session), 然后在这个会话中创建一个窗口, 你可以继续创建多个窗口(Window), 每个窗口初始只包含一个面板, 继续分屏后, 会出现多个面板(Pane) 你在其中看到的终端实际上都属于tmux的某个面板

更进一步讲, Session可以包含多个Window, 每个Window又可以包含多个Pane

 

基本操作

所有快捷键的执行方式:

按下control + b两个按键组合, 然后松开control + b(为了告诉Tmux我要用Tmux的快捷键了), 然后在按快捷键触发各种行为。

例如: C-b ?的执行过程为按下control + b两个按键组合, 然后松开control + b, 然后在按’?’键, 会显示所有快捷键的列表。

  • C-b ? 列出所有快捷键, 按q或Esc返回
  • C-b d detach当前会话,可暂时返回Shell界面,输入tmux attach能够重新进入之前会话
  • C-b s 选择并切换会话;在同时开启了多个会话时使用

快捷键

Session操作

  1. # 创建一个新的session
  2. $ tmux new-s <name-of-my-session>
  3. # 在当前session中创建一个新的Session, 并保证之前session依然存在
  4. # C-b : 然后输入下面命令
  5. new-s <name-of-my-new-session>
  6. # 进入名为test的session
  7. $ tmux attach -t test

Window操作

  • C-b c 创建一个新窗口
  • C-b & 关闭当前窗口
  • C-b w 列出所有的窗口选择
  • C-b p 切换到上一个窗口
  • C-b n 切换到下一个窗口
  • C-b 窗口号 使用窗口号切换窗口(例如窗口号为1的, 则C-b 1)
  • C-b , 重命名当前窗口,便于识别各个窗口

Pane操作

  • C-b % 横向分Terminal
  • C-b " 纵向分Terminal
  • C-b 方向键 则会在自由选择各面板
  • C-b x 关闭当前pane
  • C-b q 显示面板编号
  • C-b s 列出所有会话
  • C-b d detach当前session(可以认为后台运行)

------------------------------------------------------------------------------

简易美化

默认情况下,Tmux的状态栏看起来是下图这个样子(图中绿底部分):

我们可以根据需要改变状态栏的外观。对我来说,我喜欢下图这种清爽的外观。

为了达到上图的效果,我将如下的配置加入到了配置文件 ~/.tmux.conf 中。

# 状态栏
  # 颜色
  set -g status-bg black
  set -g status-fg white

  # 对齐方式
  set-option -g status-justify centre

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

  # 窗口列表
  setw -g automatic-rename on
  set-window-option -g window-status-format '#[dim]#I:#[default]#W#[fg=grey,dim]'
  set-window-option -g window-status-current-format '#[fg=cyan,bold]#I#[fg=blue]:#[fg=cyan]#W#[fg=dim]'

  # 右下角
  set -g status-right '#[fg=green][#[fg=cyan]%Y-%m-%d#[fg=green]]'

------------------------------------------------------------------------------

进阶美化

  从 https://github.com/gpakosz/.tmux 下载已配置文件,如下操作:

  安装使用

  1. $ cd
  2. $ rm -rf .tmux
  3. $ git clone https://github.com/gpakosz/.tmux.git
  4. $ ln -s .tmux/.tmux.conf
  5. $ cp .tmux/.tmux.conf.local.

   优点

  • 使用C-a作为前缀更方便使用, 同时保存了C-b的触发前缀
  • powerline状态条美化(用过vim的都应该比较熟悉)
  • 显示笔记本电池状态

附一张配置过后的图:

 

------------------------------------------------------------------------------

总结一下学到的几个快捷键:

C-b c 创建一个新窗口

C-b & 关闭当前窗口

C-b p 切换到上一个窗口

C-b n 切换到下一个窗口

会话,窗口,面板

tmux有三个基本概念:会话,窗口和面板。当你输入tmux后,tmux实际做的事是首先创建一个会话,然后在这个会话中创建一个窗口,这个窗口只包含一个面板,你在其中看到的终端实际上都属于tmux的某个面板。关于窗口的操作在上一节中已经说明,面板又是什么呢?有人说了,你一个窗口就占满一屏,要看另外一个窗口得切换过去,我想要的是同时看到多个窗口的内容,好了,面板就是干这个事儿的。当你在某个窗口中按下C-b %时,你会发现窗口被横向分成两个面板,而如果按下C-b ",窗口则被纵向分成两个面板,按C-b o会跳到下个面板,C-b加方向键则会在自由选择各面板,C-b x会关闭当前面板。

一个会话可以包含多个窗口,我们可以用会话来组织窗口,会话相当于一个工作环境,比如我们可以创建一个work的会话,里面放我们平时开发需要的窗口,tmux默认会创建一个会话,我们也可以通过参数创建指定名称的会话,例如

tmux new-session -s work

在控制台中输入这条命令就可以创建一个名为work的会话并进入它,我们也可以同时指定这个会话中第一个窗口的名字,比如MySQL

tmux new-session -s work -n mysql

关于会话有两个非常重要的操作,即attach和detach,attach就是让某个会话到前台来运行,而detach则是将某个会话放到后台。通常,当我们打开tmux时,tmux在创建一个会话的同时也会attach到这个会话,所以我们会立即看到tmux的窗口。在某个会话中,我们按C-b d会detach这个会话,也就会回到原先的终端控制台,但实际上并没有退出这个会话,比如你可以通过在终端中输入下列命令重新attach到work会话:

tmux attach -t work

一个时刻可能存在多个会话,在tmux外面通过下列命令可以列出当前有哪些会话:

tmux ls

在tmux里面可以按下C-b s来列出会话,然后可以选择一个切换过去。

在我们创建会话的同时也可以加上-d选项以表示不自动attach到这个新会话:

tmux new-session -s work -d

这样的话你会通过tmux ls看到新创建的work会话,并可以通过tmux attach -t workattach到该会话中。

在控制台上可以通过下列命令关闭会话work:

tmux kill-session -t work

上面的一些以tmux打头的命令都是tmux提供的外部接口,是在命令行中供我们直接运行的,事实上,除了对会话的操作之外,在外部也可以直接创建窗口,例如:

tmux new-window -n project -t work

这条命令可以针对work会话创建一个名为project的窗口。

在创建会话和窗口时甚至可以指定要执行的命令:

tmux new-session -s work -n dev -d "ssh user@example.com"

以上命令会在创建work会话后,在其第一个窗口的控制台中执行SSH命令以远程连接到服务器中。

创建窗口时也与此类似,可将命令写在最后。

更为强大的是,tmux可以让你向某个会话[:窗口:面板]发送任意按键:

tmux send-keys -t work:editor 'emacs' C-m

上述命令能够向work会话的editor窗口发送emacs加回车,即在这个窗口中打开emacs编辑器。

有了tmux的各种强大的外部命令,我们就可以自定义脚本,自动化很多事情:

tmux new-session -s work -n mysql -d 'mysql'
tmux new-window -n editor -t work
tmux send-keys -t work:editor 'emacs' C-m

将上述命令写在一个shell脚本里,就可以一键完成下述功能:创建一个名为work的会话,第一个窗口命名为mysql,并在其中执行mysql命令进入mysql,第二个窗口名为editor,并在其中打开emacs。

配置文件

除了强大的外部命令之外,tmux也可以通过自己的配置文件来自定义很多东西,在tmux运行时,会读取/etc/tmux.conf中的配置作为系统级别的配置,然后会在当前用户的家目录里面读取.tmux.conf这个配置文件,如果都找不到,就用默认配置。一般情况下,我们只需要在我们家目录里面创建.tmux.conf这个文件来进行自定义配置即可。

在配置文件中,我们可以用到tmux提供的很多命令,可以设置很多变量的值或者给tmux配色等,实际上,很多命令既有外部命令行接口,又可以在配置文件中使用,还可以在tmux内部的命令模式中使用(C-b :命令)。比如上节中用脚本完成的事情同样也可以用配置文件完成,在配置文件中不用加tmux:

new-session -s work -n mysql -d 'mysql'
new-window -n editor -t work
send-keys -t work:editor 'emacs' C-m

按键同步发送

我一开始用tmux就是为了向多个终端同步发送一些命令,比如用于多台相同环境的机器上的配置文件同步修改和程序发布。其实这在tmux中只需要一条命令就可搞定,比如有两台机器,首先在一个窗口中开两个面板,分别连到这两台机器,然后按C-b :set synchronize-panes即可开/关面板的同步模式,开启后,在一个面板中输入的按键也会同步发送到另一个面板中,是不是非常容易?

永不断线

tmux实际上是server/client模式,当创建第一个会话时,server就会运行,以后的会话都以attach/detach的方式被server服务,当所有会话都退出时,server才会退出。在我们工作中,经常是SSH连接到服务器上去写代码,但由于网络的不稳定性,会偶尔发生SSH连接中断的情况,这样我们之前的会话就会丢失,如果是一个nohup的后台任务还好,只要我们重新连上去之后,还是可以找到的(但至少需要回到事发现场,比如重新cd到原来的文件夹等),而如果我们正在写代码,还没来得及保存,很可能就杯具了(除非某些编辑器刚好把你最新的代码自动保存过)。tmux不会存在这个问题,不信,你可以在终端中打开tmux,然后关闭这个终端,再打开一个新的终端,输入tmux ls看看,你会发现之前的会话仍然还在,你需要做的只是attach它就行!那么我们平常在SSH连接到服务器上后,再通过tmux去开启我们的工作会话,不管你在里面干什么,都不用担心断线,因为tmux server会帮你保存你的会话,你随时可以attach它,而且你的工作现场一直在那,连目录都不用切换,除非你真的kill掉它。

结对编程

结对编程是不是很酷?事实上我也没试过。很简单,因为它的会话可以被多个client attach,比如A和B两人分别在家通过SSH连接到服务器上,然后都attach到同一个会话中,那么A和B的操作彼此都可以看到。

------------------------------------------------------------------------------

借鉴前辈整理:

http://blog.jobbole.com/87584/

http://blog.csdn.net/xiaobei4929/article/details/43230385

http://www.linuxidc.com/Linux/2015-07/119843.htm

未完待续……

© 著作权归作者所有

EchoAm3
粉丝 1
博文 14
码字总数 8221
作品 0
杨浦
程序员
私信 提问
Tmux使用手册

本文首发于CSDN网站,下面的版本又经过进一步的修订。 关于 我的博客:louis blog 掘金专栏:路易斯专栏 原文链接:Tmux使用手册 CSDN链接:程序员Tmux使用手册 - 极客头条 全文共12k字,阅读...

louiszhai
2017/10/10
0
0
tmux:适用于重度命令行 Linux 用户的终端复用器

tmux 是终端复用器terminal multiplexer的缩写,它允许用户在单个窗口中创建或启用多个终端(垂直或水平),当你处理不同的问题时,可以在单个窗口中轻松访问和控制它们。 它使用客户端-服务...

作者: Magesh Maruthamuthu
01/27
0
0
Linux终端复用神器-Tmux使用梳理

Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”...

china_lx1
2018/06/27
0
0
做为web后端研发应该掌握的基础,欢迎补充

我就是个写代码的,工作中总遇到对ssh原理不理解,git操作不太熟练的,如果作为linux下面的后端开发,我想下面这些至少都是基础操作,该掌握的。 很多时候真实很无奈,你写的步骤操作说明,都...

扣丁禅师
2016/04/11
144
1
代替putty的 tmux 终端工具

1.安装与配置 官网 https://tmux.github.io/ mac下安装 brew install tmux ~/.tmux.conf 配置文件路径 2.面板管理 pane Ctrl-b % 水平分割面板(命令输入的方法,先同时输入Ctrl-b,放开,再...

swingcoder
2016/02/21
473
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Alibaba 实战(二) - 关于Spring Boot你不可不知道的实情

0 相关源码 1 什么是Spring Boot 一个快速开发的脚手架 作用 快速创建独立的、生产级的基于Spring的应用程序 特性 无需部署WAR文件 提供starter简化配置 尽可能自动配置Spring以及第三方库 ...

JavaEdge
今天
7
0
TensorFlow 机器学习秘籍中文第二版(初稿)

TensorFlow 入门 介绍 TensorFlow 如何工作 声明变量和张量 使用占位符和变量 使用矩阵 声明操作符 实现激活函数 使用数据源 其他资源 TensorFlow 的方式 介绍 计算图中的操作 对嵌套操作分层...

ApacheCN_飞龙
今天
7
0
五、Java设计模式之迪米特原则

定义:一个对象应该对其他对象保持最小的了解,又叫最小知道原则 尽量降低类与类之间的耦合 优点:降低类之间的耦合 强调只和朋友交流,不和陌生人说话 朋友:出现在成员变量、方法的输入、输...

东风破2019
昨天
23
0
jvm虚拟机结构

1:jvm可操作数据类型分为原始类型和引用类型,因此存在原始值和引用值被应用在赋值,参数,返回和运算操作中,jvm希望在运行时 明确变量的类型,即编译器编译成class文件需要对变量进行类型...

xpp_ba
昨天
5
0
聊聊nacos Service的processClientBeat

序 本文主要研究一下nacos Service的processClientBeat Service.processClientBeat nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java public class Service ex......

go4it
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部