一文带你走进 Linux 小工具 - tmux
一、背景
Linux shell 是 Linux 程序员、运维人员不可或缺的工具。往往是通过 ssh 工具(如 XShell 和 SecurtCRT)连接到 Linux,执行 shell 命令。
你是否有遇到如下的情况:
(1)一个命令需要很长时间才能执行完成,但是由于与 Linux 连接中断,或者执行的窗口关闭了,导致命令提前退出;
(2)需要同时看两个或更多的窗口,对比文件内容或监控多个任务。
如何解决上述遇到的情况,是否存在可靠的工具可供使用?本期技术贴将为大家带来 Linux 小工具 - tmux 的介绍,它是一个 terminal multiplexer(终端复用器),可以启动一系列终端会话。主要特点是 shell 连接断开后,窗口中仍然保持运行环境。当下次登录到该服务器后,可以通过 attach 命令连接到之前的窗口,继续之前的工作。
二、安装
tmux 是一个用 C 语言开发的开源工具,源码地址:https://github.com/tmux/tmux,当前有 28.9k 个 star,可见其很受欢迎。只能在 Linux 生态的环境中运行,常见的 Linux 发行版中都内置了安装包,另外也可以源码安装。
1. 源码安装
git clone https://github.com/tmux/tmux.git cd tmux sh autogen.sh ./configure && make
2. 安装包安装
# Ubuntu 或 Debian $ sudo apt-get install tmux -y # CentOS 或 Fedora $ sudo yum install tmux -y # Mac $ brew install tmux
三、基本概念
在使用 tmux 之前,先要了解 tmux 中的几个概念:
-
session(会话):tmux 的架构是由 server 和 client 组成,它们之间通过本地 socket 交互。一个 session 表示一个与 server 的连接,允许任意多个使用者 attach 到这个 session 上,他们将看到完全相同的内容;
-
window(窗口):一个 session 包含任意多个 window,每一个 window 都占用整个屏幕;
-
pane(子窗口):window 可以被拆分成任意多个子窗口,称之为 pane,这些 pane 可以水平或垂直分布。
四、常用命令
1. 基础命令
(1)查看 tmux 命令列表
#完整语法:list-commands (lscm) [-F format] #常用形式 tmux lscm
(2)查看快捷键
# 完整语法:list-keys (lsk) [-T key-table] # 常用形式: tmux lsk
bind-key -T prefix C-o rotate-window
bind-key -T prefix Space next-layout
bind-key -T prefix ! break-pane
bind-key -T prefix \" split-window
bind-key -T prefix % split-window -h
bind-key -T prefix 0 select-window -t :=0
bind-key -T prefix 1 select-window -t :=1
bind-key -T prefix 2 select-window -t :=2
bind-key -T prefix 3 select-window -t :=3
bind-key -T prefix 4 select-window -t :=4
bind-key -T prefix 5 select-window -t :=5
bind-key -T prefix 6 select-window -t :=6
bind-key -T prefix 7 select-window -t :=7
bind-key -T prefix 8 select-window -t :=8
bind-key -T prefix 9 select-window -t :=9
bind-key -T prefix : command-prompt
bind-key -T prefix \; last-pane
bind-key -T prefix ? list-keys
bind-key -T prefix D choose-client -Z
bind-key -T prefix E select-layout -E
bind-key -T prefix L switch-client -l
bind-key -T prefix M select-pane -M
bind-key -T prefix c new-window
bind-key -T prefix d detach-client
bind-key -T prefix i display-message
bind-key -T prefix l last-window
bind-key -T prefix m select-pane -m
bind-key -T prefix n next-window
bind-key -T prefix o select-pane -t :.+
bind-key -T prefix p previous-window
bind-key -T prefix q display-panes
bind-key -T prefix r refresh-client
bind-key -T prefix s choose-tree -Zs
bind-key -T prefix t clock-mode
bind-key -T prefix w choose-tree -Zw
bind-key -T prefix x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key -T prefix z resize-pane -Z
bind-key -T prefix \{ swap-pane -U
bind-key -T prefix \} swap-pane -D
bind-key -T prefix \~ show-messages
bind-key -r -T prefix Up select-pane -U
bind-key -r -T prefix Down select-pane -D
bind-key -r -T prefix Left select-pane -L
bind-key -r -T prefix Right select-pane -R
bind-key -T prefix M-1 select-layout even-horizontal
bind-key -T prefix M-2 select-layout even-vertical
bind-key -T prefix M-3 select-layout main-horizontal
bind-key -T prefix M-4 select-layout main-vertical
bind-key -T prefix M-5 select-layout tiled
bind-key -T prefix M-n next-window -a
bind-key -T prefix M-o rotate-window -D
bind-key -T prefix M-p previous-window -a
bind-key -r -T prefix M-Up resize-pane -U 5
bind-key -r -T prefix M-Down resize-pane -D 5
bind-key -r -T prefix M-Left resize-pane -L 5
bind-key -r -T prefix M-Right resize-pane -R 5
(3)快捷键的使用
当用户 attach 到一个 session 后,可以使用快捷键简化操作。tmux 中常用的快捷键通过 ctrl+b 触发。也就说,用户先按下 ctrl+b,然后松开,再其他快捷键。
如上一节所示,常见的快捷:
-
0~9 表示选择 0~9 对应的 window;
-
" 表示水平分隔 window,即将 window 分隔为两个水平分布的 pane;
-
% 表示垂直分隔 window。
2. session 相关命令
(1)开启一个新 session
#完整语法:new-session (new) [-AdDEPX] [-c start-directory] [-F format] [-n window-name] [-s session-name] [-t target-session] [-x width] [-y height] [command] #常用形式 tmux new -n <window-name> -s <session-name> # 或 开启匿名session tmux
(2)查看存活的 session 列表
# 完整语法:list-sessions (ls) [-F format] # 常用形式 tmux ls
(3)关联一个 session
# 完整语法:attach-session (attach) [-dErx] [-c working-directory] [-t target-session] # 常用形式 tmux attach -t <sesion>
(4)分离一个 session
#完整语法:detach-client (detach) [-aP] [-E shell-command] [-s target-session] [-t target-client] #常用形式 tmux detach
(5)停止一个 session
-
当 attach 到一个 session 之后,在 session 在窗口中执行 exit 停止当前 window,当最后一个 window 停止之后,session 自动终止。
-
# kill-session [-aC] [-t target-session] # 常用形式 tmux kill-session -t <session-name>
3. window 相关命令
(1)新建一个 window
# 完整语法:new-window (neww) [-adkP] [-c start-directory] [-e environment] [-F format] [-n window-name] [-t target-window] [command] # 常用形式:tmux neww -t <session-name[:session-index]> -n <window-name>
快捷键(ctrl +b):c
(2)退出一个 window
# 完整语法:kill-window (killw) [-a] [-t target-window] # 常用形式: tmux killw -t <window-name or window-index>
快捷键(ctrl +b):& 或在 shell 窗口执行:exit。
(3)切换 window
# 完整语法:select-window (selectw) [-lnpT] [-t target-window] # 常用形式 tmux selectw -t <window-name or window-index>
快捷键(ctrl +b):0~9
4. pane 相关命令
(1)水平拆分 window(pane)
# 完整语法:split-window (splitw) [-bdefhIPv] [-c start-directory] [-e environment] [-F format] [-p percentage|-l size] [-t target-pane] [command] # 常用形式:tmux splitw -h -t <pane-name>
快捷键(ctrl +b):%
注:水平拆分 window 是指拆分后,两个 pane 水平分布,即左右各一个窗口。
(2)垂直拆分 window(pane)
# 完整语法:split-window (splitw) [-bdefhIPv] [-c start-directory] [-e environment] [-F format] [-p percentage|-l size] [-t target-pane] [command] # 常用形式:tmux splitw -t <pane-name>
快捷键(ctrl +b):"
注:垂直拆分 window 是指拆分后,两个 pane 垂直分布,即上下各一个窗口。
(3)查看 pane 列表
# 完整语法:list-panes (lsp) [-as] [-F format] [-t target-window] # 常用形式:tmux lsp
(4)切换 pane
# 完整语法:select-pane (selectp) [-DdeLlMmRU] [-T title] [-t target-pane] # 常用形式:# 选择当前 pane 下面的 pane tmux selectp -D # 选择当前 pane 上面的 pane tmux selectp -U # 选择当前 pane 左面的 pane tmux selectp -L # 选择当前 pane 右面的pane tmux selectp -R # 选择指定名字的 pane tmux selectp -t <pane-name or pane-index>
快捷键(ctrl +b):Up、Down、Left、Right
(5)退出 pane
# 完整语法:kill-pane (killp) [-a] [-t target-pane] # 常用形式:tmux killp -t <pane-name or pane-index>
快捷键(ctrl +b):x 或在当前 pane 执行:exit。
(6)调整 pane 尺寸
# 完整语法:resize-pane (resizep) [-DLMRUZ] [-x width] [-y height] [-t target-pane] [adjustment] # 常用形式:# 向上调整 tmux resizep -U # 向下调整 tmux resizep -D # 向左调整 tmux resizep -L # 向右调整 tmux resizep -R
快捷键:ctl + b + [ Up | Down | Left | Right ]
五、应用场景
1. 后台保持工作环境(后台运行程序)
小 A 同学是一名程序员,经常需要在 Linux 服务器上开发测试程序。他使用 xshell 连接到 Linux 服务器上,设置自己的工作环境,然后开始自己的工作。有些工作一天做不完,但又不得不在下班时断开与服务器的链接,关掉 xshell 窗口,第二天再重新连接 Linux 服务器,手动恢复前一天的工作环境。特别是有些需要执行时间很长的命令(比如编译、测试等),也不方便利用晚上下班后的时间。
使用 tmux 可以很好解决上面的问题。首先,执行 tmux new -t <session-name> 创建一个名称为 <session-name> 的 session,执行后进入了 tmux 工作 window(窗口)。接下来,在该窗口中进行正常工作,在 tmux 的 window 与普通的 shell 窗口几乎没有区别。当结束了一天工作,执行 tmux detach 退出 <session-name>。
第二天,使用 xshell 登录 linux 服务器,执行 tmux attach -t <session-name> attach 到昨天的 session,此时看到的内容和昨天退出时完全一样。
另外,还一个小技巧:如果忘了 session-name 还可以通过执行 tmux ls 查看 session 列表。
2. 多窗口对比
小 A 同学遇到了另外一个问题:在性能测试的时候他想同时看 CPU 实时使用情况、内存实时使用情况、实时输出的日志以及执行命令窗口。之前的做法是同时打开多个 xshell 的 tab,然后手动在屏幕上排列对齐。虽然也能解决问题,但很不方便。
如果使用 tmux 的 pane(子窗口)就能完美的解决该问题。首先,attach 到 tmux 窗口,此时看到的是一个窗口占据了整个屏幕;接着,执行 tmux splitw [-h] 或者快捷键 ctrl+b # 或/"分隔窗口。重复上述步骤,可以得到任意多的子窗口(pane)。
接下来,通过快捷键 ctrl+b Up/Down/Left/Right 在各子窗口之间切换,在各子窗口中进行不同的工作,比如右上窗口用 nomn 监视 CPU,右下窗口用 nmon 监视内存,左下窗口监视日志,左上窗口执行命令。
3. 协作开发
小 B 同学是小 A 同学的同事,是公司里的技术大牛。这次小 A 同学遇到了一个 bug,百思不得其解,就去请大牛小 B 同学帮忙。小 B 同学使用相同的 Linux 用户登录到 Linux 服务器,然后 attach 到小 A 的 session,切换到小 A 正在使用的窗口。开始在窗口中疯狂地敲入各种命令,很快 bug 解决了。整个调试过程小 A 在他的电脑屏幕上都可以看到,因为同一个 session 的窗口在各个用户之间实时共享的。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云 PAI - 灵骏大模型训练工具 Pai-Megatron-Patch 正式开源
Pai-Megatron-Patch是什么 Pai-Megatron-Patch工具是阿里云机器学习平台PAI算法团队研发,基于阿里云智算服务PAI-灵骏平台的大模型最佳实践解决方案配套工具,旨在帮助大模型开发者快速上手灵骏产品,完成大语言模型(LLM)的高效分布式训练,有监督指令微调,模型离线推理验证等完整大模型开发链路。该项目提供了业界主流开源大模型基于Megatron-LM的训练&离线推理验证流程,方便用户快速上手大模型训练。 主要特性 多款热门大模型支持:llama,llama-2,codellama, 百川,通义千问,Falcon,GLM,Starcoder,Bloom,chatglm等 支持模型权重互转转换:在Huggingface,Megatron和Transformer Engine之间进行算子命名空间映射 支持Flash Attention 2.0和Transformer Engine模式下的FP8训练加速且确保收敛 丰富且简单易用的使用示例,支持大模型预训练,微调,评估和推理,强化学习全流程最佳实践 开源地址 https://github.com/aliba...
- 下一篇
全面解读 SQL 优化 - 统计信息
一、简介 数据库中的优化器(optimizer)是一个重要的组件,用于分析 SQL 查询语句,并生成执行计划。在生成执行计划时,优化器需要依赖数据库中的统计信息来估算查询的成本,从而选择最优的执行计划。以下是关于数据库中优化器统计信息的简介: (1)统计信息概述 统计信息是描述表或索引中数据分布情况的元数据。这些信息包括行数、数据分布、重复值等,都是优化器选择执行计划的关键因素。 (2)统计信息来源 统计信息被收集并存储在数据字典中,可以通过特定的 SQL 命令(如 ANALYZE TABLE)来手动收集;也可以被自动收集,以保持数据字典的最新状态。 (3)统计信息类型 统计信息包括两种不同类型的信息,系统级别和对象级别。系统级别的统计信息是全局性的,如整个数据库中所有表的平均行长度;而对象级别的统计信息是特定对象的信息,如表或索引的平均行长度、列值的分布和直方图等。 (4)统计信息用途 优化器使用统计信息作为计算成本的基础,从而选择最优执行计划。优化器所使用的统计信息包括表的行数、每个列的唯一值数目、平均列长度等。 (5)统计信息更新 数据的分布会随着时间和数据量的增长而发生变化,因...
相关文章
文章评论
共有0条评论来说两句吧...