vieyahn2017 / shellv

shell command test and study
4 stars 1 forks source link

6.26 linux下终端分屏tmux #51

Closed vieyahn2017 closed 5 years ago

vieyahn2017 commented 5 years ago

linux下终端分屏使用的两种方法(screen和tmux)

vieyahn2017 commented 5 years ago

本文主要介绍两种终端分屏工具:screen和tmux,分享出来供大家参考学习,下面来看看详细的介绍:

一、使用screen分屏(只能上下分屏,不能左右分屏)

(1)安装工具

在ubuntu系统中使用sudo apt-get install screen 安装screen工具

(2)使用工具

   1,输入命令screen使用工具

   2,上下分屏:ctrl + a  再按shift + s

   3,切换屏幕:ctrl + a  再按tab键

   4,新建一个终端:ctrl + a  再按c

   5,关闭一个终端:ctrl + a  再按x (或直接按exit退出)

二、使用tmux分屏(既可以左右分屏,也可以上下分屏)

(1)安装工具

在ubuntu系统中使用sudo apt-get install tmux安装tmux工具

(2)使用工具

   1,输入命令tmux使用工具

   2,上下分屏:ctrl + b  再按 "

   3,左右分屏:ctrl + b  再按 %

   4,切换屏幕:ctrl + b  再按o

   5,关闭一个终端:ctrl + b  再按x

   6,上下分屏与左右分屏切换: ctrl + b  再按空格键

其他:

! 将当前面板置于新窗口,即新建一个窗口,其中仅包含当前面板 Ctrl+方向键 以1个单元格为单位移动边缘以调整当前面板大小 Alt+方向键 以5个单元格为单位移动边缘以调整当前面板大小 空格键 可以在默认面板布局中切换,试试就知道了 q 显示面板编号 方向键 移动光标选择对应面板 { 向前置换当前面板 } 向后置换当前面板 Alt+o 逆时针旋转当前窗口的面板 Ctrl+o 顺时针旋转当前窗口的面板 总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

原文链接:http://blog.csdn.net/gent__chen/article/details/50588328

vieyahn2017 commented 5 years ago

screen测试了下,不好用,没深入

vieyahn2017 commented 5 years ago

linux terminal分屏--tmux使用理论+实际操作

2018年07月04日 14:07:36 RGiant 阅读数 2621 版权声明:感恩分享 https://blog.csdn.net/sinat_36330809/article/details/80907284 安装:

几个名词解释:

session 会话:一个服务器可以包含多个会话

window 窗口:一个会话可以包含多个窗口

pane 面板:一个窗口可以包含多个面板[强悍的分屏]

打开tmux会话并新建和关闭一个窗口,新建和关闭上下分屏和左右分屏

vieyahn2017 commented 5 years ago

由上面Shell返回 tmux: tmux attach-session -t 数字

vieyahn2017 commented 5 years ago

很多帖子都是快捷键的操作,暂略

vieyahn2017 commented 5 years ago

linux终端窗口可以切屏——tmux利器之常用命令

2014年08月29日 14:23:57 guugle2010 阅读数 3923 在远程到一台机器或者在本地终端下,经常发现,一个终端远远地不够用,经常需要同时打开几个,往往还希望这几个窗口同时显示在视线内。tmux正是为这种需求而生。

效果如下:

  1. shell中的命令 创建一个会话 tmux new -s xiehc 或者 tmux new-session -s xiehc 退出会话直接exit就可以了

创建一个后台会话 tmux new -s backrun -d

跳转到一个会话 tmux a -t name

查看所有会话 tmux list-sessions

连接一个存在的会话 tmux attach -t xiehc

kill会话 tmux kill-session -t xiehc

  1. session中的一些快捷键 说明:一个session中可以有多个窗口(window),一个窗口可以切屏,叫做面板(pane)

系统操作 C + b ? #列出快捷键 (C 表示CTRL键,后面同理) C + b d #退出当前会话 C + b r #强制重绘未脱离的会话 C + b s #选择并切换会话;在同时开启了多个会话时使用 C + z #挂起当前会话 窗口操作 C + b & #关闭当前窗口 C + b c #在一个session中开启一个新的窗口(一个session可以开启多个小窗口) C + b w #在一个session会话中的多个窗口中作出选择 C + b n #在一个session会话中跳转到指定窗口(n代表具体数字,是窗口的序号) C + b , #重命名当前窗口;这样便于识别 面板操作
C + b % #将当前窗口分成左右两分,面板 C + b “ #将当前窗口分成上下两分,面板 C + b 方向键 #让光标在不同的面板中跳转 C + b x #关闭一个session中当前光标处的小面板 C + b ! #将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板 C + b pagedown pageup 方向键 #翻页

vieyahn2017 commented 5 years ago

Tmux 快捷键 & 速查表

https://gist.github.com/ryerh/14b7c24dfd623ef8edc7

vieyahn2017 commented 5 years ago

Linux下终端利器tmux

https://blog.csdn.net/lakeheart879/article/details/56670209

脚本化启动 把以下脚本内容加入到~/.bashrc,即可每次登录进入到tmux

tmux_init()
{
tmux new-session -s "kumu" -d -n "local" # 开启一个会话
tmux new-window -n "other" # 开启一个窗口
tmux split-window -h # 开启一个竖屏
tmux split-window -v "top" # 开启一个横屏,并执行top命令
tmux -2 attach-session -d # tmux -2强制启用256color,连接已开启的tmux
}
# 判断是否已有开启的tmux会话,没有则开启
if which tmux 2>&1 >/dev/null; then
test -z "$TMUX" && (tmux attach || tmux_init)
fi
vieyahn2017 commented 5 years ago

