我们已经了解到如何通过 GNU Screen 进行多会话管理。今天，我们将要领略另一个著名的管理会话的命令行实用工具 Tmux。类似 GNU Screen，Tmux 是一个帮助我们在单一终端窗口中创建多个会话，同一时间内同时运行多个应用程序或进程的终端复用工具。Tmux 自由、开源并且跨平台，支持 Linux、OpenBSD、FreeBSD、NetBSD 以及 Mac OS X。本文将讨论 Tmux 在 Linux 系统下的高频用法。Linux 下安装 tmuxTmux 可以在绝大多数的 Linux 官方仓库下获取。在 Arch Linux 或它的变种系统下，执行下列命令来安装：$ sudo pacman -S tmux Debian、Ubuntu 或 Linux Mint：$ sudo apt-get install tmux Fedora：$ sudo dnf install tmux RHEL 和 CentOS：$ sudo yum install tmux SUSE/openSUSE：$ sudo zypper install tmux 以上，我们已经完成 Tmux 的安装。之后我们继续看看一些 Tmux 示例。Tmux 命令示例: 多会话管理Tmux 默认所有命令的前置命令都是 Ctrl+b，使用前牢记这个快捷键即可。注意：Screen 的前置命令都是 Ctrl+a.创建 Tmux 会话在终端中运行如下命令创建 Tmux 会话并附着进入：tmux 抑或，tmux new 一旦进入 Tmux 会话，你将看到一个 沉在底部的绿色的边栏，如下图所示。创建 Tmux 会话这个绿色的边栏能很容易提示你当前是否身处 Tmux 会话当中。退出 Tmux 会话退出当前 Tmux 会话仅需要使用 Ctrl+b 和 d。无需同时触发这两个快捷键，依次按下 Ctrl+b 和 d 即可。退出当前会话后，你将能看到如下输出：[detached (from session 0)] 创建有名会话如果使用多个会话，你很可能会混淆运行在多个会话中的应用程序。这种情况下，我们需要会话并赋予名称。譬如需要 web 相关服务的会话，就创建一个名称为 “webserver”（或任意一个其他名称） 的 Tmux 会话。tmux new -s webserver 这里是新的 Tmux 有名会话：拥有自定义名称的 Tmux 会话如你所见上述截图，这个 Tmux 会话的名称已经被标注为 “webserver”。如此，你可以在多个会话中，轻易的区分应用程序的所在。退出会话，轻按 Ctrl+b 和 d。查看 Tmux 会话清单查看 Tmux 会话清单，执行：tmux ls 示例输出：列出 Tmux 会话如你所见，我们开启了两个 Tmux 会话。创建非附着会话有时候，你可能想要简单创建会话，但是并不想自动切入该会话。创建一个非附着会话，并赋予名称 “ostechnix”，运行：tmux new -s ostechnix -d 上述命令将会创建一个名为 “ostechnix” 的会话，但是并不会附着进入。你可以通过使用 tmux ls 命令验证：创建非附着会话附着进入 Tmux 会话通过如下命令，你可以附着进入最后一个被创建的会话：tmux attach 抑或，tmux a 如果你想附着进入任意一个指定的有名会话，譬如 “ostechnix”，运行：tmux attach -t ostechnix 或者，简写为：tmux a -t ostechnix 关闭 Tmux 会话当你完成或者不再需要 Tmux 会话，你可以通过如下命令关闭：tmux kill-session -t ostechnix 当身处该会话时，使用 Ctrl+b 以及 x。点击 y 来关闭会话。可以通过 tmux ls 命令验证。关闭所有 Tmux 服务下的所有会话，运行：tmux kill-server 谨慎！这将终止所有 Tmux 会话，并不会产生任何警告，即便会话存在运行中的任务。如果不存在活跃的 Tmux 会话，将看到如下输出：$ tmux ls no server running on /tmp/tmux-1000/default 切割 Tmux 窗口切割窗口成多个小窗口，在 Tmux 中，这个叫做 “Tmux 窗格”。每个窗格中可以同时运行不同的程序，并同时与所有的窗格进行交互。每个窗格可以在不影响其他窗格的前提下可以调整大小、移动位置和控制关闭。我们可以以水平、垂直或者二者混合的方式切割屏幕。水平切割窗格欲水平切割窗格，使用 Ctrl+b 和 "（半个双引号）。水平切割 Tmux 窗格可以使用组合键进一步切割面板。垂直切割窗格垂直切割面板，使用 Ctrl+b 和 %。垂直切割 Tmux 窗格水平、垂直混合切割窗格我们也可以同时采用水平和垂直的方案切割窗格。看看如下截图：切割 Tmux 窗格首先，我通过 Ctrl+b " 水平切割，之后通过 Ctrl+b % 垂直切割下方的窗格。如你所见，每个窗格下我运行了不同的程序。切换窗格通过 Ctrl+b 和方向键（上下左右）切换窗格。发送命令给所有窗格之前的案例中，我们在每个窗格中运行了三个不同命令。其实，也可以发送相同的命令给所有窗格。为此，使用 Ctrl+b 然后键入如下命令，之后按下回车：:setw synchronize-panes 现在在任意窗格中键入任何命令。你将看到相同命令影响了所有窗格。交换窗格使用 Ctrl+b 和 o 交换窗格。展示窗格号使用 Ctrl+b 和 q 展示窗格号。终止窗格要关闭窗格，直接键入 exit 并且按下回车键。或者，按下 Ctrl+b 和 x。你会看到确认信息。按下 y 关闭窗格。关闭窗格放大和缩小 Tmux 窗格我们可以将 Tmux 窗格放大到当前终端窗口的全尺寸，以获得更好的文本可视性，并查看更多的内容。当你需要更多的空间或专注于某个特定的任务时，这很有用。在完成该任务后，你可以将 Tmux 窗格缩小（取消放大）到其正常位置。更多详情请看以下链接。如何缩放 Tmux 窗格以提高文本可见度？自动启动 Tmux 会话当通过 SSH 与远程系统工作时，在 Tmux 会话中运行一个长期运行的进程总是一个好的做法。因为，它可以防止你在网络连接突然中断时失去对运行进程的控制。避免这个问题的一个方法是自动启动 Tmux 会话。更多详情，请参考以下链接。通过 SSH 登录远程系统时自动启动 Tmux 会话总结这个阶段下，你已经获得了基本的 Tmux 技能来进行多会话管理，更多细节，参阅 man 页面。$ man tmux GNU Screen 和 Tmux 工具都能透过 SSH 很好的管理远程服务器。学习 Screen 和 Tmux 命令，像个行家一样，彻底通过这些工具管理远程服务器。via: https://www.ostechnix.com/tmux-command-examples-to-manage-multiple-terminal-sessions/作者：sk 选题：lujun9972 译者：chensanle 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
本文介绍了 Linux 提供的拆分终端的方法，它能够帮助你完成多任务工作。那么，你最喜欢哪一款终端复用工具呢？没有什么问题是不能用一个 Linux 终端解决的，如果不行，那就用两个。很早以前，终端其实是一个物理设备，而现在的终端实际上是在计算机上被模拟出来的一个应用程序。当你使用终端和计算机进行交互的时候，就会发现，只打开一个终端是不够用的。在进行编译、数据处理等长时间任务的时候，你不得不打开一个新终端或新 选项卡 tab 来同时进行其它工作。如果你是系统管理员，你就需要更多的终端窗口，以便连接到多个不同的主机上并行工作了。在 Linux 系统中，终端应用程序在很久之前就已经开始带有选项卡功能了。而现在的终端应用程序里，选项卡已经是标配功能了，这是非常流行的趋势。尽管如此，工作的时候在多个选项卡之间来回切换，或多或少也会分散我们的注意力，甚至带来不便。而最好的解决方案就是将整个屏幕划分为多个部分，这样多个终端就可以在同一个终端应用程序窗口中同时存在。Linux 发行版中也有很多相关的工具可以实现这一功能。Shell、终端和控制台在此之前，我们首先要明确 Shell、 终端 terminal 、 控制台 console 这三个概念。想要详细了解的话，请参阅 Enable Sysadmin 博客上的相关文章。简而言之：Shell 是带有 命令提示符 prompt 的用于输入、输出的界面。准确地说，POSIX 桌面底层也运行着一个 Shell，即使这个 Shell 对用户不可见，因为用户会话就是由这个 Shell 启动的。终端是在图形界面服务器（例如 X11 或 Wayland）中运行的应用程序，其中加载了一个 Shell。只有在终端窗口启动之后，才算是运行了一个终端。终端可以认为是操作 Shell 的一个入口。控制台（或称“虚拟控制台”）通常表示在桌面环境以外使用的 Shell，你可以通过 Alt+Ctrl+F2 进入控制台，通常情况下从 F3 到 F7 都是不同的控制台，其中桌面环境有可能是 F1 或者 F7，这在不同的发行版中可能会有所不同。因此，有些应用程序提供的功能是拆分 Shell 或者控制台，有些应用程序的功能则是拆分终端。tmuxtmux 可以说是最灵活、最强大的屏幕拆分工具了，它通过键盘控制对多个终端的复用，因此你可以将一个控制台叠放在另一个控制台上面，并在两个控制台之间切换。你还可以将整个屏幕等分为多个控制台，以便同时观察不同控制台上的状况。tmux 的所有操作都是通过键盘完成的，这就意味着你的手不需要离开键盘去寻找鼠标。为此，你需要记住一些按键组合。如果你只用 tmux 来做屏幕拆分，那你只需要记住一下这些命令：Ctrl-B % 竖直拆分屏幕（两个 Shell 分别位于左右）Ctrl-B " 水平拆分屏幕（两个 Shell 分别位于上下）Ctrl-B O 切换到另一个 ShellCtrl-B ? 查看帮助Ctrl-B d 断开 tmux 并让其在后台运行（可以使用 tmux attach 重新进入）tmux 的一大好处是，在一台计算机上启动 tmux 会话之后，也可以从另一台计算机上进入到这个会话，由此可以看出，tmux 对 Shell 进行了 守护进程化 daemonize 。例如，当我在树莓派上运行 tmux，我就可以从计算机上连接到树莓派并登录 IRC，当我断开连接时，树莓派上的 tmux 会继续运行，并等待我的下一次连接，在此期间 IRC 是处于持续登录状态的。GNU ScreenGNU Screen 也是一个 Shell 复用工具，类似于 tmux，你可以在断开一个活动会话后重连到其中，它也支持竖直或水平拆分屏幕。screen 的灵活性比 tmux 要弱一些。它默认的绑定按键组合是 Ctrl-A，和 Bash 中光标移动到行首的快捷键是一样的。因此，当你正在运行 screen 的时候，如果想要将光标移动到行首，就需要多按一次 Ctrl-A。而我自己的做法是，在 $HOME/.screenrc 文件中将绑定按键组合重新设置为 Ctrl-J。escape ^jJ尽管 screen 在屏幕拆分功能上做得很好，但 tmux 上的一些缺点在 Screen 上也同样存在。例如在拆分 Shell 时，在一个新的面板中不会启动新的 Shell ，而是需要使用 Ctrl-A Tab 导航到另一个面板（如果你按照我的方式重新设置了按键组合，需要对应地把 Ctrl-A 改为 Ctrl-J），然后通过 Ctrl-A C 手动创建一个新的 Shell。和 tmux 不同的是，screen 在退出一个 Shell 的时候，屏幕拆分状态不会改变，这样的设计在某些情况下是比较适合的，但麻烦之处在于需要手动管理屏幕拆分状态。尽管如此，screen 还是一个相当可靠灵活的应用程序，在无法使用 tmux 的时候，你可以选择 screen 作为备选方案。在默认按键方案下，screen 常用的基本命令包括：Ctrl-A | 竖直拆分屏幕（两个 Shell 分别位于左右）Ctrl-A S 水平拆分屏幕（两个 Shell 分别位于上下）Ctrl-A Tab 切换到另一个 ShellCtrl-A ? 查看帮助Ctrl-A d 断开 screen 并让其在后台运行（可以使用 screen -r 重新进入）KonsoleKonsole 是 KDE Plasma 桌面使用的终端应用程序。和 KDE 一样，Konsole 也以高度可定制、功能强大的特点而著称。和 tmux、GNU Screen 类似，Konsole 也具有拆分屏幕的功能。由于 Konsole 是图形界面的终端，因此还可以用鼠标来控制它的屏幕拆分。Konsole 的屏幕拆分功能在“ 查看 View ”菜单中。它也支持竖直和水平方向的拆分，只要点击鼠标就可以切换到另一个面板上。每个面板都是一个独立的终端，因此都可以拥有独立的主题和标签页。Konsole 和 tmux、GNU Screen 最大的不同之处在于不能断开和重新连接 Konsole。除非使用远程桌面软件，否则只能在打开 Konsole 时使用，这一点和大多数图形界面应用程序是一样的。Emacs严格来说，Emacs 并不算是一个终端复用工具，但它的使用界面支持拆分和调整大小，同时还带有一个内建的终端。如果 Emacs 是你日常使用的文本编辑器，你就可以在不关闭编辑器的情况下，在不同的应用程序之间轻松互相切换。由于 Emacs eshell 模块是通过 eLISP 实现的，因此你可以在 Emacs 中使用相同的命令进行交互，让一些繁琐的操作变得更为简单。如果你是在图形界面中使用 Emacs，还可以使用鼠标进行操作。例如通过点击切换面板、用鼠标调整拆分屏幕的的大小等等。尽管如此，键盘的操作速度还是更快，因此记住一些键盘快捷键还是很有必要的。Emacs 的一些重要快捷键包括：Ctrl-X 3 竖直拆分屏幕（两个 Shell 分别位于左右）Ctrl-X 2 水平拆分屏幕（两个 Shell 分别位于上下）Ctrl-X O （大写字母 O）切换到另一个 Shell（你也可以使用鼠标操作）Ctrl-X 0 （数字 0）关闭当前面板如果你运行了 emacs-client 的话，就可以像 tmux 和 GNU Screen 一样断开和重新连接到 Emacs 了。窗口管理器除了文本编辑器之外，一些 Linux 桌面也同样具有拆分屏幕、加载终端这样的功能。例如 Ratpoison、Herbsluftwm、i3、Awesome，甚至是启用了特定设置的 KDE Plasma 桌面，都可以将多个应用程序在桌面上分块显示。这些桌面可以让各个应用程序占据屏幕的固定位置，而不是浮在你的桌面“之上”，因此你可以在多个应用程序窗口之间轻松切换。你还可以打开多个终端，排布成网格，就像终端复用工具一样。更进一步，你还可以在你的桌面复用工具中加载一个终端复用工具。而且，没有什么可以阻止你在里面载入 Emacs 并分割缓冲区。没有人知道，如果你把它更进一步，会发生什么，大多数 Linux 用户不会外传这种秘密。和 tmux、GNU Screen 不同，你在断开与桌面的连接后无法重新连接到同一个桌面会话，除非你使用了远程桌面软件进行连接。更多选择除了上面介绍到的工具以外，还有诸如 Tilix、Terminator 这样的终端模拟器，它们同样可以实现屏幕拆分、嵌入终端组件等功能。欢迎在评论区分享你喜欢的终端拆分工具。via: https://opensource.com/article/20/5/split-terminal作者：Seth Kenlon 选题：lujun9972 译者：HankChow 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
一个使用 tmux 的 kubectl 插件可以使 Kubernetes 疑难问题变得更简单。Kubernetes 是一个活跃的开源容器管理平台，它提供了可扩展性、高可用性、健壮性和富有弹性的应用程序管理。它的众多特性之一是支持通过其主要的二进制客户端 kubectl 运行定制脚本或可执行程序，kubectl 很强大的，允许用户在 Kubernetes 集群上用它直接做很多事情。使用别名进行 Kubernetes 的故障排查使用 Kubernetes 进行容器编排的人都知道由于设计上原因带来了其功能的复杂性。举例说，迫切需要以更快的速度并且几乎不需要手动干预的方式来简化 Kubernetes 中的故障排除（除过特殊情况）。在故障排查功能方面，有很多场景需要考虑。在一种场景下，你知道你需要运行什么，但是这个命令的语法（即使作为一个单独的命令运行）过于复杂，或需要一、两次交互才能起作用。例如，如果你需要经常进入一个系统命名空间中运行的容器，你可能发现自己在重复地键入：kubectl --namespace=kube-system exec -i -t <your-pod-name>为了简化故障排查，你可以用这些指令的命令行别名。比如，你可以增加下面命令到你的隐藏配置文件（.bashrc 或 .zshrc）：alias ksysex='kubectl --namespace=kube-system exec -i -t'这是来自于 Kubernetes 常见别名存储库的一个例子，它展示了一种简化 kubectl 中的功能的方法。像这种场景下的简单情形，使用别名很有用。切换到 kubectl 插件更复杂的故障排查场景是需要一个一个的执行很多命令，调查环境，最后得出结论。仅仅用别名方法是不能解决这种情况的；你需要知道你所部署的 Kubernetes 之间逻辑和相关性，你真正需要的是自动化，以在更短的时间内输出你想要的。考虑到你的集群有 10 ~ 20 或 50 ~ 100 个命名空间来提供不同的微服务。一般在进行故障排查时，什么对你有帮助？你需要能够快速分辨出抛出错误的是哪个 命名空间的哪个 Pod 的东西。你需要一些可监视一个命名空间的所有 Pod 日志的东西。你可能也需要监视特定命名空间的出现错误的某个 Pod 的日志。涵盖这些要点的解决方案对于定位生产环境的问题有很大的帮助，以及在开发和测试环节中也很有用。你可以用 kubectl 插件创建比简单的别名更强大的功能。插件类似于其它用任何语言编写的独立脚本，但被设计为可以扩充 Kubernetes 管理员的主要命令。创建一个插件，你必须用 kubectl-<your-plugin-name> 的正确的语法来拷贝这个脚本到 $PATH 中的导出目录之一，并需要为其赋予可执行权限（chmod +x）。创建插件之后将其移动到路径中，你可以立即运行它。例如，我的路径下有一个 kubectl-krawl 和 kubectl-kmux：$ kubectl plugin list The following compatible plugins are available: /usr/local/bin/kubectl-krawl /usr/local/bin/kubectl-kmux $ kubectl kmux现在让我们见识下带有 tmux 的 Kubernetes 的有多强大。驾驭强大的 tmuxTmux 是一个非常强大的工具，许多管理员和运维团队都依赖它来解决与易操作性相关的问题：通过将窗口分成多个窗格以便在多台计算机上运行并行的调试来监视日志。它的主要的优点是可在命令行或自动化脚本中使用。我创建一个 kubectl 插件，使用 tmux 使故障排查更加简单。我将通过注释来解析插件背后的逻辑（插件的完整代码留待给你实现）：# NAMESPACE 是要监控的名字空间 # POD 是 Pod 名称 # Containers 是容器名称 # 初始化一个计数器 n 以计算循环计数的数量， # 之后 tmux 使用它来拆分窗格。 n=0; # 在 Pod 和容器列表上开始循环 while IFS=' ' read -r POD CONTAINERS do # tmux 为每个 Pod 创建一个新窗口 tmux neww $COMMAND -n $POD 2>/dev/null # 对运行中的 Pod 中 的所有容器启动循环 for CONTAINER in ${CONTAINERS//,/ } do if [ x$POD = x -o x$CONTAINER = x ]; then # 如果任何值为 null，则退出。 warn "Looks like there is a problem getting pods data." break fi # 设置要执行的命令 COMMAND=”kubectl logs -f $POD -c $CONTAINER -n $NAMESPACE” # 检查 tmux 会话 if tmux has-session -t <会话名> 2>/dev/null; then <设置会话退出> else <创建会话> fi # 在当前窗口为每个容器切分窗格 tmux selectp -t $n \; \ splitw $COMMAND \; \ select-layout tiled \; # 终止容器循环 done # 用 Pod 名称重命名窗口以识别 tmux renamew $POD 2>/dev/null # 增加计数器 ((n+=1)) # 终止 Pod 循环 done<<(<从 kubernetes 集群获取 Pod 和容器的列表>) # 最后选择窗口并附加会话 tmux selectw -t <会话名>:1 \; \ attach-session -t <会话名>\;运行插件脚本后，将产生类似于下图的输出。每个 Pod 有一个自己的窗口，每个容器（如果有多个）被分割到其窗口中 Pod 窗格中，并在日志到达时输出。Tmux 之美如下可见；通过正确的配置，你甚至会看到哪个窗口正处于激活运行状态（可看到标签是白色的）。总结别名是在 Kubernetes 环境下常见的也有用的简易故障排查方法。当环境变得复杂，用高级脚本生成的kubectl 插件是一个更强大的方法。至于用哪个编程语言来编写 kubectl 插件是没有限制。唯一的要求是该名字在路径中是可执行的，并且不能与已知的 kubectl 命令重复。要阅读完整的插件源码，或试试我创建的插件，请查看我的 kube-plugins-github 存储库。欢迎提交提案和补丁。via: https://opensource.com/article/20/2/kubernetes-tmux-kubectl作者：Abhishek Tamrakar 选题：lujun9972 译者：guevaraya 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
使用 tmux 可以做很多事情，尤其是在将 tmuxinator 添加到其中时。在我们的二十篇系列文章的第十五期中查看它们，以在 2020 年实现开源生产力的提高。去年，我在 19 天里给你介绍了 19 个新（对你而言）的生产力工具。今年，我换了一种方式：使用你在使用或者还没使用的工具，构建一个使你可以在新一年更加高效的环境。使用 tmux 和 tmuxinator 全部放到主控台上到目前为止，在本系列文章中，我已经撰写了有关单个应用程序和工具的文章。从今天开始，我将把它们放在一起进行全面设置以简化操作。让我们从命令行开始。为什么使用命令行？简而言之，在命令行上工作可以使我能够从运行 SSH 的任何位置访问许多这些工具和功能。我可以 SSH 进入我的一台个人计算机，并在工作计算机上运行与我的个人计算机上所使用的相同设置。我要使用的主要工具是 tmux。大多数人都只使用了 tmux 非常基础的功能，比如说在远程服务器上打开 tmux，然后启动进程，也许还会打开第二个会话以查看日志文件或调试信息，然后断开连接并在稍后返回。但是其实你可以使用 tmux 做很多工作。首先，如果你有一个已有的 tmux 配置文件，请对其进行备份。tmux 的配置文件是 ~/.tmux.conf。将其移动到另一个目录，例如 ~/tmp。现在，用 Git 克隆 Oh My Tmux 项目。从该克隆目录中将 .tmux.conf 符号链接到你的家目录，并复制该克隆目录中的 .tmux.conf.local 文件到家目录中以进行调整：cd ~ mkdir ~/tmp mv ~/.tmux.conf ~/tmp/ git clone https://github.com/gpakosz/.tmux.git ln -s ~/.tmux/.tmux.conf ./ cp ~/.tmux/.tmux.conf.local ./.tmux.conf.local 文件包含了本地设置和覆盖的设置。例如，我稍微更改了默认颜色，然后启用了 Powerline 分隔线。下面的代码段仅显示了我更改过的内容：tmux_conf_theme_24b_colour=true tmux_conf_theme_focused_pane_bg='default' tmux_conf_theme_pane_border_style=fat tmux_conf_theme_left_separator_main='\uE0B0' tmux_conf_theme_left_separator_sub='\uE0B1' tmux_conf_theme_right_separator_main='\uE0B2' tmux_conf_theme_right_separator_sub='\uE0B3' #tmux_conf_battery_bar_symbol_full='◼' #tmux_conf_battery_bar_symbol_empty='◻' tmux_conf_battery_bar_symbol_full='♥' tmux_conf_battery_bar_symbol_empty='·' tmux_conf_copy_to_os_clipboard=true set -g mouse on请注意，你不需要安装 Powerline，你只需要支持 Powerline 符号的字体即可。我在与控制台相关的所有内容中几乎都使用 Hack Nerd Font，因为它易于阅读并且具有许多有用的额外符号。你还会注意到，我打开了操作系统剪贴板支持和鼠标支持。现在，当 tmux 启动时，底部的状态栏会以吸引人的颜色提供更多信息。Ctrl + b 仍然是输入命令的 “引导” 键，但其他一些进行了更改。现在水平拆分（顶部/底部）窗格为 Ctrl + b + -，垂直拆分为 Ctrl + b + _。启用鼠标模式后，你可以单击以在窗格之间切换，并拖动分隔线以调整其大小。打开新窗口仍然是 Ctrl + b + n，你现在可以单击底部栏上的窗口名称在它们之间进行切换。同样，Ctrl + b + e 将打开 .tmux.conf.local 文件以进行编辑。退出编辑器时，tmux 将重新加载配置，而不会重新加载其他任何内容。这很有用。到目前为止，我仅对功能和视觉显示进行了一些简单的更改，并增加了鼠标支持。现在，我将它设置为以一种有意义的方式启动我想要的应用程序，而不必每次都重新定位和调整它们的大小。为此，我将使用 tmuxinator。tmuxinator 是 tmux 的启动器，它允许你指定和管理布局以及使用 YAML 文件自动启动应用程序。要使用它，请启动 tmux 并创建要在其中运行程序的窗格。然后，使用 Ctrl + b + n 打开一个新窗口，并执行 tmux list-windows。你将获得有关布局的详细信息。请注意上面代码中的第一行，我在其中设置了四个窗格，每个窗格中都有一个应用程序。保存运行时的输出以供以后使用。现在，运行 tmuxinator new 20days 以创建名为 “20days” 的布局。这将显示一个带有默认布局文件的文本编辑器。它包含很多有用的内容，我建议你阅读所有选项。首先输入上方的布局信息以及所需的应用程序：# /Users/ksonney/.config/tmuxinator/20days.yml name: 20days root: ~/ windows: - mail: layout: d9da,208x60,0,0[208x26,0,0{104x26,0,0,0,103x26,105,0,5},208x33,0,27{104x33,0,27,1,103x33,105,27,4}]] @0 panes: - alot - abook - ikhal - todo.sh ls +20days注意空格缩进！与 Python 代码一样，空格和缩进关系到文件的解释方式。保存该文件，然后运行 tmuxinator 20days。你应该会得到四个窗格，分别是 alot 邮件程序、abook、ikhal（交互式 khal 的快捷方式）以及 todo.txt 中带有 “+20days” 标签的任何内容。你还会注意到，底部栏上的窗口标记为 “Mail”。你可以单击该名称（以及其他命名的窗口）以跳到该视图。漂亮吧？我在同一个文件中还设置了名为 “Social” 的第二个窗口，包括 Tuir、Newsboat、连接到 BitlBee 的 IRC 客户端和 Rainbow Stream。tmux 是我跟踪所有事情的生产力动力之源，有了 tmuxinator，我不必在不断调整大小、放置和启动我的应用程序上费心。via: https://opensource.com/article/20/1/tmux-console作者：Kevin Sonney 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Fedora 系统对很多用户来说都很舒适。它有一个令人惊叹的桌面，可以轻松地完成日常任务。而在这光鲜的表面之下是由 Linux 系统提供的支持，而终端是高级用户使用这些底层能力的最简单方法。默认的终端简单且功能有限。但是，终端复用器能让你的终端变得非常强大。本文展示了一些流行的终端多路复用器以及如何安装它们。为什么要用它？嗯，首先，它可以让你注销你的系统，而同时让你的终端会话不受干扰。退出你的控制台，这样安全，在其他地方旅行时通过远程登录 SSH 继续之前的操作是非常有用的。这里有一些工具可以看下。最古老和最知名的终端多路复用器之一是 screen。但是，由于其代码不再维护，本文将重点介绍最近的应用。 （“最近的”是相对而言的，其中一些已存在多年！）Tmuxtmux 是 screen 最广泛使用的替代品之一。它有高度可配置的接口。你可以根据需要对 tmux 进行编程以启动特定类型的会话。在前面发表的这篇文章中你会发现更多关于 tmux 的信息：使用 tmux 实现更强大的终端已经是 tmux 用户？你可能会喜欢这篇使你的 tmux 会话更有效的文章。要安装 tmux，由于你可能已经在终端中，请带上 sudo 使用 dnf：$ sudo dnf install tmux要开始学习，请运行 tmux 命令。单窗格窗口以你的默认 shell 启动。tmux 使用修饰键来表示接下来会发出命令。默认情况下，此键为 Ctrl+B。如果输入 Ctrl+B, C，你将创建一个带有 shell 的新窗口。提示：使用 Ctrl+B, ? 进入帮助模式，会列出你可以使用的所有键。为了简单起见，你先查看 bind-key -T prefix 开头的行。这些是你可以在修饰键之后立即使用的键，可以用来配置你的 tmux 会话。你可以按 Ctrl+C 退出帮助模式回 tmux。要完全退出 tmux，请使用标准 exit 命令或 Ctrl+D 退出所有 shell。Dvtm你可能最近在 Fedroa Magzine 上看到过一篇 dwm，一个动态窗口管理器的文章。像 dwm 一样，dvtm 用于平铺窗口管理，但是是用在终端中。它的设计坚持 UNIX 的“做好一件事”的理念，在这里是管理终端中的窗口。安装 dvtm 也很简单。但是，如果你想要前面提到的注销功能，你还需要 abduco 包来处理 dvtm 的会话管理。$ sudo dnf install dvtm abducodvtm 已经映射了许多管理终端窗口的按键。默认情况下，它使用 Ctrl+G 作为其修饰键。这个按键告诉 dvtm 接下来的字符将成为它应该处理的命令。例如， Ctrl+G, C 创建一个新窗口，Ctrl+G, X 将其关闭。有关使用 dvtm 的更多信息，请查看 dvtm 的主页，其中包含大量提示和入门信息。Byobu虽然 byobu 本身并不是真正的多路复用器 —— 它封装了 tmux 甚至更老的 screen 来添加功能，但它也值得在这里一提。通过帮助菜单和窗口选项卡，以便更加容易地找到那些功能，byobu 使终端复用器更适合初学者。当然它也可以在 Fedora 仓库中找到。要安装它，请使用以下命令：$ sudo dnf install byobu默认情况下，byobu 会在内部运行 screen，因此你可能希望运行 byobu-tmux 来封装 tmux。你可以使用 F9 键打开帮助菜单以获取更多信息，来帮助你入门。Mtmmtm 是你可以找到的最小的复用器之一。事实上，它只有大约 1000 行代码！如果你处于受限的环境（例如旧硬件、最小容器等）中，你可能会发现它很有用。要开始使用，你需要安装一些包。$ sudo dnf install git ncurses-devel make gcc然后克隆 mtm 所在的仓库：$ git clone https://github.com/deadpixi/mtm.git进入 mtm 文件夹并构建程序：$ make你可能会收到一些警告，但完成后，你将会有一个非常小的 mtm 程序。使用以下命令运行它：$ ./mtm你可以在 GitHub 页面上找到该程序的所有文档。这里只是一些终端复用器。你有想推荐的么？请在下面留下你的评论，享受在终端中创建窗口吧！via: https://fedoramagazine.org/4-cool-terminal-multiplexers/作者：Paul W. Frields 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
GNU Screen 是一个终端多路复用器（窗口管理器）。顾名思义，Screen 可以在多个交互式 shell 之间复用物理终端，因此我们可以在每个终端会话中执行不同的任务。所有的 Screen 会话都完全独立地运行程序。因此，即使会话意外关闭或断开连接，在 Screen 会话内运行的程序或进程也将继续运行。例如，当通过 SSH 升级 Ubuntu 服务器时，screen 命令将继续运行升级过程，以防万一 SSH 会话因任何原因而终止。GNU Screen 允许我们轻松创建多个 Screen 会话，在不同会话之间切换，在会话之间复制文本，随时连上或脱离会话等等。它是每个 Linux 管理员应该在必要时学习和使用的重要命令行工具之一。在本简要指南中，我们将看到 screen 命令的基本用法以及在 Linux 中的示例。安装 GNU ScreenGNU Screen 在大多数 Linux 操作系统的默认存储库中都可用。要在 Arch Linux 上安装 GNU Screen，请运行：$ sudo pacman -S screen在 Debian、Ubuntu、Linux Mint 上：$ sudo apt-get install screen在 Fedora 上：$ sudo dnf install screen在 RHEL、CentOS 上：$ sudo yum install screen在 SUSE/openSUSE 上：$ sudo zypper install screen让我们继续看一些 screen 命令示例。管理多个终端会话的 Screen 命令示例在 Screen 中所有命令的默认前缀快捷方式是 Ctrl + a。使用 Screen 时，你需要经常使用此快捷方式。所以，要记住这个键盘快捷键。创建新的 Screen 会话让我们创建一个新的 Screen 会话并连上它。为此，请在终端中键入以下命令：screen现在，在此会话中运行任何程序或进程，即使你与此会话断开连接，正在运行的进程或程序也将继续运行。从 Screen 会话脱离要从屏幕会话中脱离，请按 Ctrl + a 和 d。你无需同时按下两个组合键。首先按 Ctrl + a 然后按 d。从会话中脱离后，你将看到类似下面的输出。[detached from 29149.pts-0.sk]这里，29149 是 Screen ID，pts-0.sk 是屏幕会话的名称。你可以使用 Screen ID 或相应的会话名称来连上、脱离和终止屏幕会话。创建命名会话你还可以用你选择的任何自定义名称创建一个 Screen 会话，而不是默认用户名，如下所示。screen -S ostechnix上面的命令将创建一个名为 xxxxx.ostechnix 的新 Screen 会话，并立即连上它。要从当前会话中脱离，请按 Ctrl + a，然后按 d。当你想要查找哪些进程在哪些会话上运行时，命名会话会很有用。例如，当在会话中设置 LAMP 系统时，你可以简单地将其命名为如下所示。screen -S lampstack创建脱离的会话有时，你可能想要创建一个会话，但不希望自动连上该会话。在这种情况下，运行以下命令来创建名为senthil 的已脱离会话：screen -S senthil -d -m也可以缩短为：screen -dmS senthil上面的命令将创建一个名为 senthil 的会话，但不会连上它。列出屏幕会话要列出所有正在运行的会话（连上的或脱离的），请运行：screen -ls示例输出：There are screens on: 29700.senthil (Detached) 29415.ostechnix (Detached) 29149.pts-0.sk (Detached) 3 Sockets in /run/screens/S-sk.如你所见，我有三个正在运行的会话，并且所有会话都已脱离。连上 Screen 会话如果你想连上会话，例如 29415.ostechnix，只需运行：screen -r 29415.ostechnix或：screen -r ostechnix或使用 Screen ID：screen -r 29415要验证我们是否连上到上述会话，只需列出打开的会话并检查。screen -ls示例输出：There are screens on: 29700.senthil (Detached) 29415.ostechnix (Attached) 29149.pts-0.sk (Detached) 3 Sockets in /run/screens/S-sk.如你所见，在上面的输出中，我们目前已连上到 29415.ostechnix 会话。要退出当前会话，请按 ctrl + a d。创建嵌套会话当我们运行 screen 命令时，它将为我们创建一个会话。但是，我们可以创建嵌套会话（会话内的会话）。首先，创建一个新会话或连上已打开的会话。然后我将创建一个名为 nested 的新会话。screen -S nested现在，在会话中按 Ctrl + a 和 c 创建另一个会话。只需重复此操作即可创建任意数量的嵌套 Screen 会话。每个会话都将分配一个号码。号码将从 0 开始。你可以按 Ctrl + n 移动到下一个会话，然后按 Ctrl + p 移动到上一个会话。以下是管理嵌套会话的重要键盘快捷键列表。Ctrl + a " - 列出所有会话Ctrl + a 0 - 切换到会话号 0Ctrl + a n - 切换到下一个会话Ctrl + a p - 切换到上一个会话Ctrl + a S - 将当前区域水平分割为两个区域Ctrl + a l - 将当前区域垂直分割为两个区域Ctrl + a Q - 关闭除当前会话之外的所有会话Ctrl + a X - 关闭当前会话Ctrl + a \ - 终止所有会话并终止 ScreenCtrl + a ? - 显示键绑定。要退出，请按回车 #### 锁定会话Screen 有一个锁定会话的选项。为此，请按 Ctrl + a 和 x。 输入你的 Linux 密码以锁定。Screen used by sk <sk> on ubuntuserver. Password:记录会话你可能希望记录 Screen 会话中的所有内容。为此，只需按 Ctrl + a 和 H 即可。或者，你也可以使用 -L 参数启动新会话来启用日志记录。screen -L从现在开始，你在会话中做的所有活动都将记录并存储在 $HOME 目录中名为 screenlog.x 的文件中。这里，x 是一个数字。你可以使用 cat 命令或任何文本查看器查看日志文件的内容。记录 Screen 会话终止 Screen 会话如果不再需要会话，只需杀死它。要杀死名为 senthil 的脱离会话：screen -r senthil -X quit或：screen -X -S senthil quit或：screen -X -S 29415 quit如果没有打开的会话，你将看到以下输出：$ screen -ls No Sockets found in /run/screens/S-sk.更多细节请参照 man 手册页：$ man screen还有一个名为 Tmux 的类似的命令行实用程序，它与 GNU Screen 执行相同的工作。要了解更多信息，请参阅以下指南。Tmux 命令示例：管理多个终端会话资源GNU Screen 主页via: https://www.ostechnix.com/screen-command-examples-to-manage-multiple-terminal-sessions/作者：sk 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
tmux：适用于重度命令行 Linux 用户的终端复用器
tmux 是 终端复用器 terminal multiplexer 的缩写，它允许用户在单个窗口中创建或启用多个终端（垂直或水平），当你处理不同的问题时，可以在单个窗口中轻松访问和控制它们。它使用客户端-服务器模型，允许在用户之间共享会话，也可以将终端连接到 tmux 会话。我们可以根据需要轻松移动或重新排列虚拟控制台。终端会话可以从一个虚拟控制台自由切换到另一个。tmux 依赖于 libevent 和 ncurses 库。tmux 在屏幕底部提供了一个状态行，它显示当前 tmux 会话的有关信息，例如当前窗口编号、窗口名称、用户名、主机名、当前时间和日期。启动 tmux 时，它会在一个单独窗口上创建一个新的会话，并将其显示在屏幕上。它允许用户在同一个会话中创建任意数量的窗口。许多人说它类似于 screen，但我不这么认为，因为它提供了许多配置选项。注意： Ctrl+b 是 tmux 中的默认命令前缀，因此，要在 tmux 中执行任何操作，你必须先输入该前缀然后输入所需的选项。tmux 特性创建任意数量的窗口在一个窗口中创建任意数量的窗格它允许垂直和水平分割分离并重新连接窗口客户端-服务器架构，这允许用户之间共享会话tmux 提供许多配置技巧建议阅读：tmate - 马上与其他人分享你的终端会话Teleconsole - 一个与其他人分享终端会话的工具如何安装 tmux 命令大多数 Linux 系统默认预安装 tmux 命令。如果没有，按照以下步骤安装。对于 Debian/Ubuntu，使用 APT-GET 命令或 APT 命令来安装：$ sudo apt install tmux对于 RHEL/CentOS，使用 YUM 命令来安装：$ sudo yum install tmux对于 Fedora，使用 DNF 命令来安装：$ sudo dnf install tmux对于 Arch Linux，使用 Pacman 命令来安装：$ sudo pacman -S tmux对于 openSUSE，使用 Zypper 命令来安装：$ sudo zypper in tmux如何使用 tmux在终端上运行以下命令来启动 tmux 会话。启动 tmux 后，它会在一个新窗口中创建新会话，并将使用你的用户账户自动登录到你的默认 shell。$ tmux你会得到类似于我们上面的截图。tmux 附带状态栏，显示有关当前会话详细信息、日期、时间等。状态栏信息如下：[0]：它表示由 tmux 服务器创建的会话号。默认情况下，它从 0 开始。0:bash：表示会话号、命令行提示符（这里的 bash 表示 shell 名称）。*：这表示该窗口现在处于活动状态。主机名：显示服务器的完全主机名。日期与时间：显示当前日期和时间。（LCTT 译注：tmux 的状态可以根据需要定制，也会因环境、版本的不同而不同。）如何拆分窗口tmux 允许用户垂直或水平分割窗口，称为窗格。每个窗格都包含自己独立运行的终端实例。我们来看看如何做到这一点。按下 Ctrl+b, % 来垂直分割窗格。按下 Ctrl+b, " 来水平分割窗格。如何在窗格之间移动假设，我们创建了一些窗格，希望在它们之间移动，这该怎么做？如果你不知道怎么做，那么使用 tmux 就没有意义了。使用以下控制键执行操作。在窗格之间移动有许多方法。按 Ctrl+b, ← - 选择左边的窗格按 Ctrl+b, → - 选择右边的窗格按 Ctrl+b, ↑ - 选择上边的窗格按 Ctrl+b, ↓ - 选择下边的窗格按 Ctrl+b, { - 来向左交换窗格按 Ctrl+b, } - 来向右交换窗格按 Ctrl+b, o - 切换到下一个窗格（从左到右，从上到下）按 Ctrl+b, ; - 移动到先前活动的窗格出于测试目的，我们将在窗格之间移动。现在我们在 pane2 中，它展示了 lsb_release -a 命令的输出。我们将移动到 pane0，它显示 uname -a 命令的输出。如何打开/创建新窗口你可以在一个终端内打开任意数量的窗口。按 Ctrl+b, c 来创建一个新窗口。按 Ctrl+b, n 移动到下一个窗口。按 Ctrl+b, p 移动到上一个窗口。按 Ctrl+b, 0 ~ Ctrl+b, 9 立即移动到特定窗口。按 Ctrl+b, l 移动到先前选择的窗口。我有两个窗口，第一个窗口有三个窗格，其中包含操作系统版本信息，top 命令输出和内核信息。第二个窗口有两个窗格，其中包含 Linux 发行版 logo 信息。使用以下命令执行操作：按 Ctrl+b, w 以交互方式选择当前窗口。如何缩放窗格你正在一些非常小的窗格中工作，并且你希望将其缩小以进行进一步的工作。要做到这一点，使用以下键绑定。目前我们有三个窗格，我在 pane1 工作，它使用 top 命令显示系统活动信息，我将缩放它。缩放窗格时，它将隐藏所有其它窗格，并只显示窗口中的缩放窗格。按 Ctrl+b, z 缩放窗格，并再次按下它使缩放窗格恢复原状。显示窗格信息要了解窗格编号及其大小，运行以下命令。按 Ctrl+b, q 可简单显示窗格索引。显示窗口信息要知道窗口编号、布局大小，与窗口关联的窗格数量及其大小等，运行以下命令。只需运行 tmux list-windows 即可查看窗口信息。如何调整窗格大小你可能需要调整窗格大小来满足你的要求。你必须按下 Ctrl+b, :，然后在页面底部的黄色颜色条上输入以下详细信息。在上一部分中，我们打印了窗格索引，它同时也显示了窗格大小。为了测试，我们要向增加 10 个单元。参考以下输出，该窗格将 pane1 和 pane2 的大小从 55x21 增加到 55x31。语法： Ctrl+b, : 然后输入 resize-pane [options] [cells size]Ctrl+b, : 然后输入 resize-pane -D 10 将当前窗格大小向下调整 10 个单元。Ctrl+b, : 然后输入 resize-pane -U 10 将当前窗格大小向上调整 10 个单元。Ctrl+b, : 然后输入 resize-pane -L 10 将当前窗格大小向左调整 10 个单元。Ctrl+b, : 然后输入 resize-pane -R 10 将当前窗格大小向右调整 10 个单元。分离并重新连接 tmux 会话tmux 最强大的功能之一是能够在需要时分离和重新连接会话。运行一个长时间运行的进程，然后按下 Ctrl+b，接着按 d，通过离开正在运行的进程安全地分离你的 tmux 会话。建议阅读： 如何在断开 SSH 会话后保持进程/命令继续运行现在，运行一个长时间运行的进程。出于演示目的，我们将把此服务器备份移动到另一个远程服务器以进行灾难恢复（DR）。$ rsync -avzhe ssh /backup root@192.168.0.161:/backups/week-1/在分离 tmux 会话之后，你将获得类似下面的输出。[detached (from session 0)]运行以下命令以列出可用的 tmux 会话。$ tmux ls 0: 3 windows (created Tue Jan 30 06:17:47 2018) [109x45]现在，使用适当的会话 ID 重新连接 tmux 会话，如下所示：$ tmux attach -t 0如何关闭窗格和窗口只需在相应的窗格中输入 exit 或按下 Ctrl-d 即可关闭它，和终端关闭类似。要关闭窗口，按下 Ctrl+b, &。好了，就到这里了，希望你喜欢上它。via: https://www.2daygeek.com/tmux-a-powerful-terminal-multiplexer-emulator-for-linux/作者：Magesh Maruthamuthu 译者：MjSeven 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
tmux 是一个终端多路复用工具，它可以让你系统上的终端支持多面板。你可以排列面板位置，在每个面板运行不同进程，这通常可以更好的地利用你的屏幕。我们在 这篇早期的文章 中向读者介绍过这一强力工具。如果你已经开始使用 tmux 了，那么这里有一些技巧可以帮你更好地使用它。本文假设你当前的前缀键是 Ctrl+b。如果你已重新映射该前缀，只需在相应位置替换为你定义的前缀即可。设置终端为自动使用 tmux使用 tmux 的一个最大好处就是可以随意的从会话中断开和重连。这使得远程登录会话功能更加强大。你有没有遇到过丢失了与远程系统的连接，然后好希望能够恢复在远程系统上做过的那些工作的情况？tmux 能够解决这一问题。然而，有时在远程系统上工作时，你可能会忘记开启会话。避免出现这一情况的一个方法就是每次通过交互式 shell 登录系统时都让 tmux 启动或附加上一个会话。在你远程系统上的 ~/.bash_profile 文件中加入下面内容：if [ -z "$TMUX" ]; then tmux attach -t default || tmux new -s default fi然后注销远程系统，并使用 SSH 重新登录。你会发现你处在一个名为 default 的 tmux 会话中了。如果退出该会话，则下次登录时还会重新生成此会话。但更重要的是，若您正常地从会话中分离，那么下次登录时你会发现之前工作并没有丢失 - 这在连接中断时非常有用。你当然也可以将这段配置加入本地系统中。需要注意的是，大多数 GUI 界面的终端并不会自动使用这个 default 会话，因此它们并不是登录 shell。虽然你可以修改这一行为，但它可能会导致终端嵌套执行附加到 tmux 会话这一动作，从而导致会话不太可用，因此当进行此操作时请一定小心。使用缩放功能使注意力专注于单个进程虽然 tmux 的目的就是在单个会话中提供多窗口、多面板和多进程的能力，但有时候你需要专注。如果你正在与一个进程进行交互并且需要更多空间，或需要专注于某个任务，则可以使用缩放命令。该命令会将当前面板扩展，占据整个当前窗口的空间。缩放在其他情况下也很有用。比如，想象你在图形桌面上运行一个终端窗口。面板会使得从 tmux 会话中拷贝和粘帖多行内容变得相对困难。但若你缩放了面板，就可以很容易地对多行数据进行拷贝/粘帖。要对当前面板进行缩放，按下 Ctrl+b, z。需要恢复的话，按下相同按键组合来恢复面板。绑定一些有用的命令tmux 默认有大量的命令可用。但将一些更常用的操作绑定到容易记忆的快捷键会很有用。下面一些例子可以让会话变得更好用，你可以添加到 ~/.tmux.conf 文件中：bind r source-file ~/.tmux.conf \; display "Reloaded config"该命令重新读取你配置文件中的命令和键绑定。添加该条绑定后，退出任意一个 tmux 会话然后重启一个会话。现在你做了任何更改后，只需要简单的按下 Ctrl+b, r 就能将修改的内容应用到现有的会话中了。bind V split-window -h bind H split-window这些命令可以很方便地对窗口进行横向切分（按下 Shift+V）和纵向切分（Shift+H）。若你想查看所有绑定的快捷键，按下 Ctrl+B, ? 可以看到一个列表。你首先看到的应该是复制模式下的快捷键绑定，表示的是当你在 tmux 中进行复制粘帖时对应的快捷键。你添加的那两个键绑定会在 前缀模式 prefix mode 中看到。请随意把玩吧！使用 powerline 更清晰如前文所示，powerline 工具是对 shell 的绝佳补充。而且它也兼容在 tmux 中使用。由于 tmux 接管了整个终端空间，powerline 窗口能提供的可不仅仅是更好的 shell 提示那么简单。如果你还没有这么做，按照 这篇文章 中的指示来安装该工具。然后使用 sudo 来安装附件：sudo dnf install tmux-powerline接着重启会话，就会在底部看到一个漂亮的新状态栏。根据终端的宽度，默认的状态栏会显示你当前会话 ID、打开的窗口、系统信息、日期和时间，以及主机名。若你进入了使用 git 进行版本控制的项目目录中还能看到分支名和用色彩标注的版本库状态。当然，这个状态栏具有很好的可配置性。享受你新增强的 tmux 会话吧，玩的开心点。via: https://fedoramagazine.org/4-tips-better-tmux-sessions/作者：Paul W. Frields 选题：lujun9972 译者：lujun9972 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
不久前，我们写过一篇关于 teleconsole 的介绍，该工具可用于快速分享终端给任何人（任何你信任的人）。今天我们要聊一聊另一款类似的应用，名叫 tmate。tmate 有什么用？它可以让你在需要帮助时向你的朋友们求助。什么是 tmate？tmate 的意思是 teammates，它是 tmux 的一个分支，并且使用相同的配置信息（例如快捷键配置，配色方案等）。它是一个终端多路复用器，同时具有即时分享终端的能力。它允许在单个屏幕中创建并操控多个终端，同时这些终端还能与其他同事分享。你可以分离会话，让作业在后台运行，然后在想要查看状态时重新连接会话。tmate 提供了一个即时配对的方案，让你可以与一个或多个队友共享一个终端。在屏幕的地步有一个状态栏，显示了当前会话的一些诸如 ssh 命令之类的共享信息。tmate 是怎么工作的？运行 tmate 时，会通过 libssh 在后台创建一个连接到 tmate.io （由 tmate 开发者维护的后台服务器）的 ssh 连接。tmate.io 服务器的 ssh 密钥通过 DH 交换进行校验。客户端通过本地 ssh 密钥进行认证。连接创建后，本地 tmux 服务器会生成一个 150 位(不可猜测的随机字符)会话令牌。队友能通过用户提供的 SSH 会话 ID 连接到 tmate.io。使用 tmate 的必备条件由于 tmate.io 服务器需要通过本地 ssh 密钥来认证客户机，因此其中一个必备条件就是生成 SSH 密钥 key。 记住，每个系统都要有自己的 SSH 密钥。$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/magi/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/magi/.ssh/id_rsa. Your public key has been saved in /home/magi/.ssh/id_rsa.pub. The key fingerprint is: SHA256:3ima5FuwKbWyyyNrlR/DeBucoyRfdOtlUmb5D214NC8 magi@magi-VirtualBox The key's randomart image is: +---[RSA 2048]----+ | | | | | . | | . . = o | | *ooS= . + o | | . =.@*o.o.+ E .| | =o==B++o = . | | o.+*o+.. . | | ..o+o=. | +----[SHA256]-----+ 如何安装 tmatetmate 已经包含在某些发行版的官方仓库中，可以通过包管理器来安装。对于 Debian/Ubuntu，可以使用 APT-GET 命令或者 APT 命令to 来安装。$ sudo apt-get install software-properties-common $ sudo add-apt-repository ppa:tmate.io/archive $ sudo apt-get update $ sudo apt-get install tmate 你也可以从官方仓库中安装 tmate。$ sudo apt-get install tmate 对于 Fedora，使用 DNF 命令 来安装。$ sudo dnf install tmate 对于基于 Arch Linux 的系统，使用 Yaourt 命令或 Packer 命令 来从 AUR 仓库中安装。$ yaourt -S tmate 或$ packer -S tmate 对于 openSUSE，使用 Zypper 命令 来安装。$ sudo zypper in tmate 如何使用 tmate成功安装后，打开终端然后输入下面命令，就会打开一个新的会话，在屏幕底部，你能看到 SSH 会话的 ID。$ tmate 要注意的是，SSH 会话 ID 会在几秒后消失，不过不要紧，你可以通过下面命令获取到这些详细信息。$ tmate show-messages tmate 的 show-messages 命令会显示 tmate 的日志信息，其中包含了该 ssh 连接内容。现在，分享你的 SSH 会话 ID 给你的朋友或同事从而允许他们观看终端会话。除了 SSH 会话 ID 以外，你也可以分享 web URL。另外你还可以选择分享的是只读会话还是可读写会话。如何通过 SSH 连接会话只需要在终端上运行你从朋友那得到的 SSH 终端 ID 就行了。类似下面这样。$ ssh session: ssh 3KuRj95sEZRHkpPtc2y6jcokP@sg2.tmate.io 如何通过 Web URL 连接会话打开浏览器然后访问朋友给你的 URL 就行了。像下面这样。只需要输入 exit 就能退出会话了。[Source System Output] [exited] [Remote System Output] [server exited] Connection to sg2.tmate.io closed by remote host。 Connection to sg2.tmate.io closed。 via: https://www.2daygeek.com/tmate-instantly-share-your-terminal-session-to-anyone-in-seconds/作者：Magesh Maruthamuthu 译者：lujun9972 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
一些 Fedora 用户把大部分甚至是所有时间花费在了命令行终端上。 终端可让您访问整个系统，以及数以千计的强大的实用程序。 但是，它默认情况下一次只显示一个命令行会话。 即使有一个大的终端窗口，整个窗口也只会显示一个会话。 这浪费了空间，特别是在大型显示器和高分辨率的笔记本电脑屏幕上。 但是，如果你可以将终端分成多个会话呢？ 这正是 tmux 最方便的地方，或者说不可或缺的。安装并启动 tmuxtmux 应用程序的名称来源于 终端 （ terminal ） 复用器 （ muxer ） 或 多路复用器 （ multiplexer ） 。 换句话说，它可以将您的单终端会话分成多个会话。 它管理窗口和窗格： 窗口 （ window ） 是一个单一的视图 - 也就是终端中显示的各种东西。 窗格 （ pane ） 是该视图的一部分，通常是一个终端会话。开始前，请在系统上安装 tmux 应用程序。 你需要为您的用户帐户设置 sudo 权限（如果需要，请查看本文获取相关说明）。sudo dnf -y install tmux 运行 tmux程序：tmux 状态栏首先，似乎什么也没有发生，除了出现在终端的底部的状态栏：底部栏显示：[0] – 这是 tmux 服务器创建的第一个会话。编号从 0 开始。tmux 服务器会跟踪所有的会话确认其是否存活。0:testuser@scarlett:~ – 有关该会话的第一个窗口的信息。编号从 0 开始。这表示窗口的活动窗格中的终端归主机名 scarlett 中 testuser 用户所有。当前目录是 ~ (家目录)。* – 显示你目前在此窗口中。“scarlett.internal.fri” – 你正在使用的 tmux 服务器的主机名。此外，还会显示该特定主机上的日期和时间。当你向会话中添加更多窗口和窗格时，信息栏将随之改变。tmux 基础知识把你的终端窗口拉伸到最大。现在让我们尝试一些简单的命令来创建更多的窗格。默认情况下，所有的命令都以 Ctrl+b 开头。敲 Ctrl+b, " 水平分割当前单个窗格。 现在窗口中有两个命令行窗格，一个在顶部，一个在底部。请注意，底部的新窗格是活动窗格。敲 Ctrl+b, % 垂直分割当前单个窗格。 现在你的窗口中有三个命令行窗格，右下角的窗格是活动窗格。注意当前窗格周围高亮显示的边框。要浏览所有的窗格，请做以下操作：敲 Ctrl+b，然后点箭头键敲 Ctrl+b, q，数字会短暂的出现在窗格上。在这期间，你可以你想要浏览的窗格上对应的数字。现在，尝试使用不同的窗格运行不同的命令。例如以下这样的：在顶部窗格中使用 ls 命令显示目录内容。在左下角的窗格中使用 vi 命令，编辑一个文本文件。在右下角的窗格中运行 top 命令监控系统进程。屏幕将会如下显示:到目前为止，这个示例中只是用了一个带多个窗格的窗口。你也可以在会话中运行多个窗口。为了创建一个新的窗口，请敲Ctrl+b, c 。请注意，状态栏显示当前有两个窗口正在运行。（敏锐的读者会看到上面的截图。）要移动到上一个窗口，请敲 Ctrl+b, p 。要移动到下一个窗口，请敲 Ctrl+b, n 。要立即移动到特定的窗口，请敲 Ctrl+b 然后跟上窗口编号。如果你想知道如何关闭窗格，只需要使用 exit 、logout，或者 Ctrl+d 来退出特定的命令行 shell。一旦你关闭了窗口中的所有窗格，那么该窗口也会消失。脱离和附加tmux 最强大的功能之一是能够脱离和重新附加到会话。 当你脱离的时候，你可以离开你的窗口和窗格独立运行。 此外，您甚至可以完全注销系统。 然后，您可以登录到同一个系统，重新附加到 tmux 会话，查看您离开时的所有窗口和窗格。 脱离的时候你运行的命令一直保持运行状态。为了脱离一个会话，请敲 Ctrl+b, d。然后会话消失，你重新返回到一个标准的单一 shell。如果要重新附加到会话中，使用一下命令：tmux attach-session 当你连接到主机的网络不稳定时，这个功能就像救生员一样有用。如果连接失败，会话中的所有的进程都会继续运行。只要连接恢复了，你就可以恢复正常，就好像什么事情也没有发生一样。如果这些功能还不够，在每个会话的顶层窗口和窗格中，你可以运行多个会话。你可以列举出这些窗口和窗格，然后通过编号或者名称把他们附加到正确的会话中：tmux list-sessions 延伸阅读本文只触及的 tmux 的表面功能。你可以通过其他方式操作会话：将一个窗格和另一个窗格交换将窗格移动到另一个窗口中（可以在同一个会话中也可以在不同的会话中）设定快捷键自动执行你喜欢的命令在 ~/.tmux.conf 文件中配置你最喜欢的配置项，这样每一个会话都会按照你喜欢的方式呈现有关所有命令的完整说明，请查看以下参考：官方手册页tmux 电子书作者简介：Paul W. Frields 自 1997 年以来一直是 Linux 用户和爱好者，并于 2003 年加入 Fedora 项目，这个项目刚推出不久。他是 Fedora 项目委员会的创始成员，在文档，网站发布，宣传，工具链开发和维护软件方面都有贡献。他于2008 年 2 月至 2010 年 7 月加入 Red Hat，担任 Fedora 项目负责人，并担任 Red Hat 的工程经理。目前他和妻子以及两个孩子居住在弗吉尼亚。via: https://fedoramagazine.org/use-tmux-more-powerful-terminal/作者：Paul W. Frields 译者：Flowsnow 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出