linux 命令 tmux 用法详解

一、tmux 解决的痛点(screen命令一样可以解决,但是tmux功能更强大)

痛点一:大数据传输的漫长一夜

相信做过 Linux 服务运维的同学,都用 scp 进行过服务器间的大文件网络传输。一般这需要很长的时间,这期间,如果工作电脑出现断网或者断电的情况,则会导致远程连接工具无法与服务器通信,从而使得它所控制的数据传输也因此中断。

情景再现:

bash 复制代码
localhost:~ roc$ ls -hl
total 36419584
-rw-------  1 roc  staff    17G  1 20 11:06 win7.vdi
 
localhost:~ roc$ scp -P 22000 win7.vdi roc@roclinux.cn:/home/roc
win7.vdi                                                                              0% 7296KB 800.3KB/s 6:19:05

一个 17GB 的大文件,刚刚开始传输,预估耗时 6 小时 19 分钟,谁能保证中间不出现关机和断电的情况呢。

有些同学说可以用 nohup 来解决啊,是的,这是一个办法,可是使用 nohup 的问题在于如果同时传输的任务众多,则最后你自己可能都分不清哪个任务对应哪个传输了,何况 nohup 还会留下 nohup.out 这么一个临时文件在那里。

还有同学说,即使中断了,也可以断点续传啊。可惜的是,scp 并不支持断点续传。如果改用 rsync 倒是可以,可惜 rsync 参数用起来很是复杂,谁能保证每位运维工程师都能熟练掌握那么多复杂的参数呢?这个时候,请试一试 tmux 吧!

痛点二:正在编译却被拉去开会

和大文件数据传输情况类似,一些大型的开发项目的代码编译过程,往往也需要很长的时间,短则几分钟,长则一通宵。对于一通宵的编译来说,这要是中间出现断网断电,那就相当悲剧了。整个项目进展就又要向后推迟至少一天。这个时候,我们向你推荐 tmux!

痛点三:多个窗口切换到晕

作为运维工程师,一定有过在众多窗口间切换,查看各种服务器上的信息和状态的情况,这个时候,如果没有一款好用的窗口管理软件,过不了多久,你就会晕头转向了。就像图 2 所示的这种情况。

痛点四:一屏显示多窗口之殇

有时候为了进行多文件内容对比,如果没有一款很好用的分屏管理工具,那么我们只好创建多个终端,然后手动调整它们的大小和位置,如图 3 所示。

二、tmux 命令安装、配置及窗口元素介绍

1. 命令安装

bash 复制代码
$ sudo apt-get install tmux

打开tmux 运行该命令会新建一个窗口为0,此时窗格就是窗口的默认会话,会话名默认为0,也可以自定义会话名字,这个后面会说到。

bash 复制代码
$ tmux

按下Ctrl+d或者显式输入exit命令,就可以退出 Tmux 窗口

2. 配置

首先,如果你有一个已有的 tmux 配置文件,请对其进行备份。tmux 的配置文件是 ~/.tmux.conf

特别是要配置鼠标操作,这部分很重要不然记不住切换的一些命令

bash 复制代码
//18.04配置
#below reset tmux prefix command key
set -g prefix C-x
unbind C-b
bind C-x send-prefix
#set swap pane key
bind-key k select-pane -U
bind-key j select-pane -D
bind-key h select-pane -L
bind-key l select-pane -R
set-option -g mouse on

在14.04上会出现不能用出现鼠标不能选取窗口或则回滚,故将

bash 复制代码
set-option -g mouse on

替换为

bash 复制代码
setw -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on

为了使自身的快捷键和其他软件的快捷键互不干扰,Tmux 提供了一个快捷键前缀。当想要使用快捷键时,需要先按下快捷键前缀,然后再按下快捷键。Tmux 所使用的快捷键前缀默认是组合键Ctrl-b(同时按下 Ctrl 键和 b 键)。例如,假如你想通过快捷键列出当前 Tmux 中的会话(对应的快捷键是 s),那么你只需要做以下几步:

bash 复制代码
• 按下组合键 Ctrl-b (Tmux 快捷键前缀)
• 放开组合键 Ctrl-b
• 按下 s 键

3. 窗口元素介绍

三、常用操作

