GNU Screen 简介

了解如何使用这款有用的终端复用器工具,更好地控制您的命令行。
591 位读者喜欢这篇文章。
An introduction to GNU Screen

Opensource.com

GNU Screen(或简称 Screen)是一款实用且多功能,但有些被低估的实用程序,作为 GNU 项目的一部分,它几乎包含在每个 Linux 或 UNIX 发行版中或可供使用。Screen 是一种终端复用器,类似于您在窗口管理器中找到的。如果您只能通过 SSH 链接或通过控制台上的终端会话在计算机或虚拟机上工作,那么它尤其有用。我发现最有用的两个功能是在 Screen 会话中打开多个窗口的能力,以及断开和重新连接 Screen 而不会丢失当前会话的能力。

Screen 只需使用 screen 命令即可启动。

Screen 基础知识

首先,简单介绍一下如何控制 Screen。Screen 通过控制序列 Ctrl+a 工作。在 Screen 会话中输入的所有字符都直接发送到 shell,除了 Ctrl+aCtrl+a 后跟一个字符是您向 Screen 发送命令序列的方式。例如,Ctrl+a ? 会调出带有默认按键绑定的帮助页面。

Screen 允许您在单个终端会话中创建多个窗口。输入 Ctrl+a c 会在 Screen 中启动一个新窗口。这就像一个独立的窗口,有自己的 shell。Ctrl+a K 将杀死当前窗口。

Ctrl+a nCtrl+a p 将分别移动到下一个和上一个屏幕。或者,Ctrl+a # 可以通过编号在屏幕会话之间切换,按照它们启动的顺序排列。还有一个命令可以显示所有当前窗口的列表,并允许使用光标键进行选择,即 Ctrl+a "

Screen 最强大的功能之一是断开和重新连接屏幕会话的能力。当您使用不可靠的连接,或者如果您知道您将从一个网络移动到另一个网络,或从一台计算机移动到另一台计算机时,这非常有用。Ctrl+a d 断开您的屏幕会话。然后您可以注销您的 SSH 会话。当您想继续时,再次登录并使用 -r (表示恢复)选项启动 screen。

您的屏幕会话将从您离开的地方恢复,所有进程都像您离开时一样运行。如果您的会话突然断开连接,您可以类似地使用相同的命令重新连接。如果主机尚未确认您的会话已断开连接,您可以使用 screen -r -d 进行恢复和断开连接,以允许 screen 断开会话并重新连接。如果您的网络连接不可靠,这可能是一个救命稻草。

安装 Screen

Screen 默认安装在某些发行版上,例如 SuSE 和 Slackware。在我尝试过的所有 Linux 发行版上,我都能够使用标准软件包管理器从默认存储库安装 screen。例如,在 Red Hat Enterprise Linux 或 Fedora 上,我能够分别使用 yumdnf 进行安装。在 Debian 和像 Ubuntu 这样的衍生版本下,您可以使用 apt-get 执行相同的操作。我也能够使用 FreeBSD 上的端口安装 screen。

更多高级 Screen 功能

Screen 会话可以拆分。水平拆分通过 Ctrl+a S 完成。这将把您当前的窗口水平分成两半。区域之间的切换通过 Ctrl+a Tab 完成。其他窗口切换命令在拆分屏幕中工作。可以使用 Ctrl+a X 删除拆分窗口。在较新版本的 Screen 中,可以使用 Ctrl+a | 创建垂直拆分。

advanced screen features

可以使用 Ctrl+a H 命令启动当前屏幕会话的日志文件,这将创建一个名为 screenlog.X 的文件,其中 X 是您的屏幕会话的编号。可以使用 Ctrl+a h 调用当前屏幕窗口中内容的屏幕截图,创建一个名为 hardcopy.X 的文件。可以使用 Ctrl+a x 命令锁定屏幕会话,这将使用当前用户的密码锁定屏幕。

为什么选择 GNU Screen?

我经常被问到为什么要使用 Screen 而不是像 tmux 这样的更新的工具?我的回答很简单:GNU Screen 易于使用且无处不在。它已经安装在我工作的服务器上,并且完美地完成了我需要的工作。如果存在需要解决的缺陷,我会立即寻找更好的工具,但 Screen 确实完成了我需要它做的工作。希望您会发现 GNU Screen 和我一样有用,并利用这个经常被忽视的实用程序。

有关 GNU Screen 的更多信息,请阅读 手册页 或查看此 快速参考

Bob Murphy 将在今年的 SCALE 15x 上发表演讲,题为:GNU screen 简介。(或者:如何让命令行为您工作,尤其是在网络串通阻止您时。)

User profile image.
Bob Murphy 是一位 Linux 系统管理员、长期桌面 GNU/Linux 用户和计算机爱好者,他热衷于自由软件并帮助人们更好地使用技术。

8 条评论

Bob,文章写得太棒了!Screen 是我最喜欢的工具之一。它使我作为系统管理员的任务变得更加轻松,并给了我很大的灵活性。关于 GNU/Linux 的各个方面总有更多东西要学习,您的文章确实教会了我一些新东西。我已经使用 screen 多年了,但从不知道它可以进行分屏。

感谢这篇有趣且内容丰富的文章!

David:感谢您的反馈,我很高兴我能给您带来一个您可以在 screen 中使用的技巧!

CTRL-A 在 emacs 中用于将光标移动到行首。如果在 bash 命令行中通过 set -o emacs 启用了 emacs 风格的行编辑,也可以使用它。它的使用是如此自动和根深蒂固,以至于对于 emacs 用户来说,“screen” 似乎几乎毫无价值。

但幸运的是,我们可以向 screen 配置文件 ~/.screenrc 添加一行:
escape ``

也就是说,关键字“escape”后跟两个反引号。这样,我们使用反引号(未按 Shift 的波浪线键)而不是 CTRL-A。这可能会干扰 shell 编程,但使用 "$()" 而不是反引号更易读。如果您真的想键入反引号,只需按两次键即可。

我将 ctrl-a 重新映射到 ctrl-J,因为到目前为止,我还没有发现任何 shell 将 ctrl-J 用于其他任何用途。

GNU screen 很棒。那些我离不开的应用程序之一。很棒的文章!

很棒的文章!几年前,我也写过一篇,最初发表在已停刊的 Red Hat Magazine 上,后来又重新发表在同样已停刊的 Linux Gazette 上。它仍然具有相关性,并且是对您的文章的良好补充:http://linuxgazette.net/168/silva.html

Screen 绝对是我的朋友(奇怪的是,我从未使用过 tmux)。我不知道还有什么更好的工具可以使交互式终端会话(我经常使用)即使在注销或丢失远程连接后仍然保持活动状态。

关于 CTRL-A 问题:这可能有助于我几乎总是将 Emacs 用作 GUI;在终端模式下,我通常使用 vi。

我喜欢使用 Terminix(现在称为 Tilix)
https://github.com/gnunn1/tilix

Dmitri:Terminix(和许多其他 Linux 终端模拟器,如 terminator 或 terminology)都很好,但就我个人而言,我所处的环境不允许我拥有这种奢侈,并且当在端点上安装东西的选择有限时,screen 是一个很棒的工具。

Creative Commons License本作品根据 知识共享许可协议 4.0 版本国际许可协议授权。
© 2025 open-source.net.cn. All rights reserved.