28

10x 程序员之 tmux

 4 years ago
source link: https://mp.weixin.qq.com/s/RqeTdku0faYvleyVZbzMmw
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Preface

日常的工作当中,总是免不了同时进行多个终端任务的情况。典型的是  SSH  到线上的不同主机,查看日志信息等。面对这种情况,开启一堆的终端(如下图所示),单窗口切换就让人晕头转向,更不用说不小心关了窗口后还得重复之前的工作。出现这种烦恼之后,就尝试看看有没有什么东西可以帮助解决这个问题题,经过一翻折腾,最后  tmux  优雅的出现了。

FbIZraf.png!web

Tmux

tmux is a terminal multiplexer.

Tmux可以在一个  terminal 终端窗口中管理多个  session 会话,多个  session 之间轻松的切换, 同时  tmux 的  session 会话可以在多个  terminal 终端之间共享和复用。 tmux 以  deamon 线程在后台运行一个  server ,所有的  session 由该线程进行维护和管理,使得  session 与  terminal 终端分离。

会话 (Session)

  session即会话,当使用  terminal 建立与主机的连接后,也就是建立了一个  session 。传统的  terminal 终端与  session 1:1 绑定, session 随着  terminal 的开启与关闭而建立和终止。 tmux 中的会话与终端无任何关系, terminal 的角色只是一个通信的工具。 tmux 中的  session 是一个  server 对应多个  session 的  1:N 的模式,如下图所示。

um6fuyN.png!web

新建会话 (New)

  • 不指定名称,直接执行  tmux 命令,此时自动分配一个  session 数字名称,从  0 开始递增;
  • 指定名称,执行  tmux new -s <session-name> , 此时  session 就具有一个易于辩识的名称;

脱离会话 (Detach)

  • 命令式: 处于  session 内时,直接在执行命令  tmux detach ,即可使  session 进入后台运行;
  • Ctrl+b d
    Ctrl
    b
    d
    

tmux的快捷键采用  Ctrl+b 的组合方。

查看会话 (List)

脱离会话后,若想查看后台运行的会话,则可使用 list 相关的命令,以列表的形式展示会话。

tmux list-sessions  // 标准命令
tmux ls // 简写命令

重命名会话 (Rename)

有时我们可能在一个 session 中,做多件事情或者重新建立连接到新的主机,这里可能会话名称有可能无法表达对应的意思,从而有了更名的需要。 tmux 为我们提供两种更名方式,如下:

  • 命令式:  tmux rename -t <old_name> <new_name>
  • 快捷键:  ctrl+b $, <new_name>

进入会话 (Entry)

session进入使用的命令是  attach , 使用  attch 后,就可把后台运行的  session 唤回前台执行。

tmux attach-session                   // 进入最近脱离的一个 session 会话
tmux attach-session <session-name> // 进入指定的 session 会话

不能在一个 session 中  attach 另外一个  session ,   tmux 不支持  session 的嵌套使用。

销毁会话 (Destroy)

tmux的  session 可以脱离  terminal 终端存活,所以  session 的结束不会随着终端的关闭而结束, session 的结束需要执行特定的命令方可。

tmux kill-session -t <session_name> 	// 在任意的 terminal 终端中执行即可
exit // 这个只针对于结束当前 session

切换会话 (Switch)

当在一个 session 执行任务时,如果想切换到别的  session 时,可采用快捷键进行切换,而不用退出后再重新进入。

ctrl+b (  	// 前一个会话
ctrl+b ) // 下一个会话
ctrl+b L // 最后一个会话
ctrl+b s // 列出所有会话

Ctrl+b s 列出会话后,需要使用  h j k l 或者方向键进行选择,然后  Enter 键进入。

窗体 (Window)

tmux的一个  session 支持多个  windowsession 与  windonw 之间的关系如下图所示。

rEbuqqM.png!web

创建窗体 (New)

session中的  window 可以简单的对应为一个  terminial 终端的展示界面,因为每个  window 使用时,它独占了整个  terminal 的展示界面。 window 的创建有如下两种方式:

  • 命令式:  tmux new-window
  • 快捷键:  ctrl+b c

窗体切换 (Switch)

window的切换命令综合如下:

ctrl+b p 		// 前一个
ctrl+b n // 下一个
ctrl+b <n> // 这儿的 <n> 代表数字,切换到对应数字的窗体
ctrl+b w // 列表展示出所有的窗体
ctrl+b l // 切换到最一个会话
ctrl+b & y // 关闭当前窗体
ctrl+b ' <n> // <n> 代表窗体的编号

窗格格 (Pane)

tmux的  window 也可再切分成更小的单元,那就是  pane 窗格。 pane 可以在一个  window 中同时展示多个不同的内容, 如图所示。

e6nq6jr.png!web

窗格操作 (Operation)

ctrl+b % 		// 垂直分割
ctrl+b " // 水平分割
ctrl+b o // 窗格间按顺序切换
ctrl+b ↑ | ↓ | ← | → // 向指定方向切换
ctrl+b Space // 重新调整窗格大小
ctrl+b z // 当前窗格最大化
ctrl+b x // 关闭当前窗格

配置 (Config)

窗格绑定 (Bind)

   软件的修改化使用始终是离不开配置文件, tmux 使用  ~/.tmux.conf 为配置文件。如果你是一个  Vim 的重度使用者,那么在  pane 的切换时,肯定不习惯方向键的使用,而偏向于  h j k l 进行导航。而  tmux 也支持此功能,仅需在配置文件中加入下面的绑定语句就可。

# hjkl pane traversal
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

如果你在修改配置文件前没有启动 tmux 的话,你修改配置文件后马上就生效,但是如果你是在  tmux 运行当中修改的话,还需要执行命令加载配置文件,命令如下:

ctrl+b :, source-file ~/.tmux.conf

复制粘贴 (copypaste)

tmux支持的复制功能比较强大与方便,需启用  vi 模式的支持。修改  ~/.tmux.conf 配置文件,添加如下配置。

# vi copypaste mode
set -g mode-keys vi

  复制粘贴模式流程如下:

1. `ctrl+b [`  	// 进入复制粘贴模式
2. `space` // 开始选择内容
3. `enter` // 复制内容
4. `ctrl+b ]` // 粘贴内容

进入文本复制和粘贴模式,可以使用相关的 Vim 命令进行操作,快捷而高效。

Appendix


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK