前言
tmux的快速和简单的指南上手使用。
笔者最近学习了MIT的The Missing Semester of Your CS Education,学习了一个比较有意思的工具tmux,然后该课程在作业里给出的这个tmux参考学习指南是纯英文的,个人觉得它写的挺有意思的,所以就翻译成中文来玩玩。这个是原文链接A Quick and Easy Guide to tmux,喜欢看英文的可以看看这个原文。
我喜欢在命令行环境下进行工作。我认为对于一个软件开发者而言,没有任何一款工具能比终端的效率更高、功能更加多样。又有谁能够拒绝从免费使用的终端中获得额外的黑客/魔术师/技术宅的感受呢?
多年来,我一直尝试让我使用命令行的过程变得更加精简和定制化,从而让它变得更加便利、有趣和精彩。驱动我每日都在命令行环境工作的一个重要工具就是tmux
。看看这个:
这个截图展示了自从切片面包以来的最好的东西。也就是tmux,一个所谓的终端复用器。简单来说,tmux在你的终端1中充当着类似于窗口管理的工具,并且允许你在一个单独的终端窗口中创造很多窗口和面板。
这篇文章将带你快速入门tmux并且了解他的可能性,通过十分钟的实践手册,你将会亲自建立起对tmux的认识。如果你有十分中的空余时间,并且想要在你的书呆子朋友那边有街头名誉的话,就继续阅读这篇文章,同时变得更加精通tmux吧!
什么是tmux
tmux的作者把tmux形容成一个终端多路复用器。在这个花哨的术语背后隐藏着一个通俗易懂的概念:在一个终端窗口中,你可以打开多个窗口并且分割视图(在tmux的术语中,通常被称为"panes(面板)"。每一个面板都有它自己的,独立运行的shell实例(bash,zsh,或者其他你正在使用的什么shell)。这将允许你在不打开多个终端窗口仿真器的基础上,拥有多个紧邻在一起的终端命令和应用的环境。
在此之上,tmux在一个session(会话)中保持这些窗口和面板。你可以在任何时候退出一个会话,这被称作"detaching(脱离)"。tmux将会一直保持这个会话,直到你杀死tmux服务(比如当你重启的时候)2。这相当的有用,因为你可以在任何时候精准地通过"attaching(连接)"重新进入那个你脱离的会话。
如果你曾经通过ssh来使用过远程服务器或者一个树莓派的话,你就可以想象到这种情况下tmux的使用是非常有用的:当你丢失了你的ssh连接,而tmux将只是单纯地从服务器脱离开,并且将和你在会话中所有的进程一直运行在后台。你只需要简单地通过ssh再次连接你的服务器,然后连接上你一直在运行的会话你就可以继续它了。
当使用远程工具时,tmux是很有帮助的,同样的,当你在本地工作时,它也有很大的作用。而这不仅仅是因为tmux管理窗口的特性,也有它的会话处理的功能的因素。就我个人来说,我经常在我切换上下文的时候脱离会话,我会为我的新的任务开始一个新的会话,同时在我任何想要继续我旧的工作的时候连接上会话。
你可以看到tmux基本上提供了两个大的特性:
- 在你的终端中管理窗口
- 并且对你的会话进行管理
如果你对GNU Screen熟悉的话,那么你会发现这些特性听起来都很熟悉。你可以把tmux当作一个更容易使用,同时一个功能稍微更加强大的对Screen的替代品(很明显的,我在固执己见:))
概念就说到这里吧。来让我们亲自动手实践吧!
开始
这个实践手册将让你迅速上手和运行tmux。它将会覆盖tmux的基本特性,当然,这应当已经足够上手并且更加高效地使用tmux。打开你的终端然后依照下面的指示来操作吧。
安装
幸运的是,在大部分的操作系统上,安装tmux是相当直接的:一个简单的sudo apt-get install tmux
指令(Ubuntu,WSL和他们的衍生产品)或者brew install tmux
(Mac)应该是足够用了。
启动你的第一个会话
只需要通过tmux
就可以打开一个新的会话,你就可以启动你的第一个回话了:
tmux
这将会创造一个在底部有着一个极佳的全绿颜色的状态栏的tmux会话:
这个状态栏是tmux的一个重要的部分。除了最新打开的窗口(在左边),它也展示了一些系统信息,比如说日期和时间(在右边)。这个状态栏也是可以被定制的,并且我已经看到过许多花里胡哨的东西(以即将到来的日历事件,电池的状态为例)。但是这些都是后话了。
分割面板
现在我们已经创造了第一个面板,现在我们对面板已经有了一些模糊的感觉。当你创造一个新的会话时,tmux默认会启动一个窗口和一个在其中单独的面板。我们想要一个漂亮的分屏,所以让我们把这个丑陋的玩意分割开吧。
在tumx中的所有命令都是通过一个prefix key(前缀键)触发的,这个关键键通常带着一个command key(命令键)(你们这些emacs
怪胎看到这些想必都跟回家了一样:))tmux使用C-b
作为默认的前缀键。如果你不是很习惯它的话,这个标记可能会有一些古怪。在"emacs"中,C-
意味着"按住Ctrl
键3。因此,C-b
的意思是同时按住Ctrl
和b
。
C-b %
快捷键将会将面板从中间分割开。这意味着:为了将你一整块面板分割成一个左边和右边的面板,你需要同时按住Ctrl
和b
,然后同时放开,接着按住%
键。Voilà!你已经调用了你的第一个tmux命令并且把你的面板分成了两块。
既然可以将面板分割成左右,那么也可以把它分割成上下。可以使用C-b "
快捷键将面板分割成上下面板。
切换面板
现在,我们已经进入了这个新创建的面板,但是如果我们想要回到这个左边的面板应该怎么办呢?这可以说是小菜一碟:我们可以使用C-b <方向键>
快捷键转换到不同的面板。这里,<方向键>是指指向你想要切换到的面板的快捷键。在我们这个例子里,我们想要切换到左边的这个面板,所以,对于我们来说,这个快捷键应该是C- 左边
。所以我们再一次理解了:这个意味着你需要按住Ctrl
和b
(你的前缀),然后按住left
键来切换到左边的面板。
你现在可以继续分割你目前为止创造的所有新面板。随便试试,然后疯狂地分割你的面板,以此对他有一个感受吧。
关闭面板
就像关闭一个常规的终端会话一样,关闭面板也很简单。要么输入exit
,要么敲击Ctrl-d
,然后这个面板就关闭了。
创造窗口
在tmux里面的窗口可以类比成创造新的虚拟桌面;如果你曾经接触过几个主要的Linux桌面环境(KDE,Gnome)或者一个Mac。你将要发现这种类比是很有用的。
创造新的窗口就只需要按C-b c
(最后说一次:那就是立即按住Ctrl
和b
,然后按住c
)。然后新的窗口就会出现在你的tmux的状态栏。
你现在根据你的喜好在你的新窗口里面分割你的面板,或者不分割。这全部取决于你。
为了转换到之前的窗口(根据你的状态栏的顺序),使用C-b p
,使用C-b n
转换到下一个窗口。如果你创造了很多窗口的话,你会发现通过直接按数字(状态栏会显示窗口对应的数字)进入到不同窗口真的很有用。通过使用C-b <数字>
这里的<数字>指的是在你的状态栏的每个窗口的名字前的数字。
会话处理
如果你已经处理了你的会话的话,那么,你要么是已经通过退出所有在里面的面板来彻底结束会话,要么是把会话放在后台运行来准备之后再次使用。
你可以通过使用C-b d
来分离当前会话。你也可以使用C-b D
让tmux为您提供一个选择,选择您想要分离哪些会话。。从一个会话脱离将会让你正在进行的所有工作保存在后台。你可以在之后的任何时间重新返回会话。
为了重新连接上对话,并且从你之前进行到一半的工作继续下去,你首先需要你想要连接上哪一个会话。为了把正在进行所有的会话列出来,你需要使用:
tmux ls
这个将会给你一个所有正在运行的会话的列表。在我们的例子中,他就像:
0: 2 windows (created Sat Aug 15 17:55:34 2015) [199x44] (detached)
你需要再次启动tmux来连接上哪个会话,但是,这一次,你需要告诉它你要连接哪个会话。
tmux attach -t 0
注意到-t 0
是告诉tmux要连接哪个会话的参数。"0"是你的tmux ls
输出的第一个部分。
如果你更倾向于给你的会话一个更有意义的名字(而不是一个从0开始的数字),你你可以使用这个命令来创造你的下一个会话:
tmux new -s database
这个将会创造一个名字为"databse"的崭新会话。
你也可以重新命名现在的会话:
tmux rename-session -t 0 database
下一次你连接那个会话时,你就可以单纯的使用tmux attach -t database
。如果你一次性使用了很多会话的话,这个可以变成一个必要的特性。
这就是tmux了!恭喜,你已经完成你的第一个tmux的会话并且亲自上手了它的窗口和会话管理。当然,tmux能实现的不止这些。但是你现在学的多半已经是你未来开始使用tmux会碰到的所有东西了。
为什么选择tmux?
一个我通常得到的快速回复通常是:“好的,我了解了。但是我为什么要使用tmux和它的古怪的按键组合而不是使用iTerm2呢?”
当只涉及到基本的窗口管理时,你是对的,iTerm for Mac也提供了标签和面板。对于Linux而言,也有Terminator。所以为什么明明处在当下这个时代以及现在这样的年龄的情况下,每个人却都有强烈地想要学习一些古老的技术的欲望呢?
我想,很明显,当然是因为这些技术能成为炫耀的资本。当然,如果这不能说服你的话,这里也有一系列我认为tmux比iTerm等等类似工具更好的理由:
- 会话处理:脱离和连接会话帮助我更好的处理上下文切换,和远程工作。
- 平台无关性:我可以在我的Macbook上,Linux notebook,服务器,树莓派等等你能想到的所有平台上使用它。
- 可定制化:我可以使用许多方式来定制我的tmux环境的外观和行为。并且我也可以通过使用一个简单的dotfile来在不同的平台上同步我的设置。
继续
如果你对于学习tmux还能做什么了不起的事情感到好奇的话,那么你是很幸运的,因为发现大部分功能是很容易的。通过按下C-b ?
去看看一系列可用的命令并且开始尝试吧。
一些我自己经常使用的命令是:
C-b z
: 让一个面板全屏。再次C-b z
来把它缩小到之前的尺寸。C-b C-<方向键>
:通过<方向键>的方向来调整面板的大小4C-b ,
:重新命名当前的窗口
除了以上这些,这里也有许多其他资源帮助你更好地熟悉tmux。像我一样的人都在记录他们的tmux经历,同时分享他们在tmux中所发现的。你也可以看到人们在他们的GitHub的dotfiles仓库中分享他们的tmux配置。这里甚至有一本Brian Hogan写的关于tmux的书
现在,你能够自己发现一些tmux的功能的话是最好的。大胆实验、随便试试并且尽可能在你的日常工作中使用tmux。习惯tmux需要花些时间,而且你大概率在刚开始的时候会觉得有些慢。我鼓励你去一直使用它。感受它的功能,然后你会迅速发现你与终端有关的工作将会变成一种纯粹的幸福并且流程将会是从未有过的快速。
如果你对自定义自己的tmux体验感兴趣的话,我建议你阅读我的【vps工具使用】让你的tmux更加优美和实用——一个配置tmux.conf的指南。
脚注
- 如果你有Linux相关的知识的话,你会对像Openbox,i3或者awesome这样的窗口管理工具的概念比较熟悉。↩
- tmux是基于client-server架构的。虽然这几乎没有什么相关,但是这对于理解tmux是怎样工作的很有帮助。你将变得只会使用tmux的client并且创造新的会话或者连接上现有的会话。↩
- 这里就像
M-
和Meta
键(也就是大部分键盘的Alt
)是同一个东西一样的。↩ - 这是一个有意思的玩意儿。是的,你的前缀只需要
Ctrl
并且你的命令键也一样。我发现最方便的情况是,前缀键不再使用b
键,同时只需要重复敲击方向键时一直按着Ctrl
键就可以了。去试验它一下,然后获得对我所描述的东西的一个大致感觉。↩
暂无评论内容