tmux简介

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xiaoma_bk/article/details/102671705

1、tmux 简介

1.1 安装

  • sudo apt-get install tmux

1.2 简介

1.2.1 功能

  • tmux(terminal multiplexer)是Linux上的终端复用神器,可从一个屏幕上管理多个终端(准确说是伪终端)。使用该工具,用户可以连接或断开会话,而保持终端在后台运行。类似的工具还有screen,个人对这二者的使用感受是,用过tmux就再也不想用screen了。
  • tmux 是一个与 GNU screen 类似的程序,可作为后者的替代品使用。tmux 采用 BSD 许可授权。
  • split窗口。可以在一个terminal下打开多个终端,也可以对当前屏幕进行各种split,即可以 同时打开多个显示范围更小的终端。
  • 在使用SSH的环境下,避免网络不稳定,导致工作现场的丢失。想象以下场景, 你在执行一条命令的过程中,由于网络不稳定,SSH连接断开了。这个时候,你就不知道之前 的那条命令是否执行成功。如果此时你打开了很多文件,进入了较深层次的目录,由于网络 不稳定,SSH连接断开。重新连接以后,你又不得不重新打开那些文件,进入那个深层次的 目录。如果使用了tmux,重新连接以后,就可以直接回到原来的工作环境,不但提高了工作 效率,还降低了风险,增加了安全性。

1.2.2 会话、窗口、面板

  • tmux的结构包括会话(session)、窗口(window)、面板(pane)三部分,会话实质是伪终端的集合每个面板表示一个伪终端多个面板展现在一个屏幕上,这一屏幕就叫窗口。基本结构及状态信息如下图所示:
  • 基本的操作无非就是对会话、窗口、面板进行管理,包括创建、关闭、重命名、连接、分离、选择等等。
    一般使用命令和快捷键进行操作,可在系统shell终端和tmux命令模式(类似vim的命令模式)下使用命令,或者在tmux终端使用快捷键。

server服务器。输入tmux命令时就开启了一个服务器。
session会话。一个服务器可以包含多个会话
window窗口。一个会话可以包含多个窗口。
pane面板。一个窗口可以包含多个面板。

tmux主要包括以下几个模块:

session 会话:一个服务器可以包含多个会话
window 窗口:一个会话可以包含多个窗口
pane 面板:一个窗口可以包含多个面板[强悍的分频]

注意,将多个命令写在一起作为命令序列时,命令之间要用空格和分号分隔。

2、快捷键 & 速查表

启动新会话:

  • tmux [new -s 会话名 -你窗口名]

恢复会话:

  • tmux at [-t 会话名]

列出所有会话:

  • tmux ls

关闭会话:

  • tmux kill-session -t 会话名

关闭所有会话名:

  • tmux ls | grep : | cut -d . -f1 | awk ‘{print substr($1, 0, length($1)-1)}’ | xargs kill

2.1 在Tmux中,按下Tmux前缀 ctrl+b,然后:

2.1.1 会话

  • :new <回车> 启动新会话
  • s 列出所有会话
  • ¥ 重命名当前会话

2.1.2 窗口(标签页)

  • c 创建新窗口
  • w 列出所有窗口
  • n 后一个窗口
  • p 前一个窗口
  • f 查找窗口
  • , 重命名当前窗口
  • & 关闭当前窗口

2.1.3 调整窗口排序

  • swap-window -s 3 -t 1 交换3号和1号窗口
  • swap-window -t 1 交换当前和1号窗口
  • move-window -t 1 移动当前窗口到1号

2.1.4 窗格(分割窗口)

  • % 垂直分割
  • " 水平分割
  • o 交换窗格
  • x 关闭窗格
  • 空格 切换布局
  • q 显示每个窗格是第几个,当数字出现的时候按数字几就选中第几个窗格
  • { 与上个窗格交换位置
  • } 与下个窗格交换位置
  • z 切换窗格最大化/最小化

2.1.5 同步窗格

这么做可以切换到想要的窗口,输入 Tmux 前缀和一个冒号呼出命令提示行,然后输入:

  • :setw synchronize-panes

你可以指定开或关,否则重复执行命令会在两者间切换。 这个选项值针对某个窗口有效,不会影响别的会话和窗口。 完事儿之后再次执行命令来关闭。帮助

2.1.6 调整窗格尺寸

