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                                         关闭所有会话
相关推荐
JunLan~2 小时前
Rocky Linux 系统安装/部署 Docker
linux·docker·容器
方竞3 小时前
Linux空口抓包方法
linux·空口抓包
sun0077003 小时前
ubuntu dpkg 删除安装包
运维·服务器·ubuntu
海岛日记4 小时前
centos一键卸载docker脚本
linux·docker·centos
oi774 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
AttackingLin4 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
吃肉不能购5 小时前
Label-studio-ml-backend 和YOLOV8 YOLO11自动化标注,目标检测,实例分割,图像分类,关键点估计,视频跟踪
运维·yolo·自动化
学Linux的语莫5 小时前
Ansible使用简介和基础使用
linux·运维·服务器·nginx·云计算·ansible