标签 screen 下的文章

学习基本的 GNU Screen 终端复用技术,然后下载我们的终端命令备忘录,以便你能够熟悉常用的快捷方式。

 title=

对于一般用户而言,命令行终端窗口可能是令人困惑和神秘的。但随着你对 Linux 终端的进一步了解,你很快就会意识到它的高效和强大。不过,也不需要很长时间,你就会想让终端变得更加高效,除了将更多的终端放到你的终端,还有什么高好的方法能够提升你的终端效率呢?

终端复用

终端的许多优点之一是它是一个集中控制的界面。它是一个能让你访问数百个应用程序的窗口,而你与每一个应用程序进行交互所需要的只是一个键盘。但是,现代计算机几乎总是有多余的处理能力,而且现代计算机专家喜欢多任务处理,导致一个窗口处理数百个应用程序的能力是相当有限的。

解决这一问题的常见答案是终端复用:即将虚拟终端叠放在一起,然后在它们之间移动的能力。通过终端复用器,你保持了集中控制,但是当你进行多任务时,你能够进行终端切换。更好的是,你能够在终端中拆分屏幕,使得在同一时间显示多个屏幕窗口。

选择合适的复用器

一些终端提供类似的功能,有标签式界面和分割式视图,但也有细微的差别。首先,这些终端的功能依赖于图形化的桌面环境。其次,许多图形化的终端功能需要鼠标交互或使用不方便的键盘快捷键。终端复用器的功能在文本控制台上和在图形桌面上一样好用,而且键位绑定是针对常见的终端序列设计的,很方便。

现有两种流行的复用器:tmuxGNU Screen。尽管你与它们互动的方式略有不同,但它们做同样的事情,而且大多具有相同的功能。这篇文章是 GNU Screen 的入门指南。关于 tmux 的相关介绍,请阅读 Kevin Sonney 的 tmux 介绍

使用 GNU Screen

GNU Screen 的基本用法很简单,通过 screen 命令启动,你将进入 Screen 会话的第 0 个窗口。在你决定需要一个新的终端提示符前,你可能很难注意到有什么变化。

当一个终端窗口被某项活动占用(比如,你启动了文本编辑器 VimJove 或者你在处理音视频,或运行批处理任务),你可以新建一个窗口。要打开一个新的窗口,按 Ctrl+A,释放,然后按 c。这将在你现有窗口的基础上创建一个新的窗口。

你会知道当前你是在一个新的窗口中,因为你的终端除了默认的提示符外,似乎没有任何东西。当然,你的另一个终端仍然存在,它只是躲在新窗口的后面。要遍历打开的窗口,按 Ctrl+A,释放,然后按 n(表示下一个)或按 p(表示上一个)。在只打开两个窗口的情况下, np 的功能是一样的,但你可以随时打开更多的窗口(Ctrl+A,然后 c ),并在它们之间切换。

分屏

GNU Screen 的默认行为更像移动设备的屏幕,而不是桌面:你一次只能看到一个窗口。如果你因为喜欢多任务而使用 GNU Screen ,那么只关注一个窗口可能看起来是一种退步。幸运的是,GNU Screen 可以让你把终端分成窗口中的窗口。

要创建一个水平分割窗口,按 Ctrl+A,然后按 s 。这将把一个窗口置于另一个窗口之上,就像窗格一样。然而,在你告诉它要显示什么之前,分割的空间是没有用途的。因此,在创建一个分割窗后,你可以用 Ctrl+A ,然后用 Tab 移动到分割窗中。一旦进入,使用 Ctrl+A 然后 n 浏览所有可用的窗口,直到你想显示的内容出现在分割窗格中。

你也可以按 Ctrl+A 然后按 | (这是一个管道字符,在大多数键盘上通过按下 shift 键加上 \)创建垂直分割窗口。

自定义 GNU Screen

GNU Screen 使用基于 Ctrl+A 的快捷键。根据你的习惯,这可能会让你感觉非常自然,也可能非常不方便,因为你可能会用 Ctrl+A 来移动到一行的开头。无论怎样,GNU Screen 允许通过 .screenrc 配置文件进行各种定制。你可以用这个来改变触发键的绑定(称为 “转义” 键绑定)。

escape ^jJ

你还可以添加一个状态行,以帮助你在 Screen 会话中保持自己不迷失。

# status bar, with current window highlighted
hardstatus alwayslastline
hardstatus string '%{= kG}[%{G}%H%? %1`%?%{g}][%= %{= kw}%-w%{+b yk} %n*%t%?(%u)%? %{-}%+w %=%{g}][%{B}%m/%d %{W}%C%A%{g}]'

# enable 256 colors
attrcolor b ".I"
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
defbce on

在有多个窗口打开的会话中,有一个时刻提醒哪些窗口具有焦点活动,哪些窗口有后台活动的提醒器特别有用。它类似一种终端的任务管理器。

