“君子生非异也,善假于物也” 。–语出《荀子·劝学》

如果记得没错的话,《荀子·劝学》我们这一代高中的时候应该都读过这篇文章。原意大概是君子的资质与一般人没有什么区别,君子之所以高于一般人,是因为他能善于利用外物。对于技术人来说,好工具的选择和使用往往可以省去很多不必要的麻烦,好的开源工具很多,看你如何去使用。对于终端复用工具这里推荐使用tmux,当然此类工具比较好的还有screen,不过相对screen 这里我更倾向于推荐tmux[强悍的分屏等]。

如果仅仅只是多标签的功能,那么putty结合一些工具也可以做到,或者干脆使用xshell,当然tmux此类工具不仅仅是那么简单。另外一个选择使用tmux/screen工具的原因是,有时我们会经常需要SSH或者telent远程登录到Linux服务器,有一些任务需要长时间运行,比如系统备份、数据传输等。通常情况下我们都是开一个远程终端窗口,因为执行时间比较长,一般需要等待它执行完毕,在此过程中不能关闭窗口或者网络原因断开连接,断开之后就Game Over了。这个功能就有点类似nohupsetsid命令的实现了,而tmux/screen则集nohup/setsid和多标签于一身。废话少说,我们接下来看如何安装使用它。

安装

安装的话这里就不过说明了,不同的Linux发行版相应的包管理机制不同,安装tmux包即可。

使用技巧

几个名词

tmux主要包括以下几个模块:

session 会话:一个服务器可以包含多个会话
window 窗口:一个会话可以包含多个窗口
pane 面板:一个窗口可以包含多个面板[强悍的分屏]

小试牛刀

列出了tmux的几个基本模块之后,就要来点实实在在的干货了,和screen默认激活控制台的Ctrl+a不同,tmux默认的是Ctrl+b,使用快捷键之后就可以执行一些相应的指令了。当然如果你不习惯使用Ctrl+b,也可以在~/.tmux文件中加入以下内容把快捷键变为Ctrl+a

# Set prefix key to Ctrl-a
unbind-key C-b
set-option -g prefix C-a

以下所有的操作都是激活控制台之后,即键入Ctrl+b前提下才可以使用的命令【这里假设快捷键没改,改了的话则用Ctrl+b】。

基本操作:

? 列出所有快捷键;按q返回
d 脱离当前会话,可暂时返回Shell界面,输入tmux attach能够重新进入之前会话
s 选择并切换会话;在同时开启了多个会话时使用
D 选择要脱离的会话;在同时开启了多个会话时使用
: 进入命令行模式;此时可输入支持的命令,例如kill-server所有tmux会话
[ 复制模式,光标移动到复制内容位置,空格键开始,方向键选择复制,回车确认,q/Esc退出
] 进入粘贴模式,粘贴之前复制的内容,按q/Esc退出
~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
t 显示当前的时间
Ctrl+z 挂起当前会话

窗口操作:

c 创建新窗口
& 关闭当前窗口
数字键 切换到指定窗口
p 切换至上一窗口
n 切换至下一窗口
l 前后窗口间互相切换
w 通过窗口列表切换窗口
, 重命名当前窗口,便于识别
. 修改当前窗口编号,相当于重新排序
f 在所有窗口中查找关键词,便于窗口多了切换

面板操作:

将当前面板上下分屏
% 将当前面板左右分屏
x 关闭当前分屏
! 将当前面板置于新窗口,即新建一个窗口,其中仅包含当前面板
Ctrl+方向键 以1个单元格为单位移动边缘以调整当前面板大小
Alt+方向键 以5个单元格为单位移动边缘以调整当前面板大小
空格键 可以在默认面板布局中切换,试试就知道了
q 显示面板编号
o 选择当前窗口中下一个面板
方向键 移动光标选择对应面板
{ 向前置换当前面板
} 向后置换当前面板
Alt+o 逆时针旋转当前窗口的面板
Ctrl+o 顺时针旋转当前窗口的面板
z tmux 1.8新特性,最大化当前所在面板

.tmux.conf基本配置

软件到手了,自己怎么舒服就怎么用。定制主要还是在于.tmux.conf配置文件的配置,以下列出我的配置文件:

