tmux(terminal multiplexer)是Linux上的终端复用神器。

1. 安装

(1)下载

下载及其依赖软件。

wget -c https://github.com/tmux/tmux/releases/download/3.0a/tmux-3.0a.tar.gz
wget -c https://github.com/libevent/libevent/releases/download/release-2.1.11-stable/libevent-2.1.11-stable.tar.gz
wget -c https://ftp.gnu.org/gnu/ncurses/ncurses-6.2.tar.gz

(2)安装

先安装依赖,再安装tmux。

#libevent
./configure --prefix=/my/path/tmux_depend --disable-shared
make && make install #ncurses
./configure --prefix=/my/path/tmux_depend
make && make install #tmux
./configure CFLAGS="-I/my/path/tmux_depend/include -I/my/path/tmux_depend/include/ncurses" LDFLAGS="-L/my/path/tmux_depend/lib -L/my/path/tmux_depend/include/ncurses -L/my/path/tmux_depend/include" #CPPFLAGS="-I/my/path/tmux_depend//include -I/my/path/tmux_depend//include/ncurses" LDFLAGS="-static -L/my/path/tmux_depend//include -L/my/path/tmux_depend//include/ncurses -L/my/path/tmux_depend//lib" make
cp tmux /my/path/tmux_depend/bin

(3)设置环境

设置环境变量。

#bashrc
export PATH=/my/path/tmux_depend/bin:$PATH
source ~/.bashrc

2. 常用命令使用

tmux的结构包括会话(session)、窗口(window)、窗格(pane)三部分,会话实质是伪终端的集合,每个窗格表示一个伪终端,多个窗格展现在一个屏幕上,这一屏幕就叫窗口。

以下是摘自一篇博文tmux基本操作,写得很好,但如果没有一点点基础,会忽略很多地方。避免走坑,重点解释下。

tmux基本的操作无非就是对会话、窗口、窗格进行管理,包括创建、关闭、重命名、连接、分离、选择等等。

一般使用命令和快捷键进行操作,可在系统shell终端和tmux命令模式(类似vim的命令模式,窗口下有文字)下使用命令,或者在tmux终端使用快捷键。

tmux默认的快捷键前缀是Ctrl+b(下文用prefix指代),按下前缀组合键后松开(注意松开组合键后再按!),再按下命令键进行快捷操作,比如分离会话(是prefix d而不是prefix+d,因为d键不能与Ctrl+b同时按下!)。所以下面prefix等于ctrl+b/a

快捷键可以自定义,比如将前缀改为Ctrl+a顺手一些(如果按ctrl b键无效,检查下~/.tmux.conf配置文件中是否替换或者屏蔽掉了,可试下ctrl a)。如果需要保留shell命令的Ctrl+a快捷键(即跳转到行首),按如下所示修改~/.tmux.conf文件:

1 set-option -g prefix C-a
2 unbind-key C-b
3 bind-key C-a send-prefix
4 bind-key R source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded."

现在已将shell的Ctrl+a用prefix Ctrl+a取代,即需要按两次Ctrl+a生效(跳到行首)。

第4行的作用是使用prefix r重新加载配置文件,并输出提示。否则需要关闭会话后配置文件才能生效,也可手动加载配置文件,在tmux终端输入"prefix :"进入命令模式(注意有冒号),用source-file命令加载配置文件

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

(1) 会话命令

  • tmux new  创建默认名称的会话
  • tmux new -s mysession  创建名为mysession的会话
  • tmux ls  显示会话列表
  • tmux a  连接上一个会话
  • tmux a -t mysession  连接指定会话
  • tmux rename -t s1 s2  重命名会话s1为s2
  • tmux kill-session  关闭上次打开的会话
  • tmux kill-session -t s1  关闭会话s1
  • tmux kill-session -a -t s1  关闭除s1外的所有会话
  • tmux kill-server  关闭所有会话
  • tmux list-key  列出所有绑定的键,等同于prefix ?
  • tmux list-command  列出所有命令

常用快捷键:prefix后按

  • s  列出会话,可进行切换
  • $  重命名会话
  • d  分离当前会话
  • D  分离指定会话

(2)窗口命令

常用快捷键:prefix后按

  • c  创建一个新窗口
  • ,  重命名当前窗口
  • w  列出所有窗口,可进行切换
  • n  进入下一个窗口
  • p  进入上一个窗口
  • l  进入之前操作的窗口
  • 0~9  选择编号0~9对应的窗口
  • .  修改当前窗口索引编号
  • '  切换至指定编号(可大于9)的窗口
  • f  根据显示的内容搜索窗格
  • &  关闭当前窗口

(3)窗格命令