下载备忘单

当你学习 GNU Screen 的使用方法时,需要记住很多新的键盘命令。有些命令你马上就能记住,但那些你不常使用的命令可能就很难记住了。你可以按 Ctrl+A 然后再按 ? 来访问 GNU Screen 的帮助界面,但如果你更喜欢一些可以打印出来并放在键盘边的东西,请 下载我们的 GNU Screen 备忘单

学习 GNU Screen 是提高你使用你最喜欢的 终端模拟器 的效率和敏捷性的一个好方法。请试一试吧!


via: https://opensource.com/article/21/4/gnu-screen-cheat-sheet

作者:Seth Kenlon 选题:lujun9972 译者:ddl-hust 校对:wxy

本文由LCTT 原创编译,Linux 中国荣誉推出

当你需要确保长时间运行的任务不会在 SSH 会话中断时被杀死时,Linux screen 命令可以成为救生员。以下是使用方法。

如果因 SSH 会话断开而不得不重启一个耗时的进程,那么你可能会很高兴了解一个有趣的工具,可以用来避免此问题:screen 工具。

screen 是一个终端多路复用器,它使你可以在单个 SSH 会话中运行多个终端会话,并随时从它们之中脱离或重新接驳。做到这一点的过程非常简单,仅涉及少数命令。

要启动 screen 会话,只需在 SSH 会话中键入 screen。 然后,你可以开始启动需要长时间运行的进程,并在适当的时候键入 Ctrl + A Ctrl + D 从会话中脱离,然后键入 screen -r 重新接驳。

如果你要运行多个 screen 会话,更好的选择是为每个会话指定一个有意义的名称,以帮助你记住正在处理的任务。使用这种方法,你可以在启动每个会话时使用如下命令命名:

$ screen -S slow-build

一旦运行了多个会话,要重新接驳到一个会话,需要从列表中选择它。在以下命令中,我们列出了当前正在运行的会话,然后再重新接驳其中一个。请注意,一开始这两个会话都被标记为已脱离。

$ screen -ls
There are screens on:
        6617.check-backups      (09/26/2019 04:35:30 PM)    (Detached)
        1946.slow-build         (09/26/2019 02:51:50 PM)    (Detached)
2 Sockets in /run/screen/S-shs

然后,重新接驳到该会话要求你提供分配给会话的名称。例如:

$ screen -r slow-build

在脱离的会话中,保持运行状态的进程会继续进行处理,而你可以执行其他工作。如果你使用这些 screen 会话之一来查询 screen 会话情况,可以看到当前重新接驳的会话再次显示为 Attached

$ screen -ls
There are screens on:
        6617.check-backups      (09/26/2019 04:35:30 PM)    (Attached)
        1946.slow-build         (09/26/2019 02:51:50 PM)    (Detached)
2 Sockets in /run/screen/S-shs.

你可以使用 -version 选项查询正在运行的 screen 版本。

$ screen -version
Screen version 4.06.02 (GNU) 23-Oct-17

安装 screen

如果 which screen 未在屏幕上提供信息,则可能你的系统上未安装该工具。

$ which screen
/usr/bin/screen

如果你需要安装它,则以下命令之一可能适合你的系统:

sudo apt install screen
sudo yum install screen

当你需要运行耗时的进程时,如果你的 SSH 会话由于某种原因断开连接,则可能会中断这个耗时的进程,那么 screen 工具就会派上用场。而且,如你所见,它非常易于使用和管理。

以下是上面使用的命令的摘要:

screen -S <process description>      开始会话
Ctrl+A Ctrl+D                        从会话中脱离
screen -ls                           列出会话
screen -r <process description>      重新接驳会话

尽管还有更多关于 screen 的知识,包括可以在 screen 会话之间进行操作的其他方式,但这已经足够帮助你开始使用这个便捷的工具了。


via: https://www.networkworld.com/article/3441777/how-the-linux-screen-tool-can-save-your-tasks-and-your-sanity-if-ssh-is-interrupted.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

GNU Screen 是一个终端多路复用器(窗口管理器)。顾名思义,Screen 可以在多个交互式 shell 之间复用物理终端,因此我们可以在每个终端会话中执行不同的任务。所有的 Screen 会话都完全独立地运行程序。因此,即使会话意外关闭或断开连接,在 Screen 会话内运行的程序或进程也将继续运行。例如,当通过 SSH 升级 Ubuntu 服务器时,screen 命令将继续运行升级过程,以防万一 SSH 会话因任何原因而终止。

GNU Screen 允许我们轻松创建多个 Screen 会话,在不同会话之间切换,在会话之间复制文本,随时连上或脱离会话等等。它是每个 Linux 管理员应该在必要时学习和使用的重要命令行工具之一。在本简要指南中,我们将看到 screen 命令的基本用法以及在 Linux 中的示例。

