linux下终端复用工具-tmux

什么是tmux?

Tmux是一个终端复用工具,用于在一个终端窗口中运行多个终端会话的能力。可以简单的理解为他允许你在一个终端下模拟出多个终端来进行操作,而不是不停的打开终端标签。尤其是对于远程服务器而言:

  1. 运行一个脚本的时候,如果服务器断掉当前进程被杀死,脚本就无法运行了
  2. 运行一个脚本或编辑一个文件的时候,想要切换目录等操作就必须重新打开一个SSH连接
    如果遇到上面两个问题都都可以求助于tmux来解决。

Tmux安装

对于linux来说,使用对应的包管理器安装即可:

yum install tmux

Tmux基本概念

tmux采用C/S模型构建,输入tmux相当于开启了一个服务器,此时默认将新建一个会话,然后会话中默认新建一个窗口中默认新建一个面板。这就是Tmux中最重要的三个概念:

  1. 会话(session):会话就相当于一个SSH连接,默认情况下SSH连接与启动的会话是连在一起的,打开连接就开启了一段会话,而关闭连接不管这个会话中进程是否运行完也随之结束。而tmux实际上就是将会话与连接解绑,连接断开后会话并不终止而是继续运行,等到需要的时候还可以绑定到其他连接上,而对于本机而言SSH连接也等同于打开一个终端窗口。
  2. 窗口(window):一个会话可以包含多个窗口,其实就是一个会话可以绑定到多个窗口上。窗口默认会充满会话界面,因此这些窗口中可以运行相关性不大的任务。
  3. 面板(pane):一个窗口可以被分割为多个面板,一个窗口下的面板都处于同一个界面下,这些面板适合运行相关性高的任务,以便同时观察他们的运行情况。
    而我们使用Tmux实际上就是对这三个概念的新建、关闭、修改。

会话(session)

  1. 新建会话
tmux # 新建一个无名称的会话,不推荐
tmux new -s demo #新建一个名称为demo的会话,可以使用alias来创建别名

如果处于tmux中,终端下会出现一个状态栏:

状态栏.png

其中如果使用tmux创建无名会话的话,默认名称会从0到1这样的顺序排列。
注意,在tmux会话中如果执行这个命令弹出以下错误:

sessions should be nested with care, unset $TMUX to force

意思就是会话嵌套必须小心,也可以复位$TMUX来强制进行会话嵌套。当然建议还是不要进行会话嵌套,如果实在要在会话中新建一个会话的话可以使用:

ctrl+b :new

2.重命名会话
如果你使用tmux直接创建一个默认的会话时,其名称是0,1,2这样的名称并不好记忆,此时就可以使用rename命令来重命名会话:

tmux rename-session -t old-name new-name

  1. 断开当前会话
    其实就是讲当前的窗口与该会话解绑,然当前窗口执行其他工作,而将会话置于后台,此时会话并不会被关闭,而是在后台继续运行。

tmux detach #断开当前会话
也可以使用ctrl+b d这个快捷键来断开当前会话。

  1. 进入之前的会话
    断开会话后,如果想要接着上次留下的现场继续工作,就需要接入会话了,使用attach命令来接入:
tmux attach-session -t demo #接入demo会话
tmux a -t demo  #可以使用简写形式 a 就相当于 attach-session
tmux a  #默认进入第一个会话
  1. 杀死会话
    当一个会话的使命完成后,就可以使用kill命令来杀死他们,kill命令有kill-pane kill-server kill-session和kill-window四个,其中kill-session就是用来杀死会话的。
tmux kill-session -t demo #杀死demo会话
tmux kill-server #关闭服务器,就相当于杀死了所有的会话
  1. 查看所有会话
    在你拥有多个会话的时候,不知道如何切换是就需要查看所有的会话了:
tmux list-session #查看所有会话
tmux ls #简写形式

也可以通过ctrl+b s来进入一个交互式会话列表,这里罗列了tmux管理的所有会话以及会话的窗口,你可以使用方向键在选中一个按下回车进入相应的会话窗口。