# Set prefix key to Ctrl-a
unbind-key C-b
set-option -g prefix C-a
bind-key C-a last-window # 方便切换,个人习惯
bind-key a send-prefix
# shell下的Ctrl+a切换到行首在此配置下失效,此处设置之后Ctrl+a再按a即可切换至shell行首 # reload settings # 重新读取加载配置文件
bind R source-file ~/.tmux.conf \; display-message "Config reloaded..." # Ctrl-Left/Right cycles thru windows (no prefix)
# 不使用prefix键,使用Ctrl和左右方向键方便切换窗口
bind-key -n "C-Left" select-window -t :-
bind-key -n "C-Right" select-window -t :+ # displays
bind-key * list-clients set -g default-terminal "screen-256color" # use 256 colors
set -g display-time 5000 # status line messages display
set -g status-utf8 on # enable utf-8
set -g history-limit 100000 # scrollback buffer n lines
setw -g mode-keys vi # use vi mode # start window indexing at one instead of zero 使窗口从1开始,默认从0开始
set -g base-index 1 # key bindings for horizontal and vertical panes
unbind %
bind | split-window -h # 使用|竖屏,方便分屏
unbind '"'
bind - split-window -v # 使用-横屏,方便分屏 # window title string (uses statusbar variables)
set -g set-titles-string '#T' # status bar with load and time
set -g status-bg blue
set -g status-fg '#bbbbbb'
set -g status-left-fg green
set -g status-left-bg blue
set -g status-right-fg green
set -g status-right-bg blue
set -g status-left-length 90
set -g status-right-length 90
set -g status-left '[#(whoami)]'
set -g status-right '[#(date +" %m-%d %H:%M ")]'
set -g status-justify "centre"
set -g window-status-format '#I #W'
set -g window-status-current-format ' #I #W '
setw -g window-status-current-bg blue
setw -g window-status-current-fg green # pane border colors
set -g pane-active-border-fg '#55ff55'
set -g pane-border-fg '#555555'

开启批量执行

如果已经修改prefix键位Ctrl+a,则Ctrl+a[默认Ctrl+b]后输入:set synchronize-panes ,输入:set sync [TAB]键可自动补齐

取消批量执行模式重复之前操作即可

脚本化启动

把以下脚本内容加入到~/.bashrc,即可每次登录进入到tmux

tmux_init()
{
tmux new-session -s "kumu" -d -n "local" # 开启一个会话
tmux new-window -n "other" # 开启一个窗口
tmux split-window -h # 开启一个竖屏
tmux split-window -v "top" # 开启一个横屏,并执行top命令
tmux -2 attach-session -d # tmux -2强制启用256color,连接已开启的tmux
} # 判断是否已有开启的tmux会话,没有则开启
if which tmux 2>&1 >/dev/null; then
test -z "$TMUX" && (tmux attach || tmux_init)
fi

效果如下:

从 screen 切换到 tmux 十分平滑,tmux 的按键设置与 screen 大都相同,只是其默认按键前缀为 Ctrl-b。为了延续在 screen 中的使用习惯,我将其更改为 Ctrl-a。将下列内容加到 $HOME/.tmux.conf 中即可:

set -g prefix ^a
unbind ^b
bind a send-prefix

按键绑定

我还在 .tmux.conf 中定义了以下按键绑定:

  • 水平或垂直分割窗口

    unbind '"'
    bind - splitw -v # 分割成上下两个窗口
    unbind %
    bind | splitw -h # 分割成左右两个窗口
  • 选择分割的窗格

    bind k selectp -U # 选择上窗格
    bind j selectp -D # 选择下窗格
    bind h selectp -L # 选择左窗格
    bind l selectp -R # 选择右窗格
  • 重新调整窗格的大小

    bind ^k resizep -U 10 # 跟选择窗格的设置相同,只是多加 Ctrl(Ctrl-k)
    bind ^j resizep -D 10 # 同上
    bind ^h resizep -L 10 # ...
    bind ^l resizep -R 10 # ...
  • 交换两个窗格

    bind ^u swapp -U # 与上窗格交换 Ctrl-u
    bind ^d swapp -D # 与下窗格交换 Ctrl-d
  • 执行命令,比如看 Manpage、查 Perl 函数

    bind m command-prompt "splitw -h 'exec man %%'"
    bind @ command-prompt "splitw -h 'exec perldoc -f %%'"

定制状态行

状态行左边默认就很好了,我对右边定制了一下,显示 uptime 和 loadavg:

set -g status-right "#[fg=green]#(uptime.pl)#[default] •
#[fg=green]#(cut -d ' ' -f 1-3 /proc/loadavg)#[default]"

下面两行设置状态行的背景和前景色:

set -g status-bg black
set -g status-fg yellow

默认启动应用

当 tmux 启动时,可以默认启动一些应用:

new -s work mutt # 新建名为 work 的会话,并启动 mutt
neww rtorrent # 启动 rtorrent
neww vim # 启动 vim
neww zsh
selectw -t 3 # 默认选择标号为 3 的窗口