安装 GNU Screen

GNU 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 + ad。你无需同时按下两个组合键。首先按 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 + ac 创建另一个会话。只需重复此操作即可创建任意数量的嵌套 Screen 会话。每个会话都将分配一个号码。号码将从 0 开始。

你可以按 Ctrl + n 移动到下一个会话,然后按 Ctrl + p 移动到上一个会话。

以下是管理嵌套会话的重要键盘快捷键列表。

  • 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 有一个锁定会话的选项。为此,请按 Ctrl + ax。 输入你的 Linux 密码以锁定。

Screen used by sk <sk> on ubuntuserver.
Password:

记录会话

你可能希望记录 Screen 会话中的所有内容。为此,只需按 Ctrl + aH 即可。

或者,你也可以使用 -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 执行相同的工作。要了解更多信息,请参阅以下指南。

资源


via: https://www.ostechnix.com/screen-command-examples-to-manage-multiple-terminal-sessions/

作者:sk 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

screen 是一个非常有用的命令,提供从单个 SSH 会话中使用多个 shell 窗口(会话)的能力。当会话被分离或网络中断时,screen 会话中启动的进程仍将运行,你可以随时重新连接到 screen 会话。如果你想运行一个持久的进程或者从多个位置连接到 shell 会话,这也很方便。

在本文中,我们将展示在 Linux 上安装和使用 screen 的基本知识。

如何安装 screen

screen 在一些流行的发行版上已经预安装了。你可以使用下面的命令检查是否已经在你的服务器上安装了。

screen -v
Screen version 4.00.03 (FAU)

如果在 Linux 中还没有 screen,你可以使用系统提供的包管理器很简单地安装它。

CentOS/RedHat/Fedora

yum -y install screen

Ubuntu/Debian

apt-get -y install screen

如何启动一个 screen 会话

你可以在命令行中输入 screen 来启动它,接着会有一个看上去和命令行提示符一样的 screen 会话启动。

screen

使用描述性名称启动屏幕会话是一个很好的做法,这样你可以轻松地记住会话中正在运行的进程。要使用会话名称创建新会话,请运行以下命令:

screen -S name

将 “name” 替换为对你会话有意义的名字。

从 screen 会话中分离

要从当前的 screen 会话中分离,你可以按下 Ctrl-Ad。所有的 screen 会话仍将是活跃的,你之后可以随时重新连接。

重新连接到 screen 会话

如果你从一个会话分离,或者由于某些原因你的连接被中断了,你可以使用下面的命令重新连接:

screen -r

如果你有多个 screen 会话,你可以用 ls 参数列出它们。

screen -ls

There are screens on:
7880.session    (Detached)
7934.session2   (Detached)
7907.session1   (Detached)
3 Sockets in /var/run/screen/S-root.

在我们的例子中,我们有三个活跃的 screen 会话。因此,如果你想要还原 “session2” 会话,你可以执行:

screen -r 7934

或者使用 screen 名称。

screen -r -S session2

中止 screen 会话

有几种方法来中止 screen 会话。你可以按下 Ctrl+d,或者在命令行中使用 exit 命令。

要查看 screen 命令所有有用的功能,你可以查看 screen 的 man 手册。

man screen

NAME
screen - screen manager with VT100/ANSI terminal emulation

SYNOPSIS
screen [ -options ] [ cmd [ args ] ]
screen -r [[pid.]tty[.host]]
screen -r sessionowner/[[pid.]tty[.host]]

顺便说一下,如果你喜欢这篇文章,请在社交网络上与你的朋友分享,或者在评论区留下评论。谢谢。


via: https://www.rosehosting.com/blog/basic-screen-command-usage-and-examples/

作者:rosehosting.com 译者:geekpi 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

问题:我经常使用screen命令来运行多个伪终端会话。好多次,我发现都记不得自己是否在一个screen会话中,还是在一个常规终端中。是否有一种简便的方法来检查我是否在一个运行着的screen会话中?

一个快捷而又简单的方法来检查你是否处于一个screen伪终端中,还是在一个常规终端中,就是检查STY环境变量。当调用了screen,就会把STY变量值设置为会话名。因此,如果STY环境变量被设置为任何非空字符串,就意味着你正处于一个screen会话中。

 $ echo $STY 
2858.pts-3.my\_host

然而,请注意,上面的方法只有当你是在本地计算机上运行screen命令的时候。如果你从本地计算机的screen会话中SSH到任何远程计算机上,远程计算机上的STY变量不会被设置,尽管在技术上看,你仍然处于一个screen会话中。

事实上,一个更为可靠的检查你是否处于一个screen会话中的方法,是按“Ctrl-a”+“Ctrl-t”。如果你处于screen会话中,终端会在底部显示时间信息。


via: http://ask.xmodulo.com/check-running-screen-session.html

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出