会话跳转.png

  1. 切换会话
    如果我们想要从一个会话中切换到另一个会话中,有三种方法,最笨的就是首先detach断开当前会话,然后attach到你想切换的会话中。最简单的就是使用ctrl+b s进入交互式会话列表,然后选择一个会话。还有一个tmux给出的switch命令也可以实现在会话中直接切换到其他会话:

tmux switch -t session-name

总结

命令 快捷键 描述
tmux new -s session-name ctrl+b :new 创建新会话
tmux rename-session -t oldname newname ctrl+b $ 重命名会话
tmux detach ctrl+b d 断开当前会话
tmux attach-session -t session-name 接入一个会话
tmux kill-session -t session-name 杀死一个会话
tmux list-session ctrl+b s 列出当前会话
tmux switch -t session-name 切换会话

窗口(window)

一个会话默认开启一个窗口,但是tmux允许你新建多个窗口。这可能就是进程和协程的关系,如果对于不同的任务开启不同的会话其开销肯定要比在一个会话中开启多个窗口要低。所以说一般情况下我们应该都只需要开启一个常住的会话,在其中开启多个窗口来管理多个任务。如果需要临时测试一个项目的时候在开启一个会话用完销毁就好了。

  1. 新建窗口

tmux new-window -n test #新建一个名称为test的窗口

也可以通过chrl+b c来新建窗口
可以在状态栏下左下角查看窗口的状态:

窗口状态.png

  1. 关闭窗口

tmux kill-window #关闭当前窗口
tmux kill-window -t window-name/window-num #关闭某个窗口,可以是名称也可以说编号

也可以通过chtl+b &来关闭窗口

  1. 切换窗口

tmux select-window -t window-name/window-num #切换到某一个窗口

切换窗口有很多快捷键 ctrl+b 0~9切换到指定窗口,ctrl+b p切换到上一个窗口,ctrl+b n切换到下一个窗口。ctrl+b w打开一个选择列表来选择其中一个窗口切换。

  1. 重命名窗口

tmux rename-window new-name #为当前窗口重命名

快捷键为ctrl+b ,来重命名当前窗口。

总结

命令 快捷键 描述
tmux new-window -n window-name ctrl+b c 新建窗口
tmux kill-window -t window-name/window-num ctrl+b & 关闭窗口
tmux select-window -t window-name/window-num ctrl+b 0~9/p/n/w 切换窗口
tmux rename-window new-name ctrl+b , 重命名窗口

面板操作

Tmux可以将窗口分成多个面板,每个面板下可以运行不同的命令。

  1. 划分面板

tmux split-window #上下划分两个面板 ctrl+b %
tmux split-window -h #左右划分两个面板 ctrl+b "

  1. 移动光标

tmux select-pane -U #切换到上方面板 ctrl+b 方向键来实现
tmux select-pane -D #切换到下方面板
tmux select-pane -L #切换到左方面板
tmux select-pane -R #切换到右方面板

  1. 交换窗格位置

tmux swap-pane -U #当前面板上移 ctrl+b {
tmux swap-pane -D #当前面板下移 ctrl+b }

  1. 关闭窗格

tmux kill-pane #关闭当前窗格 ctrl+b x

总结

命令 快捷键 描述
tmux split-window ctrl+b " 上下划分面板
tmux split-window -h ctrl+b % 左右划分面板
tmux kill-pane ctrl+b x 关闭当前面板
tmux resize-pane -Z ctrl+b z 最大化面板,再次重复命令恢复正常
tmux display-panes ctrl+b q 显示当前面板编号,在编号消失前输入对应的数字可切换到对应面板
tmux swap-pane -U ctrl+b { 向前置换当前面板
tmux swap-pane -D ctrl+b } 向后置换当前面板
tmux select-pane -UDLR ctrl+b 方向键 移动光标切换面板
tmuxse select-pane -t :.+ ctrl+b o 选择下一个面板
tmux resize-pane -UDLR 5 ctrl+b alt+方向键 调整面板大小
tmux clock-mode ctrl+b t 显示时钟

其他命令

tmux list-keys #列出所有快捷键
tmux list-commands #列出所有命令

参考:
tmux使用手册

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容