tmux使用笔记
tmux是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件。
安装tmux需要先安装依赖包libevent,因为libevent安装在临时位置,所以在编译tmux过程中用到ncurses-devel包(非必选,如果采用标注安装,可不安装ncurses-devel),安装ncurses-devel:
$ yum install ncurses-devel
tmux需要libevent 2.x.x版,而CentOS 6.5官方源中的libevent是1.4.x版。所以需要下载编译新版libevent。
下载libevent最新稳定版2.0.21。用wget下载失败,提示“无法建立 SSL 连接”,换用curl:
$ curl -O https://cloud.github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
$ tar -zxvf libevent-2.0.21-stable.tar.gz
$ cd libevent-2.0.21-stable
$ ./configure --prefix=/tmp/libevent
$ make
$ make install
然后下载最新的tmux 2.0:
$ wget https://github.com/tmux/tmux/releases/download/2.0/tmux-2.0.tar.gz
$ tar -zxvf tmux-2.0.tar.gz
$ cd tmux-2.0
$ CFLAGS="-I/tmp/libevent/include" LDFLAGS="-L/tmp/libevent/lib" ./configure --prefix=/usr/local
$ make
$ make install
运行tmux提示找不到libevent-2.0.so.5文件,显示如下
$ tmux
tmux: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
这个文件在/tmp/libevent/lib/libevent-2.0.so.5,将其拷贝到/usr/lib目录下即可:
$ cp /tmp/libevent/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
如果依然提示这个错误,检查下/usr/lib是否在环境变量中
$ export LD_LIBRARY_PATH="/usr/lib"
现在输入tmux开启一个tmux会话
[root@localhost tmux-2.0]# tmux
ctrl + d or exit 关闭tmux当前面板
tmux有三个基本概念:会话,窗口和面板。当你输入tmux后,tmux实际做的事是首先创建一个会话,然后在这个会话中创建一个窗口,这个窗口只包含一个面板,你在其中看到的终端实际上都属于tmux的某个面板。
一个会话可以包含多个窗口,我们可以用会话来组织窗口,会话相当于一个工作环境,比如我们可以创建一个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里面可以按下Ctrl+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实际上是server/client模式,当创建第一个会话时,server就会运行,以后的会话都以attach/detach的方式被server服务,当所有会话都退出时,server才会退出。在我们工作中,经常是SSH连接到服务器上去写代码,但由于网络的不稳定性,会偶尔发生SSH连接中断的情况,这样我们之前的会话就会丢失,如果是一个nohup的后台任务还好,只要我们重新连上去之后,还是可以找到的(但至少需要回到事发现场,比如重新cd到原来的文件夹等),而如果我们正在写代码,还没来得及保存,很可能就杯具了(除非某些编辑器刚好把你最新的代码自动保存过)。tmux不会存在这个问题,不信,你可以在终端中打开tmux,然后关闭这个终端,再打开一个新的终端,输入tmux ls看看,你会发现之前的会话仍然还在,你需要做的只是attach它就行!那么我们平常在SSH连接到服务器上后,再通过tmux去开启我们的工作会话,不管你在里面干什么,都不用担心断线,因为tmux server会帮你保存你的会话,你随时可以attach它,而且你的工作现场一直在那,连目录都不用切换,除非你真的kill掉它。
tmux常用快捷键
Ctrl+b 激活控制台;此时以下按键生效。
系统相关命令:
Ctrl+b ? 列出所有快捷键;按q返回。
Ctrl+b d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
Ctrl+b D 选择要脱离的会话;在同时开启了多个会话时使用
Ctrl+b Ctrl+z 挂起当前会话
Ctrl+b r 强制重绘未脱离的会话
Ctrl+b s 选择并切换会话;在同时开启了多个会话时使用
Ctrl+b : 进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器。
Ctrl+b [ 进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出
Ctrl+b ~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
Ctrl+b fn+pageup/pagedown 内容多了可以翻页,退出翻页用q
Ctrl+b t 显示时钟。
窗口操作相关快捷键(执行每个命令之前都需要先激活控制台Ctrl+b):
c 创建新窗口
& 关闭当前窗口
数字键 切换至指定窗口
p 切换至上一窗口
n 切换至下一窗口
l 在前后两个窗口间互相切换
w 通过窗口列表切换窗口
, 重命名当前窗口;这样便于识别(回车确认)
. 修改当前窗口编号;相当于窗口重新排序
f 在所有窗口中查找指定文本
面板操作相关快捷键(执行每个命令之前都需要先激活控制台Ctrl+b):
” 将当前面板平分为上下两块
% 将当前面板平分为左右两块
x 关闭当前面板
! 将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板
Ctrl+方向键 以1个单元格为单位移动边缘以调整当前面板大小
Alt+方向键 以5个单元格为单位移动边缘以调整当前面板大小
space(空格键) 在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled
q 显示面板编号
o 在当前窗口中选择下一面板
方向键 移动光标以选择面板
{ 向前置换当前面板
} 向后置换当前面板
Alt+o 逆时针旋转当前窗口的面板
Ctrl+o 顺时针旋转当前窗口的面板
mac 安装tmux
$ sudo brew install libevent
$ sudo brew install tmux
如果安装libevent 提示libevent-2.0.21_1 already installed, it's just not linked 应该是之前安装没完成,使用brew uninstall libevent 卸载重装
tmux使用笔记的更多相关文章
- 我的Tmux学习笔记
0. 修改指令前缀 // ~/.tmux.conf ubind C-b set -g prefix C-a 1. 新建会话 tmux tmux new -s session-name // 可以设置会 ...
- 学习笔记之tmux
Home · tmux/tmux Wiki · GitHub https://github.com/tmux/tmux/wiki tmux is a terminal multiplexer. It ...
- redis源码笔记(一) —— 从redis的启动到command的分发
本作品采用知识共享署名 4.0 国际许可协议进行许可.转载联系作者并保留声明头部与原文链接https://luzeshu.com/blog/redis1 本博客同步在http://www.cnblog ...
- 配置tmux在机器重启后自动恢复tmux工作现场,告别重启恐惧症
1. 问题出现的背景 通过ssh远程登录服务器在上面工作,有时候很有可能由于网络断开而导致ssh链接断开,或者下班后想继续在家登录到服务器继续工作.这些情况都需要服务器保持我们的工作环境,比如,vim ...
- [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2
之前的[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程已经Out了,以这篇为准. 基于NVidia官方的nvidia/cuda image,构建适用于Deep Learning的基础im ...
- tmux简单使用
tmux简单使用 Tmux ("Terminal Multiplexer"的简称), 是一款优秀的终端复用软件,类似 GNU screen,但比screen更出色.tmux来自于O ...
- Ubuntu 18.04 WMware 编译 AOSP android-7.1.2_r33 笔记
0 前言 问:都快2022年了,为什么还要编译 android 7.1.2 ? 答:某脱壳机特征修改或移植到其他机型(此处省略1000字...) 笔者在编译之前并没有加入专有二进制文件(后续加入了再补 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
随机推荐
- 学习配置vsftp 进行ftp文件的传输
一. FTP 说明 linux 系统下常用的FTP 是vsftp, 即Very Security File Transfer Protocol. 还有一个是proftp(Profession ftp) ...
- NVelocity模板引擎的使用
第一种使用方法直接赋值: VelocityEngine vltEngine = new VelocityEngine(); vltEngine.SetProperty(RuntimeConstants ...
- Java Hour 49 保存和查询历史的Weather
吾一直坚信,是需求的不断变化推动了架构的不断演变. 新的需求 能够查看指定日期的Weather,因为客户想要比较昨天和今天的天气情况,所以需要能够查询历史数据的功能. 1 能保存当前的天气到数据库 2 ...
- poj 1330 LCA
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #i ...
- hdu 1542 扫描线求矩形面积的并
很久没做线段树了 求矩形面积的并分析:1.矩形比较多,坐标也很大,所以横坐标需要离散化(纵坐标不需要),熟悉离散化后这个步骤不难,所以这里不详细讲解了,不明白的还请百度2.重点:扫描线法:假想有一条扫 ...
- Web service project中导入的库JAX-RS(Java EE 6.0新产品)
JAX-RS是JAVA EE6 引入的一个新技术. JAX-RS即Java API for RESTful Web Services,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(R ...
- Codeforces Round #313 (Div. 2) D. Equivalent Strings
D. Equivalent Strings Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/559/ ...
- web异常、并发与安全
- BaseAdapter自定义适配器
listview = (ListView) findViewById(R.id.listview); imageview = (ImageView) findViewById(R.id.imagevi ...
- Spring的bean标签
Spring框架中主要有四种标签bean.alias.import.beans,其中bean标签是其他标签的基础. 一.bean标签的属性 scope:用来配置spring bean的作用域 sing ...