如何在Ubuntu云服务器上安装和使用Screen

在本文中,我们将讨论如何安装和使用\'screen\',这是一个工具,允许您在单个终端中管理多个shell会话。Screen程序对于ssh环境中的多任务非常有用,因为它具有恢复能力

介绍

Screen是一个控制台应用程序,允许您在一个窗口内使用多个终端会话。该程序在shell会话中操作,并且作为其他终端会话的容器和管理器,类似于窗口管理器如何管理窗口。 在许多情况下,创建几个终端窗口是不可能或理想的。您可能需要管理多个控制台会话,而无需运行X服务器,您可能需要轻松访问许多远程云服务器,或者您可能需要在处理其他任务时监视正在运行的程序的输出。所有的需求都很容易用Screen的力量来解决。

安装

在本教程中,我们将使用Ubuntu 12.04,但在安装过程之外,每个现代发行版上的一切都应该相同。 使用“apt-get”在Ubuntu上安装:
sudo apt-get update
sudo apt-get install screen

基本用法

要启动新的Screen会话,我们只需键入“screen”命令。
screen
Screen version 4.00.03jw4 (FAU) 2-May-06

Copyright (c) 1993-2002 Juergen Weigert, Michael Schroeder
Copyright (c) 1987 Oliver Laumann

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program (see the file COPYING); if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to
screen@uni-erlangen.de


                  [Press Space for next page; Return to end.]
