在上一节<<
linux下远程管理利器-ssh
>>中,笔者有提到:上一节所讲的功能都是参照<<
linux远程管理的屠龙刀
>>里的功能来讲的.笔者想收回这句话,因为有替SecureCRT打广告之嫌.其实吧,这些功能无论我们使用哪种软件都是会遇到的问题.我们都要在那个软件上解决这些问题,只是碰巧上次是在使用SecureCRT的时候遇到的罢了.在使用无论哪种软件远程管理linux的时候,我们总会遇到一个靠那个软件本身所不能解决的问题:由于网络不稳定造成的连接中断!之前笔者也有遇到过,但是由于笔者的网络环境还好,所以算不上什么大问题.之前当遇到要长时间运行的指令的时候,笔者也会习惯上用screen来运行,然后退出会话.当ssh命令没有标签的概念的时候,笔者迫不及待的希望有一种解决方式解决这种问题.虽然笔者用的是GNOME Terminal它有标签的概念,而且通过自定义的快捷键启动GNOME Terminal和通过GNOME Terminal的快捷键ctrl+shift+T创建一个新标签是件很快捷的事儿.但是创建完了不是还要再输入登陆的指令嘛.如果有更简单高效的方式解决这个问题,你愿不愿意尝试呢?我愿意!
在搜索screen的相关资料的时候,一个和screen类似功能的新秀进入笔者的眼帘:tmux!对于笔者来说,两个软件都是要重新学习才能充分运用,所以在学习成本上不存在差别.而且笔者最看中的是tmux有"窗口"的概念,可以很方便的创建新的窗口和在窗口中切换.虽然screen在修改配置文件以后,也可以实现这个功能,但是!但是要修改配置文件!如果后面有N多机器的情况下,虽然批量修改也花费不了多少时间,但始终是一种损耗.在使用tmux的过程中,笔者认真学习了tmux内置的快捷键.笔者认为,这样的快捷键定义还是比较科学的,另外使用内置的快捷键而不是自定义的好处就是,你不用到每台机器上以后都重新定义你的习惯.
其实本篇就是tmux的入门级介绍啦,当然是偏快捷键.因为现在tmux的资料还是少之又少.为了知道其实一些有用的功能点,笔者也是破费心机.能够看到这篇关于tmux详细介绍的中文资料,相信你已经对tmux已经有一定的了解了.还是提一句:tmux是一个远程管理多窗口的工具,它可以允许你在一次登陆的情况下打开多个会话并方便的在会话中切换,而且软件本身就可以解决网络不稳定造成的断网问题哟.ok,进入本次的奇妙之旅:
1.控制键
控制键就是tmux的主键.当你在tmux环境下按下这个键的时候,tmux就会把你后面输入的指令,解析成它内置的功能.tmux默认的控制键是ctrl+b(同时按下ctrl和b,在后面将直接用小写的c-b代替).这相当于screen的ctrl+a.同时用过两个工具的人总会争论ctrl+a和ctrl+b的合理性.估计争论的也就是emacs和vi党.我就很不理解.这两拨人只用编辑器,不用指令吗?因为他们似乎不知道在bash环境里:ctrl+a代表跳到命令的开始,而ctrl+b代表往回移动一格.从这一点讲,笔者觉得用c-b没啥不好的.因为你按着c-b不放,在bash环境里的功能依然有效:)
2.获取快捷键帮助
前面没有提,在这里要指出的一点就是,当你按c-b的时候,我希望你已经进入"tmux环境"了.进入的方法很简单.直接在命令行输入:tmux就可以了.没有的话,安装呗.幸运的是ubuntu9.10里已经集成了tmux.虽然不是最新版,但是免去了编译的麻烦:)现在按C-b ?
接下来要介绍的东西,就是这里面列出来的,一些普遍有用的东东.查看上面或者下面的内容,直接pageup,pagedown就可以了:)退出请按q(这个百试不爽,几乎是和tmux交互的时候,都可以用这个退出)
3.常用快捷键
c-b c 创建一个新的窗口
在你正后悔当前窗口被一个指令占用的时候,这个快捷键会解燃眉之急哟.当前窗口在任务栏会显示*
如上图,现在正在操作的窗口就是3了
C-b n 切换到下一个窗口
C-b p 切换到上一个窗口
C-b l 最后一个窗口,和上一个窗口的概念不一样哟,谁试谁知道
c-b w 通过上下键选择当前窗口中打开的会话
C-b 数字 直接跳到你按的数字所在的窗口
c-b & 退出当前窗口(个人觉得这个没多大用,因为笔者习惯上c-d退出bash.当然了,如果你确保其它窗口没有有用的程序正在运行,试试这个命令也不错)
C-b d 临时断开会话 断开以后,还可以连上的哟:)
4.分割窗口
vim中,可以直接:!命令,来执行命令,或者直接把命令的结果读到当前的编辑器.很多时候我们就是有这样一种需要,看一下上次的执行结果,而不想通过切换来实现.最初看到官方网站的图片可以,横着分,可以竖着分,挺酷的.不过到现在笔者也还不知道怎么紧着分:)
c-b " 分割出来一个窗口
c-b o 在小窗口中切换 这种方法一次只能切换一次,再想切换再c-b o,适合两个窗口的时候使用.如果在当前窗口分割了好多小窗口的话,就要用下面的两个指令了.
c-b (方向键)上 上一个窗口
c-b (方向键)下 下一个窗口 要指出的是,按一次c-b,可以上上下下的选,直到选到你想要的那个窗口,这点和c-b o不一样噢.
c-b ! 关闭所有小窗口
c-b x 关闭当前光标处的小窗口
5.切换到其它的会话
上面提到的都是窗口的概念,是在一个会话里建立多个窗口,在一个窗口里建立多个小窗口.而现在说是的会话的概念.你每次执行tmux就会新建一个会话,c-b d的时候就会保存退出一个会话.
c-b s 选择attach的会话
注意看哟,和上图显示的不一样
6.修改当前窗口名称
tmux允许你给不同的窗口指定不同的名字
c-b , 修改当前窗口名称
是不是将窗口的名字改成rainbird了?
7.显示一个钟表
其实简单的时候没啥大用处,就是一个屏保的作用,不过你可以通过设置配置文件,使从钟表退出来的时候要输入密码:)
c-b t 钟表
8.查看历史记录
这个是困扰了笔者很长时间的一个功能,因为一些命令执行的时候,显示结果总会超过一屏,而笔者不知道怎么向上翻页以看到前面的东西,直到后来才不经意的发现是用:
C-b pageup/pagedown
退出的话,当然还是用q了
9.复制粘贴:
复制东西在使用GNOME Terminal的时候效果不大明显,因为你可以通过鼠标上下翻页,可以左键选择东西,右键复制或者粘贴.单把这一点拿出来,是为了说明一种猜测和一种高效的移动习惯.在看tmux帮助的时候,笔者注意到,有说按完c-b以后,通过[进入复制模式.但是进来以后呢?界面类似翻看以前的历史记录.研究的许久才这样整明白,如果要使用这个功能,你得知道c-b :可以进入tmux的命令模式,然后可以设置一些指令.比如说,修改模式键setw mode-keys vi.这样你就把当前模式改成了vi.再进入复制模式(c-b [)是不是可以通过j,k在字符里上下移动就像在vim里一样?
通过看帮助,vi和emacs的模式对照表
Function vi emacs
Start of line 0 or ^ C-a
Clear selection Escape C-g
Copy selection Enter M-w
Cursor down j Down
End of line $ C-e
Cursor left h Left
Next page C-f Page down
Next word w M-f
Previous page C-u Page up
Previous word b M-b
Quit mode q Escape
Cursor right l Right
Start selection Space C-Space
Cursor up k Up
你发现什么?我们之前上下翻页用的page up和page down,也可以用上下键.是不是说明了我们这前用的模式就是emacs呢?因为我们如果用ctrl+space选择东西的话,是永远不会成功呢,因为会被系统优先抢占,因为这两个键被定义到了切换输入法.所以,如果你想通过键盘用复制的功能的话,你最好先把模式改成vi,然后通过vi里支持的键选择.空格是选择的起点,然后上下或者左右移动选择到终点,回车,就把内容复制了.这样的一个好处就是你可以复制到不在当前屏幕里的东西!
10.常用参数
最后说一下tmux本身常用的几个参数吧:)
tmux ls 列出已有会话(list-sessions)
tmux a连接到这前断开的会话(attach-session) 默认会连接上图列出的id最小的会话,你也可以指定你想连接到哪个会话:tmux a -t 1来连接到第一个会话
tmux new创建新的会话(new-window) 当然了,不加这个参数也是会创建新会话的:)
关于tmux的介绍到这里就结束了.tmux是个利器,而这个利器是不是也成为你手上的利刃取决于你花多少心思来运用它.以上的一些技巧,你只会一些基本的指令,就可以大大提高工作效率了,还等什么?赶快行动起来吧:)
回复 刘磊(V.L.) 2009年12月25日 星期五 09:39
回复 wolfmei 2009年12月25日 星期五 10:22
回复 李华堂 2009年12月25日 星期五 11:10
回复 刘磊(V.L.) 2009年12月25日 星期五 10:24