tmux

一种终端复用工具,是终端中的窗口管理器。另一种用途是在关闭父shell时保持程序运行(常用于ssh访问断开连接后保持运行)。windows上借助cygwin也可以使用。[1]

基本操作

  1. 创建一个session

    tmux new -s myname

  2. 连接到运行中的session

    tmux a -t myname          # -t 通过名称,可以是名称前缀,如my; a 可以写成全称 attach
    tmux a 4 # 通过数字id
  3. 销毁session

    tmux kill-session -t myname

  4. 列出session

    tmux ls

进入tmux后操作panel和window的操作有:先按prefix(默认的配置是CTRL + b),释放后再按下边的:

Panes

 %                          vertical split
" horizontal split
d detach from session (it keeps running in the background)
x kill pane
Up/Down/Left/Right move between panes
: + resize-pane -D Resizes the current pane down
: + resize-pane -U Resizes the current pane upward
: + resize-pane -L Resizes the current pane left
: + resize-pane -R Resizes the current pane right
: + resize-pane -D 20 Resizes the current pane down by 20 cells

Windows

按键 功能
c 创建create window
w 列出windows
n next window
p previous window
& kill window
, 重命名rename window

翻页及内容搜索

prefix+ PgUp/PgDn 上下翻页, 此时进入scrollback mode, 可以按ctrl-S 进行内容搜索, 搜索到的多个内容按n/N调转到下一个/上一个匹配项(这与vim用法相同) .而 Ctrl-S 是 emacs bindings. 如果将 tmux 设置成了 vim bindings, 进入 copy mode 再用 slash (/) 进行搜索.

状态栏设置

tmux 设置状态栏显示的信息,此处仅显示hostname,运行命令

tmux set -g status-right "#H"

或者在tmux配置文件(~/.tmux.conf)中写入set -g status-right "#H"

引号中还可以是自定义的文字,比如"-------"。

应用场景:一种场景是在Xshell等工具中当命令行中有内容变化时状态图标也会跟着变化,而当tmux的状态栏上时间每分钟发生一次变化时会导致Xshell的状态图标跟着发生变化,并且在用鼠标滚轮向上滚屏看历史输出时也会因为底部状态栏的变化导致视野跳到最后一行。

关闭状态栏:set -g status off

开启状态栏:set -g status on

更多tmux内容,参考

tmate

特性

  1. 远程终端共享(支持ssh和web上的命令行,且有只读模式)
  2. 基于tmux,多路终端复用
  3. 完全开源,支持自己搭建服务器,默认使用tmate.io的服务器

主页 https://tmate.io

如同ssh反向隧道。

简易用法:

tmate # 进入tmux,并创建隧道链接,底部显示链接地址,几秒后消失
tmate show-messages # 显示刚才建立的ssh地址与web地址

后台运行(daemon):

tmate -S /tmp/tmate.sock new-session -d               # Launch tmate in a detached state
tmate -S /tmp/tmate.sock wait tmate-ready # Blocks until the SSH connection is established
tmate -S /tmp/tmate.sock display -p '#{tmate_ssh}' # Prints the SSH connection string
tmate -S /tmp/tmate.sock display -p '#{tmate_ssh_ro}' # Prints the read-only SSH connection string
tmate -S /tmp/tmate.sock display -p '#{tmate_web}' # Prints the web connection string
tmate -S /tmp/tmate.sock display -p '#{tmate_web_ro}' # Prints the read-only web connection string

首先远程端和本地端安装ssh相关工具,使用ssh-keygen产生公钥和私钥(否则会提示Permission denied (publickey)之类的错误)。

screen

GNU Screen 也是一个终端多路复用器(窗口管理器)。GNU Screen 允许我们轻松创建多个 Screen 会话,在不同会话之间切换,在会话之间复制文本,随时连上或脱离会话等等。

由于tmux可能没有被系统预装,而screen可能被CentOS等系统预装,因此可以临时使用screen命令。在 Screen 中所有命令的默认前缀快捷方式是 Ctrl + a。

创建新的 Screen 会话

screen # 创建会话

screen -S name # 创建命名会话,id.name

列出屏幕会话

screen -ls # 列出所有Detached和Attached会话

连上 Screen 会话

如果你想连上会话,例如 29415.ostechnix,只需运行:

screen -r 29415.ostechnix	# 全名
screen -r 29415 # 或使用 Screen ID
screen -r ostechnix # 或使用后缀名

从 Screen 会话脱离

要从屏幕会话中脱离,按 Ctrl + ad。类似tmux的操作。

创建嵌套会话

操作类似tmux:

在会话中按 Ctrl + ac 创建另一个会话。只需重复此操作即可创建任意数量的嵌套 Screen 会话。每个会话都将分配一个号码。号码将从 0 开始。

键盘快捷键列表:

Ctrl + a " - 列出所有会话

Ctrl + a 0 - 切换到会话号 0

Ctrl + a n - 切换到下一个会话

Ctrl + a p - 切换到上一个会话

Ctrl + a S - 将当前区域水平分割为两个区域

Ctrl + a l - 将当前区域垂直分割为两个区域

Ctrl + a Q - 关闭除当前会话之外的所有会话

Ctrl + a X - 关闭当前会话

Ctrl + a \ - 终止所有会话并终止 Screen

Ctrl + a ? - 显示键绑定。要退出,请按回车

screen Attached 状态异常[2]

有时候由于正在运行screen的终端异常关闭时,这里列出的会话依然显示Attached。

screen -ls, 显示某会话的当前状态为Attached, 但当前并没有终端连接到这个会话,此时正常状态应该为Detached。此时用screen -r <session-id>,无法attach。原因是screen没有正常detach。

解决方法:screen -D -r <session-id>

-D -r 先踢掉前一用户,再登陆。


  1. http://wiki.fast.ai/index.php/Tmux ↩︎

  2. http://blog.csdn.net/gdali/article/details/72799581 ↩︎

最新文章

  1. Maven学习总结(五)——聚合与继承
  2. 对memcpy函数的改进
  3. 百度地图api的实现
  4. KMP算法解析
  5. BufferedReaderTest
  6. [js高手之路]html5 canvas动画教程 - 自己动手做一个类似windows的画图软件
  7. Java后缀数组-求sa数组
  8. jmeter接口测试实战-创建用户
  9. LinkedBlockingQueue 注记
  10. arrays.xml中使用integer-array引用drawable图片资源,代码中如何将这些图片资源赋值到ImageView控件中
  11. mysql列的处理
  12. ArrayMap代码分析
  13. 使用Coding体验小记
  14. JS+Ajax+Servlet:记录页面访问时间
  15. 安装crf++的python包
  16. hbase建表时 ERROR: java.io.IOException: Table Namespace Manager not ready yet, try again later
  17. 编写线程安全的Java缓存读写机制 (原创)
  18. Linux下用mail 命令给163邮箱发送邮件!
  19. 170721、springboot编程之注解(annotation)列表
  20. Java-悲观锁和乐观锁

热门文章

  1. libgdx学习记录23——图片移动选择
  2. python删除文件与目录的方法
  3. Paxos算法浅析
  4. Number.toString SyntaxError
  5. SpringBoot配置Aop笔记【例子】
  6. CentOS 6.8 安装vsftpd
  7. PAT甲题题解-1102. Invert a Binary Tree (25)-(建树,水题)
  8. Daily Scrumming* 2015.12.15(Day 7)
  9. YQCB冲刺第二周第六天
  10. [转]JAVA 在main中访问内部类、方法等