启动程序时,您将收到许可页面。只需按“Return”或“Enter”继续。 接下来会发生什么可能是令人惊讶的。我们得到一个正常的命令提示符,它看起来没有发生任何事情。 “Screen”无法正常运行?让我们尝试快速键盘快捷键找出。按住控制键,然后按“a”键,然后按“v”键:
Ctrl-a v
screen 4.00.03jw4 (FAU) 2-May-06
我们刚刚从申请画面中的版本信息,我们已经收到一些反馈,让我们来验证Screen运行正常。 现在是一个伟大的时间介绍我们将控制Screen的方式。Screen主要通过键盘快捷键控制。Screen的每个键盘快捷方式都以“Ctrl-a”开头(按住“a”键的同时按住控制键)。按键的顺序告诉Screen,它需要注意我们按下的下一个键。 当我们请求Screen的版本信息时,你已经使用了这个范例。让我们使用它来获得一些更有用的信息。
Ctrl-a ?
                       Screen key bindings, page 1 of 2.

                       Command key:  ^A   Literal ^A:  a

  break       ^B b         license     ,            removebuf   =         
  clear       C            lockscreen  ^X x         reset       Z         
  colon       :            log         H            screen      ^C c      
  copy        ^[ [         login       L            select      '         
  detach      ^D d         meta        a            silence     _         
  digraph     ^V           monitor     M            split       S         
  displays    *            next        ^@ ^N sp n   suspend     ^Z z      
  dumptermcap .            number      N            time        ^T t      
  fit         F            only        Q            title       A         
  flow        ^F f         other       ^A           vbell       ^G        
  focus       ^I           pow_break   B            version     v         
  hardcopy    h            pow_detach  D            width       W         
  help        ?            prev        ^H ^P p ^?   windows     ^W w      
  history     { }          quit        \            wrap        ^R r      
  info        i            readbuf              
  kill        K k          redisplay   ^L l         xoff        ^S s      
  lastmsg     ^M m         remove      X            xon         ^Q q      

                  [Press Space for next page; Return to end.]
这是内部键盘快捷方式Screen。你可能想记住如何到这里,因为它是一个很好的快速参考。正如你可以在底部看到的,你可以按“空格”获得更多的命令。 好吧,让我们尝试一些更有趣的东西。让我们在这个窗口中运行一个名为“top”的程序,它将向我们显示一些关于我们进程的信息。
top
top - 16:08:07 up  1:44,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  58 total,   1 running,  57 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    507620k total,   262920k used,   244700k free,     8720k buffers
Swap:        0k total,        0k used,        0k free,   224584k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
    1 root      20   0  3384 1836 1288 S  0.0  0.4   0:00.70 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd           
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.11 ksoftirqd/0        
    5 root      20   0     0    0    0 S  0.0  0.0   0:00.12 kworker/u:0        
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0        
    7 root      RT   0     0    0    0 S  0.0  0.0   0:00.07 watchdog/0         
    8 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 cpuset             
    9 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 khelper            
   10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kdevtmpfs          
   11 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 netns              
   12 root      20   0     0    0    0 S  0.0  0.0   0:00.03 sync_supers        
   13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 bdi-default        
   14 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kintegrityd        
   15 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kblockd            
   16 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 ata_sff            
   17 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khubd              
   18 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 md
好的,我们现在正在监控我们的VPS的过程。但是如果我们需要运行一些命令来找到我们看到的程序的更多信息呢?我们不需要退出“顶”。我们可以创建一个新窗口来运行这些命令。
Ctrl-a c
“Ctrl-a c”序列为我们创建一个新窗口。我们现在可以运行任何我们想要的命令,而不破坏我们在另一个窗口中进行的监视。 那个其他窗口去哪里了?我们可以使用一个新命令回到它:
Ctrl-a n
这个序列进入我们正在运行的下一个窗口。窗口列表包装,所以当没有窗口超出当前窗口,它将我们切换回第一个窗口。
Ctrl-a p
该序列沿相反的方向改变当前窗口。所以如果你有三个窗口,并且当前在第三个,这个命令将切换到第二个窗口。 当您在同一两个窗口之间翻转时,有用的快捷方式是:
Ctrl-a Ctrl-a
此序列会将您移动到最近访问的窗口。因此,在上一个示例中,这会将您移回到第三个窗口。 在这一点上,你可能想知道如何跟踪我们正在创建的所有窗口。幸运的是,Screen上有许多不同的方式来管理你的不同会话。首先,我们将创建三个新窗口共四个窗口,然后我们将尝试一个最简单的窗口管理工具,“Ctrl-a w”。
Ctrl-a c
Ctrl-a c
Ctrl-a c
Ctrl-a w
0$ bash  1$ bash  2-$ bash  3*$ bash
我们从这个命令获取一些有用的信息:我们当前窗口的列表。这里,我们有四个窗口。每个窗口都有一个数字,窗口编号从“0”开始。当前窗口在数字旁边有一个星号。 所以你可以看到我们当前在窗口#3(实际上是第四个窗口,因为第一个窗口是0)。那么我们如何快速到达窗口1?
Ctrl-a 1
我们可以使用索引号直接跳到我们想要的窗口。让我们再次看到我们的窗口列表。
Ctrl-a w
0$ bash  1*$ bash  2$ bash  3-$ bash
如你所见,星号告诉我们,我们现在在第1号窗口。让我们尝试不同的切换窗口的方式。
Ctrl-a “
Num Name                                                                   Flags

  0 bash                                                                       $
  1 bash                                                                       $
  2 bash                                                                       $
  3 bash                                                                       $
这次我们得到一个实际的导航菜单。您可以使用向上和向下箭头或使用“j”和“k”导航,就像您在vi文本编辑器中一样。通过按“Return”或“Enter”切换到窗口。 这是非常有用的,但现在我们所有的窗口都命名为“bash”。这不是很有帮助。让我们列举我们的一些会话。切换到您要命名的窗口,然后使用“Ctrl-a A”序列。
Ctrl-a 0
Ctrl-a A
Set window's title to: bash
使用“Ctrl-a A”序列,我们可以命名我们的会话。你现在可以通过“bash”退格,然后重命名任何你想要的。我们将在窗口#0上再次运行“top”,因此我们将其命名为“监视”。
Set window's title to: monitoring
Ctrl-a “
Num Name                                                                   Flags

  0 monitoring                                                                 $
  1 bash                                                                       $
  2 bash                                                                       $
  3 bash                                                                       $
现在我们对窗口#0有一个更有用的标签。所以我们知道如何创建和命名窗口,但是当我们不再需要窗口时,我们如何摆脱它们呢?我们使用“Ctrl-a k”序列,它代表“kill”。
Ctrl-a k
Really kill this window [y/n]

管理Screen会话

当您想退出Screen并杀死所有窗口时,可以使用此命令序列。
Ctrl-a \
Really quit and kill all your windows [y/n]
这将破坏我们的Screen会话。我们将失去我们创建的任何窗口和任何未完成的工作。 但我们想探索使用“Screen”的巨大好处之一。我们不想破坏会话,我们只想分离它。分离允许我们在Screen实例中的程序继续运行,但它让我们可以访问我们的基本控制台会话(从最初开始“Screen”的那个)。Screen会话仍然存在,它将只在后台管理。
Ctrl-a d
[detached from 1835.pts-0.Blank]
所以我们的会议现在分开了。我们如何回到它?
screen –r
“r”表示重新附加。我们现在回到我们的Screen会话。如果我们有多个Screen会话,怎么办?如果我们已经开始了一个Screen会话并脱离它,然后开始一个的Screen会话,超脱了呢?
screen
Ctrl-a d
screen
Ctrl-a d
我们如何告诉Screen哪个会话要附加?
 screen –ls
 There are screens on:
	2171.pts-0.Blank	(07/01/2013 05:00:39 PM)	(Detached)
	1835.pts-0.Blank	(07/01/2013 03:50:43 PM)	(Detached)
2 Sockets in /var/run/screen/S-justin.
现在我们有一个会议列表。我们可以通过在“-r”标志之后键入它的id号来重新连接第二个。
screen –r 1835
如果要在两个单独的计算机或终端窗口上附加会话怎么办?您可以使用“-x”标志,它允许您共享会话。
screen –x

在Screen中管理终端

有许多命令可以帮助您管理在Screen中运行的终端会话。 要复制文本,可以使用以下序列:
Ctrl-a [
这将给你一个光标,你可以用箭头键或h,j,k,l键(如vi)移动。移动到要开始复制的位置,然后按“Return”或“Enter”。移动到要复制的位置的末尾,然后再次按“返回”或“输入”。然后将文本复制到剪贴板。 有一件事要注意的是,这也是Screen的滚动机制。如果你需要看到Screen上的一些文本,你可以点击“Ctrl-a [”,然后向上滚动Screen。 我们可以粘贴我们用右边括号复制的文本。
Ctrl-a ]
您可能想要做的另一件事是监视在另一个Screen窗口中执行的程序。 让我们说,你在一个窗口编译的东西,你想知道它什么时候完成。您可以询问Screen使用“Ctrl-a _”序列来监视该窗口的静默,当没有输出生成30秒时,将告诉您。 让我们尝试一个更简单的例子。让我们有Screen告诉我们当我们的窗口完成ping谷歌4次。
ping –c 4 www.google.com
Ctrl-a _
 The window is now being monitored for 30 sec. silence.
现在我们可以在另一个窗口中工作,并在此窗口中的任务完成时收到警报。
Ctrl-a 1
Window 2: silence for 30 seconds
我们也可以做相反的事情,并在特定窗口上发生活动时收到提醒。我们用“Ctrl-a M”序列来实现。
sleep 20 && echo “output”
Ctrl-a M
Window 2 (bash) is now being monitored for all activity.
当命令产生输出时,我们将被警告。
Ctrl-a 1
Activity in window 2
让我们说,我们要做一些重要的更改,我们希望有一个我们运行的所有命令的日志。我们可以记录会话:
Ctrl-a H
Creating logfile "screenlog.1".

Screen区域

如果我们需要同时看到多个窗口,我们可以使用Screen调用“地区”的东西。我们通过分割当前区域创建更多的区域。要水平分割当前区域,我们可以键入:
Ctrl-a S
这将把我们当前的窗口移动到Screen的上半部分,并在它下面打开一个新的空白区域。我们可以通过“tab”键进入下Screen:
Ctrl-a [tab]
然后我们可以在底部区域创建一个新窗口或以正常方式将视图更改为不同的窗口。 如果我们要杀死当前区域,我们可以使用这个序列:
Ctrl-a X
这破坏了该地区,而不破坏实际的窗口。这意味着如果你在该区域中运行一个程序,你仍然可以访问它作为一个正常的窗口,该窗口的视图被简单地销毁。 如果我们想要进行垂直分割,我们可以使用这个序列:
Ctrl-a |
注意:这不是1(数字1)或L字符。它是“管道”字符,在大多数键盘上的“\”相同的键上。 垂直分割的控制与水平分割相同。如果我们添加了几个不同的区域,并想返回到单个区域,我们可以使用这个序列,这会破坏所有区域,但当前的区域。
Ctrl-a Q

使用Byobu

Screen的一个伟大的增强是称为“byobu”的程序。它充当Screen的包装器,并提供增强的用户体验。在Ubuntu上,您可以安装:
sudo apt-get install byobu
在我们开始之前,我们需要告诉byobu使用Screen作为后端。我们可以使用以下命令:
byobu-select-backend
Select the byobu backend:
  1. tmux
  2. screen

Choose 1-2 [1]:
我们可以选择这里的Screen将其设置为默认终端管理器。 现在,可以键入“byobu”,而不是在“Screen”中键入开始会话。
byobu
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-24-virtual i686)

 * Documentation:  https://help.ubuntu.com/

Welcome to the light, powerful, text window manager, Byobu.
You can toggle the launch of Byobu at login with:
  'byobu-disable' and 'byobu-enable'

For tips, tricks, and more information, see:
 * http://bit.ly/byobu-help

justin@Blank:~$ 












 u?  12.04  0:*                118! 3h55m 2.00 2.0GHz 496M6% 2013-07-01 18:19:21
正如你可以看到,你现在有一个漂亮的界面包装的Screen。当你第一次输入“Ctrl-a”时,你必须告诉byobu来识别Screen命令而不是Emacs命令。
Ctrl-a
Configure Byobu's ctrl-a behavior...

When you press ctrl-a in Byobu, do you want it to operate in:
    (1) Screen mode (GNU Screen's default escape sequence)
    (2) Emacs mode  (go to beginning of line)

Note that:
  - F12 also operates as an escape in Byobu
  - You can press F9 and choose your escape character
  - You can run 'byobu-ctrl-a' at any time to change your selection

Select [1 or 2]:
选择“1”可正常使用byobu。界面提供了很多有用的信息,例如窗口列表和系统信息。在Ubuntu上,它甚至告诉你有多少包有安全更新,一个数字后跟一个红色背景上的惊叹号。使用byobu和Screen之间的不同之处是byobu实际上管理会话的方式。如果你在分离后再次键入“byobu”,它将简单地重新连接你之前的会话,而不是创建一个新的会话。要创建新会话,您必须键入:
byobu –S sessionname
将“会话名称”更改为您要呼叫新会话的任何内容。您可以查看当前会话的列表,包括:
byobu –ls
There are screens on:
	22961.new	(07/01/2013 06:42:52 PM)	(Detached)
	22281.byobu	(07/01/2013 06:37:18 PM)	(Detached)
2 Sockets in /var/run/screen/S-root.
如果有多个会话,当您输入“byobu”时,您将看到一个菜单,以选择您要连接的会话。
byobu
Byobu sessions...

  1. screen: 22961.new (07/01/2013 06:42:52 PM) (Detached)
  2. screen: 22281.byobu (07/01/2013 06:37:18 PM) (Detached)
  3. Create a new Byobu session (screen)
  4. Run a shell without Byobu (/bin/bash)

Choose 1-4 [1]:
你可以选择任何当前会话,创建一个新的byobu会话,甚至得到一个新的shell不使用byobu。 在远程管理的云服务器上可能有用的一个选项是在您登录会话时自动启动。这意味着,如果你已经从你的会话断开连接,你的工作将不会丢失,你可以简单地重新连接,回到你之前的地方。 要使byobu自动从每次登录开始,请在终端中输入:
byobu-enable
The Byobu window manager will be launched automatically at each text login.

To disable this behavior later, just run:
  byobu-disable

Press  to continue...
就像它说,如果你想再次关闭此功能,只需键入:
byobu-disable
它将不再自动启动。