如果你不喜欢默认布局,可以重调窗格的尺寸。虽然这很容易实现,但一般不需要这么干。这几个命令用来调整窗格:

  • PREFIX : resize-pane -D 当前窗格向下扩大 1 格
  • PREFIX : resize-pane -U 当前窗格向上扩大 1 格
  • PREFIX : resize-pane -L 当前窗格向左扩大 1 格
  • PREFIX : resize-pane -R 当前窗格向右扩大 1 格
  • PREFIX : resize-pane -D 20 当前窗格向下扩大 20 格
  • PREFIX : resize-pane -t 2 -L 20 编号为 2 的窗格向左扩大 20 格

2.1.7 杂项:

  • d 退出 tmux(tmux 仍在后台运行)
  • t 窗口中央显示一个数字时钟
  • ? 列出所有快捷键
  • : 命令提示符

2.1.8 配置选项:

# 鼠标支持 - 设置为 on 来启用鼠标
* setw -g mode-mouse off
* set -g mouse-select-pane off
* set -g mouse-resize-pane off
* set -g mouse-select-window off

# 设置默认终端模式为 256color
set -g default-terminal "screen-256color"

# 启用活动警告
setw -g monitor-activity on
set -g visual-activity on

# 居中窗口列表
set -g status-justify centre

# 最大化/恢复窗格
unbind Up bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp
unbind Down
bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tm

3.案例

3.0 快捷键

  • ctrl+b 0/1/2/3 用来切换窗口
  • ctrl+b q 显示窗口号
  • ctrl+b 箭头上下左右 切换面板
  • ctrl+b z 放大缩小面板

3.1 启动

tmux has-session -t ros 2> /dev/null
if [ $? != 0 ];
then
    tmux new-session -n base -s ros -d #create ros session & app windows
    tmux new-window -n nav #create app algo windows
    tmux new-window -n slam #create app algo windows
    tmux new-window -n roscore #create app roscore windows

    # roscore 窗口
    tmux select-window -t roscore
    tmux send-keys "roscore" C-m
    sleep 3

    # base 窗口  0:机器人底盘   1:激光
    tmux select-window -t base
    tmux split-window -v -t 0
    tmux select-pane -t 0
    tmux send-keys "cd ~/robot_driver/" C-m
    tmux send-keys "source devel/setup.bash" C-m
    tmux send-keys "roslaunch base_driver base_driver.launch" C-m
    tmux select-pane -t 1
    tmux send-keys "cd ~/robot_driver/" C-m
    tmux send-keys "source devel/setup.bash" C-m
    tmux send-keys "roslaunch sick_tim sickTim.launch" C-m

    # nav 窗口  0:L1  1:commander  2:test.py  3:key
    tmux select-window -t nav
    tmux split-window -h -t 0     # 竖直分 0 1
    tmux split-window -v -t 0     # 0 水平分
    tmux split-window -v -t 1     # 1  水平分
    tmux select-pane -t 0
    tmux send-keys "cd ~/0catkin_ws/" C-m
    tmux send-keys "source devel/setup.bash" C-m
    tmux send-keys "roslaunch path_fitting L1.launch" C-m
    tmux select-pane -t 1
    tmux send-keys "cd ~/0catkin_ws/" C-m
    tmux send-keys "source devel/setup.bash" C-m
    tmux send-keys "roslaunch commander commander.launch"
    tmux select-pane -t 2
    tmux send-keys "cd ~/0catkin_ws/" C-m
    tmux send-keys "source devel/setup.bash" C-m
    tmux send-keys "python test.py nav test.json" C-m
    tmux select-pane -t 3
    tmux send-keys "cd ~/0catkin_ws/" C-m
    tmux send-keys "source devel/setup.bash" C-m
    tmux send-keys "rosrun teleop_twist_keyboard teleop_twist_keyboard.py" 

    # slam 窗口 0:启动地图  1:启动定位 2:关闭tmux
    tmux select-window -t slam
    tmux split-window -v -t 0
    tmux split-window -h -t 0     # 0 水平分
    tmux select-pane -t 0
    tmux send-keys "cd ~/localization_new/" C-m
    tmux send-keys "source devel/setup.bash" C-m
    tmux send-keys "rosrun map_server map_server map.yaml" C-m
    tmux select-pane -t 1
    tmux send-keys "cd ~/localization_new/" C-m
    tmux send-keys "source devel/setup.bash" C-m
    tmux send-keys "roslaunch hybrid_locator_ros test_pf.launch" C-m
    tmux select-pane -t 2
    tmux send-keys "sh stop.sh" 
else
    echo "Programme is already running"
fi

tmux attach -t ros

3.2 关闭

#!/bin/bash

killall roscore
tmux kill-session -t ros

猜你喜欢

转载自blog.csdn.net/xiaoma_bk/article/details/102671705