复制与粘贴操作

  1. 按 C-a [ 进入复制模式,如果有设置 setw -g mode-keys vi 的话,可按 vi 的按键模式操作。移动至待复制的文本处,按一下空格,结合 vi 移动命令开始选择,选好后按回车确认。

  2. 按 C-a ] 粘贴已复制的内容。

Linux下终端利器tmux(转)的更多相关文章

  1. [转载]Linux下终端字体颜色设置方法

    原文地址:Linux下终端字体颜色设置方法作者:router 网上类似的文章有很多,但是都是转来转去的,没有经过测试,按照很多文章的方法会造成你设置之后的终端在换行和删除输入字符时终端显示会乱七八糟, ...

  2. 解决linux下终端无法输入的假死问题

    有时在linux下shell终端中,会突然出现终端应用卡死,无法接受键盘输入, 但是其它分屏, 系统都是正常的.这本来是一个终端的很老的功能, 叫软件流控制(XON/XOFF flow control ...

  3. 【转】linux下终端命令快捷键

    原文网址:http://daaoao.blog.51cto.com/2329117/554177 linux下使用终端不可避免. 使用终端快捷键,当然会使你如虎添翼.记住他们吧 终端快捷键 tab=补 ...

  4. linux下终端字体彩色显示

     linux下python彩色显示   跨平台彩色显示库https://pypi.python.org/pypi/colorama   jlive@MacBook-Pro:py_demo $pytho ...

  5. linux下的终端利器----tmux

    转:tmux 是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件.类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远 ...

  6. linux下的终端利器 tmux 安装以及使用

    ref :https://www.jianshu.com/p/fd3bbdba9dc9 Introduction 为什么使用tmux? 因为如果我们用terminal连接remote server.发 ...

  7. linux 下终端复用软件推荐——tmux

    使用过些linux终端,比如Tilda.Terminator. 之前最经常用的是Terminator,其可以上下左右分屏,比较方便,但其有个缺点是经常无故崩溃. 后来遇到Tmux,根据网上的设置配置了 ...

  8. Linux下编辑利器vim,vimrc,viminfo的高级用法

    1.ci" (由 change operator 和 text-object i" 组成) 这个命令会找到当前光标所在行的下一个 " 括起来的字符串,清除引号裏面的内容, ...

  9. Linux 下 终端 相关的命令

    1. 概述 Linux 服务器, 通常可以由多个终端连接 简单介绍一些 终端 相关的操作 最终的目的, 是定位到某个终端, 然后把它 踢下来, 甚至可以不让他再次连接 2. 环境 操作系统 CentO ...

随机推荐

  1. magento后台登陆404、Front controller reached 100 router match iterations的解决方案

    (1)执行如下sql SET SQL_SAFE_UPDATES=; SET FOREIGN_KEY_CHECKS=; UPDATE `core_store` SET store_id = WHERE ...

  2. C#中MessageBox用法总结

    我们在程序中经常会用到MessageBox. MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: 1.MessageBox.Show("Hello~~~~&quo ...

  3. SQLServer中临时表与表变量的区别分析【转】

    在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永 ...

  4. Stopwatch 类【转】

    一般我们想要测试使用那种方法或着那种类型效率更高,使用Stopwatch类进行测试就可以,我也是现在才知道,汗一个. 先来看个小示例,如下. 前提,先引用using System.Diagnostic ...

  5. UIPageViewController跳跃切换的问题

    使用的是XHScrollMenu和UIPageViewController来构建5个页面: ViewController1, ViewController2, ViewController3, Vie ...

  6. C# 输入输出 常量变量

          //输出 Console.WriteLine("这是一行文字"); 自动回车的. Console.Write("Hello world");  不带 ...

  7. 关于Git和Github

    英文原文:Ten Things You Didn't Know Git And GitHub Could Do Git 和 GitHub 都是非常强大的工具.即使你已经使用他们很长时间,你也很有可能不 ...

  8. Android 测试工具集01

    Appium是一个支持原生,混合和移动web apps的开源的跨平台测试框架工具. ANDROID依赖 Android SDK API >= 17 (Additional features re ...

  9. chroot

    用途:更改命令的根目录. 语法:chroot Directory Command 描述: 注意:如果新根目录中的特殊文件具有与实际根目录不同的主要和次要设备号,则可能会覆盖文件系统. 只有具有 roo ...

  10. Cordova+Asp.net Mvc+GIS

    Cordova+Asp.net Mvc+GIS跨平台移动应用开发实战1-系统初步搭建(附演示,apk,全部源码)   1.前言 身处在移动互联网的今天,移动应用开发炙手可热,身为程序猿的我们怎么能错过 ...