1. 会话操作

新建 session

新建一个 session ,在终端输入一个 tmux 命令即可:

bash 复制代码
tmux

上面的命令会创建一个 session ,默认是通过数字编号来命令的,有时候我们需要明确的知道我们的 session 的名字,方便我们快速进入该 session ,我们可以使用如下的命令:

bash 复制代码
tmux new -s  <session-name> 

例如新建一个名称是 keenon 的session :

bash 复制代码
tmux new -s keenon

离开 session

有时候我们需要离开终端,操作其他的任务,需要离开该任务,但是又想该任务继续在后台执行,这时候我们需要在 tmux 的任何一个窗格中输入如下命令:

bash 复制代码
tmux detach

也可以使用快捷键

bash 复制代码
 ctrl + b   d 

这里解释一下该快捷键,上面已经提到过快捷键。 tmux 离开 session 的快捷键是 d ,但是在 tmux 当中任何快捷键都需要搭配 tmux 的前缀按键 ctrl + b 来唤醒,所以改快捷键的操作是先按 ctrl +b ,紧接着按下按键 d ,这样我们便顺利的离开当前 session 了。

查看 session 列表

有时候我们可能同时操作了好几个 session, 我们可以通过如下的命令来查看我们目前操作了几个session:

bash 复制代码
tmux  ls  

也可以通过快捷键操作

bash 复制代码
 ctrl + b s 

列出所有的 session。

进入 session

离开 session 之后,有时候我们还需要对某个 session 进行操作,这时候可以通过如下的操作:

bash 复制代码
tmux attach -t  <session-name>

例如我的 session 名称是 keenon , 就可以通过 tmux attach -t keenon 顺利进入 session,

也可以通过 tmux a -t keenon,该命令中的 a 是 attach 的简写形式

关闭 session

如果需要关闭 session, 可以通过执行如下的命令即可:

bash 复制代码
tmux kill-session -t <session-name>

例如关闭zempty 这个session :

bash 复制代码
tmux kill-session -t zempty

也可以使用快捷键 ctrl + d 来关闭当前的 session。

切换 session

执行命令,可以从当前的 session 快速切换到另一个 session:

bash 复制代码
tmux switch -t <session-name>

重命名 session

bash 复制代码
tmux rename-session -t <old-session-name> <new-session-name>

例如: tmux rename-session -t keenon wuxi 该命令会把 keenon这个 session 重新命名为 wuxi.

也可以通过快捷键 ctrl +b $ 来重命名当前的session 。

session 总结

bash 复制代码
session 在 tmux 操作当中非常重要,希望你可以熟练的使用以上操作: 新建 session -> 离开 session -> 查看
session 列表 -> 进入 session -> 关闭 session -> 不同 session 之间的切换 -> 重命名 session。

2. 窗口操作

新建 切换 关闭

输入tmux后进入到终端复用器,其会话名默认为0,依次累加。

bash 复制代码
& 关闭当前窗口
l 前后窗口间互相切换
. 修改当前窗口编号,相当于重新排序
f 在所有窗口中查找关键词
, 重命名当前窗口
w 列出所有窗口
% 水平分割窗口
" 竖直分割窗口
n 选择下一个窗口
p 选择上一个窗口
0~9 选择 0~9 对应的窗口

3. 窗格操作

分屏(新建)切换 关闭

好了,至此,你已经掌握了最最基本的 tmux 使用方法了。当然,tmux 还有很多更高级的用法,但是为了方便调试,用到基本功能就足够了。

bash 复制代码
>tmux new  创建默认名称的会话(在tmux命令模式使用new命令可实现同样的功能,其他命令同理,后文不再列出tmux终端命令)
>tmux new -s mysession               创建名为mysession的会话 
>tmux ls                                               显示会话列表 
>tmux a -t mysession                     连接指定会话 
>tmux rename -t s1   s2                 重命名会话s1为s2
>tmux kill-session                           关闭上次打开的会话
>tmux kill-session -ts1                  关闭会话s1
>tmux kill-session -a -t s1            关闭除s1外的所有会话 tmux
>kill-server                                         关闭所有会话
相关推荐
大树886 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush46 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5206 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz6 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工7 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智7 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩8 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_8 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化