当前位置: 首页 > Linux

超级强大的Linux终端多路复用神器(附安装使用教程)

时间:2023-04-07 03:24:16 Linux

Tmux介绍Tmux是一款优秀的终端多路复用软件,类似GNUScreen,但是来自OpenBSD,有BSD授权。使用它最直观的好处是,通过终端登录远程主机并运行tmux后,可以在其中打开多个控制台,而无需“浪费”额外的终端连接远程主机。它是BSD实现的Screen的替代品。与Screen相比,它更高级:支持分屏,丰富的命令行参数,可以灵活动态地进行各种布局和操作。Tmux可用于在一个终端窗口中运行多个终端会话。不仅如此,你还可以让终端会话在后台运行或者通过Tmux按需连接和断开会话,这非常有用。tmux使用场景1)一个程序在执行时可以一直处于输出状态。需要结合nohup和&后台执行,ctrl+c结束。这时候可以打开一个Tmux窗口,在这个窗口中执行这个程序,保证程序一直在运行,只要不关闭Tmux窗口。如果不小心关闭了终端窗口,或者操作有误,之前的努力就前功尽弃了。使用Tmuxsession来运行命令或任务,就不用担心这些问题了。3)下班后,需要断开ssh或者关闭电脑,将正在运行的命令或任务放到后台运行。4)关闭终端,再次打开时,原终端中的任务进程仍然不会中断Tmux功能:它提供了一个强大易用的命令行界面。窗口可以水平和垂直分割。窗格可以自由移动和调整大小,或利用四种预设布局中的一种。支持UTF-8编码和256色终端。复制和粘贴可以在多个缓冲区中完成。可以通过交互式菜单选择窗口、会话和客户端。支持跨窗口搜索。支持自动和手动锁定窗口。tmux安装ubuntu版直接apt-get安装#sudoapt-getinstalltmuxcentos7版直接yum安装#yuminstall-ytmuxCentos6编译安装tmux官网下载地址:http://tmux.github.io/#yuminstalllibeventlibevent-develncurses-devel#tar-zvxftmux-2.3.tar.gz(提前下载:wgethttps://github.com/tmux/tmux/releases/download/2.3/tmux-2.3.tar.gz)#cdtmux-2.3#./configure#make&&makeinstall1)make编译tmux时,可能报错control.c:Infunction'control_callback':control.c:63:warning:implicitdeclarationoffunction'evbuffer_readln'control.c:63:error:'EVBUFFER_EOL_LF'undeclared(firstuseinthisfunction)control.c:63:error:(Eachundeclaredidentifierisreportedonlyoncecontrol.c:63:error:foreachfunctionitappearsin.)control.c:63错误:(每个未声明的标识符只报告一次):warning:assignmentmakespointerfromintegerwithoutacastmake:***[control.o]Error1原因:使用的libevent版本太低,tmux1.8要求libevent>=2.0.10-stable解决办法:#yumremovelibeventlibevent-devel//首先卸载yum安装的libevent#rpm-qa|greplibevent//确保是卸载后到http://libevent.org/下载...#tar-zvxflibevent-2.0.21-stable.tar.gz(提前下载:wgethttps://cloud.github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz)#cdlibevent-2.0.21-stable#./configure#make&&makeinstall#ll/usr/local/lib/libevent.so然后make编译tmux顺利通过了~~2)运行tmux时可能出现的错误:tmux:errorwhileloadingsharedlibraries:libevent-2.0.so.5:cannotopensharedobjectfile:Nosuchfileordirectory解决方法:创建对应的软链接32bit系统#ln-s/usr/local/lib/libevent-2.0.so.5/usr/lib/libevent-2.0.so.564位系统#ln-s/usr/local/lib/libevent-2.0.so.5/usr/lib64/libevent-2.0.so.5在MacOS上安装安装Homebrew$ruby??-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"installtmux$brewinstalltmuxTmux的使用安装完成后,输入命令tmux打开软件。界面非常简单,类似于终端控制台,下面有一个状态栏;但是根据tmux的定义,tmuxserver开启后,会先创建。一个会话,这个会话首先会创建一个只包含一个面板的窗口;也就是说,这里看到的所谓终端控制台应该叫做tmux的一个面板,虽然它的用法和终端控制台完全一样#tmux//直接进入面板,效果如下:Tmux快捷键说明:注意:进入tmux面板后,必须先按ctrl+b,然后松开,再按其他组合键才能生效。常用组合键:ctrl+b?显示快捷键帮助ctrl+b空格键采用下一个内置布局。这很有趣。当有多个屏幕时,用这个在多个屏幕上垂直显示ctrl+b!将当前窗口变为新窗口ctrl+b"模块化分割窗口ctrl+b%垂直分割窗口ctrl+bq显示分割窗口编号ctrl+bo跳转到下一个分割窗口。多屏切换ctrl+b上下键Previousandnextsplitwindowctrl+bC-Arrowkey调整分割窗口的大小ctrl+b&确认后退出当前tmuxctrl+b[复制模式,即把当前屏幕移动到上一个位置,其他窗口全部移动一个一个向前ctrl+bc创建一个新窗口ctrl+bn选择下一个窗口ctrl+bl最后使用的窗口ctrl+bp选择上一个窗口ctrl+bw在菜单模式下显示和选择窗口ctrl+bs显示和选择会话菜单模式下,这个比较常用,可以选择进入哪个tmuxctrl+bt显示时钟。然后按回车键回到shell终端状态ctrl+bd离开当前会话;这样就可以暂时回到Shell界面,输入tmuxattach重新进入之前的session。tmux的常规运维命令创建一个新会话,比如创建一个新会话给“ccc”命名为[root@Centos6~]#tmuxnew-sccc加参数-d,表示在backgroundroot@bobo:~#tmuxnew-sshibo-droot@bobo:~#tmuxlsshibo:1windows(createdTueOct219:22:322018)[135x35]查看所有创建的会话[root@Centos6~]#tmuxls0:1windows(createdWedAug3017:58:202017)[112x22](attached)#attached这里表示会话是当前会话aaa:2windows(createdWedAug3016:54:332017)[112x22]ccc:1个窗口(2017年8月30日星期三17:01:05创建)[112x22]登录一个已知会话。即从终端环境进入会话。第一个参数a也可以写成attach。下面的aaa是会话名称。[root@Centos6~]#tmuxa-taaaExitingasessionisnotclosing:登录某个session后,依次按ctrl-b+d,会降级session,但不会关闭session。如果直接ctrl+d,退出session的调用也会关闭session!关闭会话(销毁会话)[root@Centos6~]#tmuxlsaaa:2windows(createdWedAug3016:54:332017)[112x22]bbb:1windows(createdWedAug3019:02:092017)[112x22][root@Centos6~]#tmuxkill-session-tbbb[root@Centos6~]#tmuxlsaaa:2windows(createdWedAug3016:54:332017)[112x22]重命名会话[root@Centos6~]#tmuxlswangshibo:1windows(createdSunSep3010:17:002018)[136x29](attached)[root@Centos6~]#tmuxrename-twangshibokevin[root@Centos6~]#tmuxlskevin:1windows(createdSunSep3010:17:002018)[136x29](附)tmux的远程批量操作shell脚本在使用SSH或telnet远程连接服务器时可能会遇到一些长时间运行的任务头痛,比如系统备份,ftp传输等。通常我们为这些任务中的每一个打开一个远程终端窗口,因为它们执行时间太长。必须等它执行完,期间不能关闭窗口或断开连接,否则任务会被杀死,一切都中途放弃。也许nohup命令可以达到这个目的,如果程序的stdout/stderr是一个终端,nohup默认将它重定向到nohup.out文件。值得注意的是,nohup命令只是让程序忽略SIGHUP信号,需要使用标记&将其置于后台。nohup[argument...]&nohup虽然好用,但还是比较“简单”。它可以处理简单的命令,但对于复杂的交互程序来说就麻烦了。使用tmux打开一个终端窗口,可以在窗口中执行一个长时间运行的交互式命令操作,使其一直在后台运行,按ctrl-b-d后可以无感知退出窗口,并且窗口退出后不出现将关闭,即窗口中执行的交互命令不会结束。这比传统的“nohupcommang&(thenctrl+c)”方法有用得多。如何在linux终端创建tmux窗口,直接在window终端执行命令?这需要tmuxsend-tsession_name"command"ENTER!!!示例1root@bobo:~#tmuxnew-d-skevin_session&&tmuxsend-tkevin_session'/usr/local/bin/main'ENTER&&tmuxattach-tkevin_session[detached(fromsessionkevin_session)]root@bobo:~#tmuxlskevin_session:1windows(createdTueOct219:38:362018)[135x34]上面的命令可以分为以下三个:root@bobo:~#tmuxnew-d-skevin_sessionroot@bobo:~#tmuxsend-tkevin_session'/usr/local/bin/main'ENTERroot@bobo:~#tmuxattach-tkevin_session说明:以上涉及三个命令。第一种意思:在后台创建一个窗口,命名为kevin_session第二种意思:在创建窗口的同时在终端中执行命令'/usr/local/bin/main',这里可以使用单引号或者双引号。第三种方法:进入刚刚创建的窗口kevin_session。例2创建一个窗口时,可以在窗口终端同时执行两条或多条命令。root@bobo:~#su-kevin-c"tmuxnew-d-shaha??&&tmuxsend-thaha??'ifconfig'ENTER&&tmuxsend-thaha??'hostname'ENTER"kevin_session:1windows(创建于2018年10月2日星期二19:38:36)[135x34]root@bobo:~#su-kevinkevin@bobo:~$tmuxlshaha:1个窗口(创建于2018年10月2日星期二19:48:12)[135x34]kevin@bobo:~$tmuxa-t哈哈这里举例:批量tmux远程关闭和批量打开shell脚本操作1)批量关闭/opt/ip.list中ip所在机器的二进制主进程文件(这个主进程是在tmux中执行的,已经交互执行过的那种)[root@shell002~]#vim/opt/script/6_main_stop.sh#!/bin/bashforiin$(cat/opt/ip.list)dossh-p22root@$i'ps-ef|grepmain|grep-vgrep|awk-F"""{print$2}"|xargskill-9>/dev/null2>&1'done2)批处理在/opt/ip/list文件中ip所在机器的tmux窗口打开二进制主进程(即先关闭tmux,然后创建一个tmux窗口,在里面执行主进程)【root@shell002~]#vim/opt/script/7_main_start.sh#!/bin/bashforiin$(cat/opt/ip.list)dossh-p22root@$i'ps-ef|greptmux|grep-vgrep|awk-F"""{print$2}"|xargskill-9>/dev/null2>&1'ssh-p22root@$i'tmuxnew-d-skevin_session&&tmuxsend-tkevin_session'/usr/local/bin/main'ENTER'做得好吗??动动你的双手观看并转发到朋友圈分享和支持吧!!来源:https://www.cnblogs.com/kevin...