目录

Tmux学习

题记

用了快半年的screen,最近想换成tmux试一试,所以用博客记录一下简单的使用体验。这篇博客的内容主要参考了How to Use tmux on Linux (and Why It’s Better Than Screen)

为什么使用tmux

Screentmux都是用来在连接远程服务器的时候管理会话的工具,这类工具的专用名词叫终端复用器(terminal multiplexers),最早接触到这类工具的时候,还是搭建我的世界服务器的时候,我还写了一篇搭建的博客

作用

  • 本地关闭远程连接程序,远程继续执行,并且能恢复会话
  • 分屏操作

为什么从screen转向tmux

事实上2个工具功能几乎完全一样,我也非常喜欢使用screen,第一个原因是可以看见网上很多人都是更推荐tmux的,因为screen稍显粗糙,但是对我来说我替换成tmux的最大的理由是screen的分屏不好看,如下图分屏的大白线是什么鬼啊,而且不支持左右分屏。

image-20200718163129915

Tmux的使用

安装

1
sudo apt-get install tmux

开启一个tmux的session

执行tmux命令,就会进入tmux的session,下方出现绿色的状态栏(status bar)。

其中[0]是session名,默认是按数字(后文将介绍自定义session名);0:bash*中的0表示这个session中的第一个window,而在window中运行的进程是bash;星号*的意思是这是你在操作的window。

image-20200718170945759

p.s. screen中没有这个状态栏,这也是tmux的优势

Tmux的命令简单尝试

tmux的所有命令分为两部分,先按Ctrl+B,让tmux知道要执行命令了,然后第二步按住需要执行的命令的按键。

如关闭命令,先按Ctrl+B,然后按 X,此时出现是否确认kill pane的提示,按住y,此时如果session中只有一个window(和一个pane,pane会在后文讲到),那么session也会被终止,从而退回最初执行tmux命令之前的状态。

image-20200718172054216

p.s. tmux的 Ctrl+B相当于screen的Ctrl+A,不过这个是可以设置的,后文介绍的修改Tmux的配置中修改成了Ctrl+A

创建一个自命名的session并使用多个window

使用以下命令,即可创建一个名为mysession的session。

tmux new -s mysession

image-20200718172533556

在一个session中可以有多个window, 使用Ctrl+B C命令,就在当前(current)会话创建一个新的window了,在新的window中执行top命令,可以看到绿色状态栏原本bash的位置变成了top。

接着使用Ctrl+B W命令,查看所有的window的列表,从而随意切换。也可以直接使用Ctrl+B然后按数字键0-9进行快速切换。

分离(Detach) 和 接入(Attach) Session

如果detach一个session,界面会退出,但是session中的程序会继续在后台运行,而Attach就是回到指定session的界面。

detach的命令为Ctrl+B D

attach的命令为tmux attach-session -t mysession ,(t意为target,mysession为session名),也可以简写成tmux a -t mysession

使用命令tmux ls可以查看当前所有session,从而确定要进入哪个session, 如果你已经在一个session中了使用Ctrl+B S能够快速查看和切换session。

Ctrl+B S查看session

按住右键能够展开查看window并切换,这是真的方便。

image-20200718175731775

p.s. 在screen中,如果要进入一个已经attached的session,就要使用命令screen -D -r <session-name>强行将detach掉那个session(或者说先踢掉使用那个session的用户)然后再进入。而tmux中可以多个终端attach同一个session,比如想教别人远程操作服务器,两个人分别用不同电脑远程连接到同一个session中,其中一个人的所有的操作,在另一个人的电脑都会同时显示出来。

分屏操作

  • Ctrl+b %:划分左右两个窗格。
  • Ctrl+b ":划分上下两个窗格。
  • Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小。
  • Ctrl+b q:显示窗格编号。

image-20200718180042715

分屏在tmux里面叫做窗格(pane),如上图就是3个pane,你会发现退出命令Ctrl+B X退出的时候也是提示你是否退出pane。session和window和pane的关系是:一个session里面可以有很多window,一个window里面可以有很多pane。

具体使用方式根据需求而异, 我自己比较喜欢2个session(一个跑python脚本、一个跑shell脚本)+多个window+单个或多个pane的工作方式, 如果是后台长期挂着的程序,比如我的世界服务端我还是会用screen。

常用命令总结

  • 创建会话 tmux new -s <session-name>
  • 分离session Ctrl+B D
  • 接入session tmux a -t <session-name>
  • 查看所有window Ctrl+B W
  • 查看所有session tmux ls 或在session中使用Ctrl+B S,在列表按方向右键会展开看到window。
  • 重命名session tmux rename-session -t <old-session-name> <new-name>

修改Tmux的配置

修改tmux的配置基本是必须的,不然和screen根本拉不开差距。

配置文件来源:https://www.jianshu.com/p/fd3bbdba9dc9

修改方法是touch ~/.tmux.conf, 输入以下内容。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Send prefix
set-option -g prefix C-a
unbind-key C-a
bind-key C-a send-prefix

# Use Alt-arrow keys to switch panes
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Shift arrow to switch windows
bind -n S-Left previous-window
bind -n S-Right next-window

# Mouse mode
set -g mouse on


# Set easier window split keys
bind-key v split-window -h
bind-key h split-window -v

# Easy config reload
bind-key r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded"

修改包括:

Send prefix 把prefix的ctrl+b变为了ctrl+a,因为这样按起来方便些。基本上用tmux的都改了这个。

Use Alt-arrow keys to switch panes 不用按prefix,直接用alt+箭头在pane之间switch。实际用过之后才发现真是太方便了!

Shift arrow to switch windows 不用按prefix,直接用shift+箭头在window之间switch。太方便了!

Mouse mode 开启鼠标模式。用鼠标就能切换window,pane,还能调整pane的大小,方便!

Set easier window split keys 这一部分是用来更方便切分pane的。prefix + v 代表竖着切,prefix + h 代表横着切。比起默认的切割方法不仅直观而且方便。

Easy config reload 下一次如果修改了.tmux.conf的设置的话,不用关掉tmux。直接用prefix+r,就能重新加载设置。

相关评价