Skip to main content

Command Palette

Search for a command to run...

Linux tmux命令:一个窗口操作多个会话

Updated
2 min read

为大家介绍一位新朋友——tmux。有人会问,tmux 这个名字看着很酷,怎么取的这个名字呢?其实 tmux 是两个单词的缩写,即“Terminal MultipleXer”,意思是“终端复用器”。原来这是一个很没创意的名字,只是英文缩写看着很酷罢了,哈哈!
tmux 是一个可以让人们通过一个窗口操作多个会话的工具,对于经常操作 Linux 系统的同学来说,绝对是一款提升工作效率的利器,一会儿我们就会感受到它的强大和灵活。
让我们来看看 tmux 的芳容,如图 1 所示。

image.png

tmux 能帮我们解决什么问题呢

凡是互联网行业的从业者,无论是做运维的同学,还是做开发的同学,一般都是在自己的工作电脑上安装远程连接工具(如 iTerm、putty、XShell、SecureCRT 等),远程登录到公司服务器上,进行具体的操作,而其中一些操作的耗时会很长。
在这期间,一旦我们的远程连接工具所在的工作电脑出现断网或断电的情况,那么很多耗时较长的操作就会因此中断,这是所有运维、开发同学都很头疼的一个问题。下面,我们就先给大家列出一些典型的痛点。
痛点一:大数据传输的漫长一夜
相信做过 Linux 服务运维的同学,都用 scp 进行过服务器间的大文件网络传输。一般这需要很长的时间,这期间,如果工作电脑出现断网或者断电的情况,则会导致远程连接工具无法与服务器通信,从而使得它所控制的数据传输也因此中断。

情景再现:

localhost:~ roc$ ls -hl
total 36419584
-rw-------  1 roc  staff    17G  1 20 11:06 win7.vdi

localhost:~ roc$ scp -P 22000 win7.vdi [email protected]:/home/roc/win7.vdi    
0% 7296KB 800.3KB/s 6:19:05

一个 17GB 的大文件,刚刚开始传输,预估耗时 6 小时 19 分钟,谁能保证中间不出现关机和断电的情况呢。
有些同学说可以用 nohup 来解决啊,是的,这是一个办法,可是使用 nohup 的问题在于如果同时传输的任务众多,则最后你自己可能都分不清哪个任务对应哪个传输了,何况 nohup 还会留下 nohup.out 这么一个临时文件在那里。
还有同学说,即使中断了,也可以断点续传啊。可惜的是,scp 并不支持断点续传。如果改用 rsync 倒是可以,可惜 rsync 参数用起来很是复杂,谁能保证每位运维工程师都能熟练掌握那么多复杂的参数呢?这个时候,请试一试 tmux 吧!

痛点二:正在编译却被拉去开会
和大文件数据传输情况类似,一些大型的开发项目的代码编译过程,往往也需要很长的时间,短则几分钟,长则一通宵。对于一通宵的编译来说,这要是中间出现断网断电,那就相当悲剧了。整个项目进展就又要向后推迟至少一天。这个时候,我们向你推荐 tmux!

痛点三:多个窗口切换到晕
作为运维工程师,一定有过在众多窗口间切换,查看各种服务器上的信息和状态的情况,这个时候,如果没有一款好用的窗口管理软件,过不了多久,你就会晕头转向了。就像图 2 所示的这种情况。

image.png 这个时候,tmux 可以帮到你!

痛点四:一屏显示多窗口之殇 有时候为了进行多文件内容对比,如果没有一款很好用的分屏管理工具,那么我们只好创建多个终端,然后手动调整它们的大小和位置。
其实并不需要这么麻烦,tmux 可以帮助我们轻松分屏!

安装tmux

如果你的服务器的系统是 redhat、centos 或 fedora,那么安装会很简单:

[root@roclinux ~]# yum install tmux

tmux 依赖于 libevent 库和 ncurses 库,所以如果你的系统中原本没有这两个库的话,yum 会在安装时自动一并安装上。
如果你的服务器的系统是 ubuntu,那么安装也很简单:

[root@roclinux ~]# apt-get install tmux

如果你的服务器的系统是 OS X Server,仍然是一条命令搞定:

$ brew install tmux

brew 是苹果系统中常用的包管理工具,如果你的 OS X Server 提示你没有 brew 命令的话,则要事先安装这个包管理工具:

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ install/master/install)"

什么,你的系统没有 ruby?好吧。请自行百度,先老老实实地安装 ruby 吧。

tmux 入门四板斧

1.启动 tmux
首先,我们使用远程登录工具,登录到远程服务器上,然后执行下面的命令:

[root@roclinux ~]# tmux new -s roclinux

-s是 session 的缩写,顾名思义,我们启动了一个全新的 tmux 会话(tmux session),并且把这个会话起名叫作 roclinux。这时,映入大家眼帘的就是 tmux 环境了,如图所示。

image.png tmux 环境和之前的环境没有什么不同,因此所有的操作与原来一样就好了。

2.再创建一个新的窗口
在创建会话的同时,tmux 会在会话中创建一个窗口(tmux window),就是上图中的 1:vim*。 好了,我们试着再创建一个窗口:

  • 第一步:按 Ctrl+B 组合键,然后松开。
  • 第二步:再单独按一下 c 键。 看!最底部是不是出现了一个 2:bash,如图所示。