常用快捷键:prefix后按

  • %  水平方向创建窗格
  • "  垂直方向创建窗格
  • Up|Down|Left|Right  根据箭头方向切换窗格
  • q  显示窗格编号
  • o  顺时针切换窗格
  • }  与下一个窗格交换位置
  • {  与上一个窗格交换位置
  • x  关闭当前窗格
  • space(空格键)  重新排列当前窗口下的所有窗格
  • !  将当前窗格置于新窗口
  • Ctrl+o  逆时针旋转当前窗口的窗格
  • t  在当前窗格显示时间
  • z  放大当前窗格(再次按下将还原)
  • i  显示当前窗格信息

启动与关闭服务器

tmux # 启动
tmux kill-server # 关闭

进入和退出会话

tmux attach
prefix d # 或者 prefix C-z

3. 快捷键配置

关于~/.tmux.conf文件的配置,有一个教程介绍可以参考:

[ Tmux常用快捷键以及我会常到的一些问题汇总

](https://www.cnblogs.com/piperck/p/4992159.html)

或者:

[tmux的使用方法和个性化配置

](https://www.cnblogs.com/chjbbs/p/5689011.html)

tmux使用及个性化配置

但是网上的教程里的配置大部分都太老了,很多识别不了。所以不能照搬来用,最好是自己用prefix ?查看。比如用鼠标来控制不同窗口和窗格大小(拖动),在2.0版本及其以下通过如下设置来控制(网上的绝大多数教程,没用):

setw -g mouse-resize-pane on  #(或者set)
setw -g mouse-select-pane on
setw -g mouse-select-window on
setw -g mode-mouse on

Tmux2.0 版本以上使用set -g mouse on即可。更多设置鼠标来回滚动窗口参考:

# Enable mouse mode (tmux 2.1 and above)
set -g mouse on #Enable oh my zsh in tmux
set -g default-command /bin/zsh # Mouse based copy
bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
bind-key -T copy-mode MouseDragEnd1Pane send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"

4. 问题

分割窗口虽然很方便,但是用鼠标复制一个窗口的文本到另一个窗口时,复制很不方便,因为多个窗口的同一行仍视为一行,所以比较难复制。比如我要复制一个较长的路径时(双击也复制不了),比较困难,而且切换粘贴时也比较麻烦:

网上有一些解决方法,比如:选择窗格后,prefix z,复制,prefix z,切换窗格,粘贴。确实时比较麻烦。后续看看快捷键能不能解决掉,不然这个功能缺陷会直接让我考虑要不要用它了。

通过配置鼠标解决了不同窗口单行复制问题,但显示器范围显示的单行还是视为一行(超出范围视为另一行,仍复制不了)。鼠标选择复制的问题很难解决,但这个需求太重要了,我经常要复制粘贴长串的路径,这也是为何我要用多个终端的原因,如果这一点不能很好地解决,我宁愿不用了!

所以,目前我用的配置是:如果想要和正常终端一样使用,即鼠标复制(双左击)粘贴(右击)操作,但也只能屏幕单行复制粘贴,将配置设为2.0版本以下模式;如果想要用鼠标自由拖动窗格大小、滚动窗格、鼠标随意选择窗格等操作,就设为2.0版本以上模式,即set -g mouse on,但不能复制选择和粘贴。


最终方案:

要想一次复制长长的路径(鼠标),不再纠结用切割窗口的方法,多新建一个window,然后prefix n/p来回切换复制粘贴。所以,如果需要在不同路径来回配合操作,可用切换window的方法;如果在同一路径,则切割window(如在一个pane编写代码,一个pane调试,或者top查看资源)。当然了,也可新建多个session,然后在不同session之间切换(prefix s)来复制,但是会多一步,即切换时要选择session,或者用prefix w查看所有的session和window,再选择切换。

Ref:

安装参考:https://www.jianshu.com/p/f7f24b4b2625

使用参考:https://www.cnblogs.com/liuguanglin/p/9290345.html

【Linux】tmux安装(非root)及其使用的更多相关文章

  1. linux下使用非root账号安装zabbix-client

    linux下使用非root账号安装zabbix-client使用非root账号rusky登录:[rusky@testServer]#tar zxvf zabbix-2.4.5.tar.gz #cd z ...

  2. linux下用非root用户重启导致ssh无法连接的问题

    问题描述 安装好了centOS服务器,一直用Secure CRT工具通过ssh服务来远程连接linux,很方便的进行各种操作.今天偶然尝试了一下在非root的一般用户下执行重启服务器的命令,发现一般用 ...

  3. 源代码安装-非ROOT用户安装软件的方法

    0.    前言 如果你没有sudo权限,则很多程序是无法使用别人编译好的文件安装的. 还有时候,没有对应你的主机配置的安装包,这时候需要我们自己下载最原始的源代码,然后进行编译安装. 这样安装的程序 ...

  4. linux新安装后root密码设置

    linux在安装过程中未设置root密码 导致在使用中无法su 解决方法是设置root密码: 输入: sudo passwd root [sudo] password for you: ---> ...

  5. Linux暂时提升非root用户的权限

    sudo 用于提升非root用户的某些命令执行权限 1,使用root用户,复制vim /etc/sudoers 文件的第91行修改为,想提升的用户名称 root ALL=(ALL) ALL admin ...

  6. linux指定某非root用户执行开机启动项的方法(gogs git)

    以linux指定git用户在linux开机时执行启动gogs git为例: 以root登录linux 执行vi /etc/rc.d/rc.local 在文档末尾添加一行语句:su git -c &qu ...

  7. Linux下非root用户运行Tomcat

    PS:Linux下使用非root用户运行tomcat的原因 由于项目需求,也由于root用户启动tomcat有一个严重的问题,那就是tomcat具有root权限. 这意味着你的任何一个页面脚本(htm ...

  8. linux centos7安装mysql8

    一.RPM版安装 查看是否有其他版本的数据库,若有,删除干净 非root用户必须要有sudo权限 1.下载mysql相关安装包 https://mirrors.tuna.tsinghua.edu.cn ...

  9. linux非root用户下安装软件,搭建生产环境

    之前的用实验室的服务器,因为某些原因,使用的用户没有root权限.linux的非root用户很多软件无法安装,非常的不方便.我的方法是使用brew来代替系统的包管理工具.brew是最先用在mac上的包 ...

  10. Linux下非root用户如何安装软件

    Linux下非root用户如何安装软件 从windows转移到Linux的用户最开始总会有各种不适,因为这种不适最终放弃linux的不在少数.对于这类人只能说可惜,还没有领略到linux的美好就过早放 ...

随机推荐

  1. 占位符,SQL注入?

    这两天在上课时被同学拿了一段代码问我,这段代码有什么问题,我看了一会说:Connection和PreparedStatement都没关.他说不止这方面的问题,还有sql注入的问题,我就坚决的说使用了占 ...

  2. Kotlin/Native 用KMM写Flutter插件

    一.用KMM写Flutter插件 Google官方有一个写Flutter例子How to write a Flutter plugin,这里把Google plugin_codelab 例子改成用KM ...

  3. UVA-1498 Activation

    UVA-1498 DP应该是肯定的,设 f [ i ] [ j ] 表示现在对中共有 i 人,Tomato在第 j 个,出现所求情况的概率,我们可以很(简单的)艰难的列出下列方程: f[i][1] = ...

  4. STM32的I2C框图详解及通讯过程

    STM32 的I2C 特性及架构 如果我们直接控制STM32 的两个GPIO 引脚,分别用作SCL 及SDA,按照上述信号的时序要求,直接像控制LED 灯那样控制引脚的输出(若是接收数据时则读取SDA ...

  5. AXI总线简介、ID分析、DMA、Vivado烧录、系统集成

    转载:https://blog.csdn.net/CrazyUncle/article/details/89918030?depth_1-utm_source=distribute.pc_releva ...

  6. 二叉树中和为某一值的路径 牛客网 程序员面试金典 C++ Python

    二叉树中和为某一值的路径 牛客网 程序员面试金典 题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一 ...

  7. hdu 3047 Zjnu Stadium(并查集)

    题意: 300个座位构成一个圈. 有N个人要入座. 共有M个说明 :A B X ,代表B坐在A顺时针方向第X个座位上.如果这个说明和之前的起冲突,则它是无效的. 问总共有多少个无效的. 思路: 并查集 ...

  8. python 处理xml 数据

    1 import xml.sax 2 import xml.sax.handler 3 4 # python 处理xml 数据 类,将xml数据转化为字典 5 ''' 6 原数据:<?xml v ...

  9. cesium制作自己的骑行轨迹

    制作自己的骑行轨迹 马上国庆节了,计划骑车回家,突然想到把所有的骑行线路汇总一下,无奈码表和APP不支持这样的操作,出于职业病,在此操作一下. 我用的是黑鸟码表,可以导出fit运动轨迹,但是fit还需 ...

  10. dart系列之:dart语言中的内置类型

    目录 简介 Null 数字 字符串 布尔值 列表 set和map 简介 和所有的编程语言一样,dart有他内置的语言类型,这些内置类型都继承自Object,当然这些内置类型是dart语言的基础,只有掌 ...