Tmux使用手册

http://louiszhai.github.io/2017/09/30/tmux/

这个最全

tmux是一款优秀的终端复用软件,它比Screen更加强大,至于如何强大,网上有大量的文章讨论了这点,本文不再重复。tmux之所以受人们喜爱,主要得益于以下三处功能:

丝滑分屏(split),虽然iTem2也提供了横向和竖向分屏功能,但这种分屏功能非常拙劣,完全等同于屏幕新开一个窗口,新开的pane不会自动进入到当前目录,也没有记住当前登录状态。这意味着如果我ssh进入到远程服务器时,iTem2新开的pane中,我依然要重新走一遍ssh登录的老路(omg)。tmux就不会这样,tmux窗口中,新开的pane,默认进入到之前的路径,如果是ssh连接,登录状态也依旧保持着,如此一来,我就可以随意的增删pane,这种灵活性,好处不言而喻。

保护现场(attach),即使命令行的工作只进行到一半,关闭终端后还可以重新进入到操作现场,继续工作。对于ssh远程连接而言,即使网络不稳定也没有关系,掉线后重新连接,可以直奔现场,之前运行中的任务,依旧在跑,就好像从来没有离开过一样;特别是在远程服务器上运行耗时的任务,tmux可以帮你一直保持住会话。如此一来,你就可以随时随地放心地进行移动办公,只要你附近的计算机装有tmux(没有你也可以花几分钟装一个),你就能继续刚才的工作。

会话共享(适用于结对编程或远程教学),将 tmux 会话的地址分享给他人,这样他们就可以通过 SSH 接入该会话。如果你要给同事演示远程服务器的操作,他不必直勾勾地盯着你的屏幕,借助tmux,他完全可以进入到你的会话,然后静静地看着他桌面上你风骚的键盘走位,只要他愿意,甚至还可以录个屏。 以上,只是主要功能,更多功能还在后头,接下来我将详细地介绍tmux的使用技巧。

vieyahn2017 commented 5 years ago

tmux采用C/S模型构建,输入tmux命令就相当于开启了一个服务器,此时默认将新建一个会话,然后会话中默认新建一个窗口,窗口中默认新建一个面板。会话、窗口、面板之间的联系如下:

一个tmux session(会话)可以包含多个window(窗口),窗口默认充满会话界面,因此这些窗口中可以运行相关性不大的任务。

一个window又可以包含多个pane(面板),窗口下的面板,都处于同一界面下,这些面板适合运行相关性高的任务,以便同时观察到它们的运行情况。

vieyahn2017 commented 5 years ago

面板最大化 当窗口中面板的数量逐渐增多时,每个面板的空间就会逐渐减少。为了保证有足够的空间显示内容,tmux从v1.8版本起,提供了面板的最大化功能,输入tmux-prefix+z,就可以最大化当前面板至窗口大小,只要再重复输入一次,便恢复正常。那么tmux v1.8以下的版本,怎么办呢?别急,有大神提供了如下的解决方案。

首先编写一个zoom脚本,该脚本通过新建一个窗口,交换当前面板与新的窗口默认面板位置,来模拟最大的功能;通过重复一次按键,还原面板位置,并关闭新建的窗口,来模拟还原功能,如下所示:

#!/bin/bash -f
currentwindow=`tmux list-window | tr '\t' ' ' | sed -n -e '/(active)/s/^[^:]*: *\([^ ]*\) .*/\1/gp'`;
currentpane=`tmux list-panes | sed -n -e '/(active)/s/^\([^:]*\):.*/\1/gp'`;
panecount=`tmux list-panes | wc | sed -e 's/^ *//g' -e 's/ .*$//g'`;
inzoom=`echo $currentwindow | sed -n -e '/^zoom/p'`;
if [ $panecount -ne 1 ]; then
    inzoom="";
fi
if [ $inzoom ]; then
    lastpane=`echo $currentwindow | rev | cut -f 1 -d '@' | rev`;
    lastwindow=`echo $currentwindow | cut -f 2- -d '@' | rev | cut -f 2- -d '@' | rev`;
    tmux select-window -t $lastwindow;
    tmux select-pane -t $lastpane;
    tmux swap-pane -s $currentwindow;
    tmux kill-window -t $currentwindow;
else
    newwindowname=zoom@$currentwindow@$currentpane;
    tmux new-window -d -n $newwindowname;
    tmux swap-pane -s $newwindowname;
    tmux select-window -t $newwindowname;
fi

不妨将该脚本存放在~/.tmux目录中(没有则新建目录),接下来只需要绑定一个快捷指令就行,如下。

unbind z
bind z run ". ~/.tmux/zoom"

窗口变为面板 通过上面的zoom脚本,面板可以轻松地最大化为一个新的窗口。那么反过来,窗口是不是可以最小化为一个面板呢?

试想这样一个场景:当你打开多个窗口后,然后想将其中几个窗口合并到当前窗口中,以便对比观察输出。

实际上,你的要求就是将其它窗口变成面板,然后合并到当前窗口中。对于这种操作,我们可以在当前窗口,按下prefix + :,打开命令行,然后输入如下命令:

join-pane -s window01 # 合并名称为window01的窗口的默认(第一个)面板到当前窗口中
join-pane -s window01.1 # .1显式指定了第一个面板,.2就是第二个面板(我本地将面板编号起始值设置为1,默认是0)

每次执行join-pane命令都会合并一个面板,并且指定的窗口会减少一个面板,直到面板数量为0,窗口关闭。