image.png 这说明,我们在 tmux session 中又创建了一个窗口。
细心的同学可能会提出一个问题,为什么刚才星号()是在 1:vim 后面,而现在却到了 2:bash 后面呢?
这是个好问题,星号(
)在这里表示的是“当前处于活跃状态的窗口”,也就是哪个窗口现在处于可操作状态,星号(*)就在哪个窗口的后面。这回知道了吧。

3.在窗口间切换
既然,我们在 roclinux 这个 session 中已经有了两个窗口,那么如果想在两个窗口间进行切换,应该怎么操作呢?
很简单,假如我们要切换到 0:bash 这个窗口,步骤如下:

  • 第一步:按 Ctrl-B 组合键,然后松开。
  • 第二步:按数字 0 键。
    看,我们刚才说的星号(*)是不是已经悄悄移动到 0:bash 的后面啦。同理,在按下 Ctrl+B 组合键后,按相应数字键,就可以切换到相应的窗口了。就是这么简单!

4.退出会话,还能再回来
现在,我们切换到 1:vim,运行一个命令:

[root@roclinux ~]# watch -n 2 free

这个命令会每隔 2 秒钟更新一次内存使用状态,如果不输入 Ctrl+C,则永远不会退出。
假如这时候你要带着办公电脑去开会,你的电脑要断网,又不想中断服务器上正在执行的 watch 命令,怎么办呢?
哈哈,tmux 正好可以派上用场,方法是这样的:

  • 第一步:输入组合键 Ctrl+B,然后松开。
  • 第二步:输入字母 d。
    看,tmux 环境消失了!眼前只有一行提示 [detached]:
    [root@roclinux ~]# tmux new -s roclinux
    [detached]
    

这表示,我们已经切断了办公电脑和刚才那个 tmux 之间的桥梁。现在如果你要外出,可以放心地关闭你的电脑了。
当你回到家后,打开电脑,连接到你的那台远程服务器,然后执行一个神奇的命令:

[root@roclinux ~]# tmux ls
roclinux: 2 windows (created Fri Jan 22 16:30:13 2016) [130x36]
[root@roclinux ~]# tmux a -t roclinux

看,我们又回到了刚才的状态,那个查看内存使用状态的 watch 命令,在那里乖乖地运行着。这就是 tmux 的神奇之处,它可以让远端服务器的命令,脱离用户自己的电脑来执行,还可以随时召唤回来,继续进行操作和查看。
好了,至此,你已经掌握了最最基本的 tmux 使用方法了。当然,tmux 还有很多更高级的用法,等待着你去发现!

--END--

More from this blog

营销知识汇总

MTL (Market To Lead)价值 实现以客户为中心的思考主要描述上市的产品到客户购买意向。一般而言,产品上市要尽快衔接后续的营销活动,使得客户有购买意向,或是购买线索,为此企业会进行展会、宣传、品牌推广等营销活动。然而有了购买意向和线索,客户也未必会购买整个MTL的变革与其说是流程,不如说是方法论,MTL流程不承载资金流、不承载物流,哪一步做哪一步不做是不影响运营的;LTC流程是承载资金流和物流,IPD流程是要把产品做出来,而MTL流程最终产生的输出并不是实体,但它教会了我们在市场细...

Jun 11, 20221 min read

面向对象是怎么一回事

三大基本特征和五大基本原则 前言面向对象的三个特征:封装、继承、多态。那么面向对象是怎么体现这三个特征呢?关于五大基本原则,这是我找到的对新手(如我)来说还是比较容易理解的表述。 面向对象的三大基本特征 1. 封装 封装,就是将客观事物抽象为逻辑实体,实体的属性和功能相结合,形成一个有机的整体。并对实体的属性和功能实现进行访问控制,向信任的实体开放,对不信任的实体隐藏。,通过开放的外部接口即可访问,无需知道功能如何实现。 也就是说,封装主要有以下目的: 可隐藏实体实现的细节。 提高安全性,设定...

Jun 9, 20221 min read

什么是dns ?

域名系统 (DNS) 将人类可读的域名 (例如,laofu.ipio.cf) 转换为机器可读的 IP 地址 (例如,172.67.143.172)。 DNS 基础知识 Internet 上的所有计算机,从您的智能手机或笔记本电脑到可提供大量零售网站内容的服务器,均通过使用编号寻找另一方并相互通信。这些编号称为 IP 地址。当您打开 Web 浏览器并前往一个网站时,您不必记住和输入长编号。而是输入域名(如 example.com),然后在正确的位置结束。 Amazon Route 53 等 DNS...

Jun 5, 20222 min read

IPv6应用背景

什么是互联网协议? IP 是 Internet 协议,是过去 40 年来发展起来的一套标准化的通信机制。IP 以计算机代码的形式存在于任何需要连接到 Internet 的设备、服务或系统中,任何 IP 的实现都需要符合其标准才能正确可靠地工作。 顾名思义,IP 是互联网的核心。事实上,它的具体特征是当今互联网成功的核心。特别是,IP 至少直接实现了 Internet 的以下三个基本特征: 全局性:在互联网上任意一对不同位置(IP 地址)的任意一对设备之间交换数据的能力 中立性:应用程序和内容与...

Jun 2, 20222 min read

老傅笔记

22 posts