你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Screen 这个实用工具的一些功能以及用法

[复制链接]
gaosmile 发布时间:2020-8-13 21:32

很多时候,我们都需要执行一些需要很长时间的任务。如果这时候,你的网络连接突然断开了,那么你之前所做的所有工作可能都会丢失,所做的工作可能都要重做一遍,这会浪费我们许多的时间,非常影响我们的工作。那么有没有办法可以解决这个问题呢?

答案是肯定的,那就是使用 screen 命令。screen 命令允许用户在一个窗口内使用多个终端会话,可以断开连接,也可以重新连接已断开连接的会话。每个会话都可以恢复连接,这样就算会话断开了,用户也不必担心数据丢失,这正好解决了我们的问题。

因此,想与大家分享 Screen 这个实用工具的一些功能以及用法:


( E- h4 j7 G* c& i$ `9 @

3 ]$ \( F5 E/ K9 f' H0 ~安装 Screen" ^* L$ k& |  B9 B# M  r% Q

* h1 `" Z  h1 T1 b

现在许多的 Linux 发行版通常都预装了 Screen 。通过运行以下命令,可以查看系统是否安装了 Screen :


  1. " j# r, ]2 p/ b, t
  2. $ screen --version% ^! X; n0 H# p1 O& {4 `
  3. Screen version 4.06.02 (GNU) 23-Oct-17
    4 M, J* o( Q& E# G7 C
复制代码

如果你的系统并未安装 Screen ,则可以执行以下命令来安装:

  1. <font style="background-color:rgb(255, 255, 255)"><font face="Tahoma"><font color="black">* A9 r# W* A& `0 E3 \3 A1 S
  2. $ sudo apt install screen</font></font></font>" n! r+ h8 b3 F, }  g& c
复制代码

: R# N0 r& ~/ i% G* u

% c8 G* Z: A. q- Q$ a5 e6 J- d2 K: j) @1 w启动 Screen 会话
! G: Q! D4 ~& b  \: S$ M
( N' H/ r7 P4 U: a2 S

想要启动一个 Screen 会话,只需输入以下命令:


  1. 4 O8 P" D  z" a% }0 A' L6 X2 X
  2. $ screen
    0 ?- H9 r4 R& E8 h) ?7 F- D
复制代码

输入 screen 命令后,你会看到一个布满版权信息的界面,你只需按回车或者空格键就可以跳过这个界面。跳过之后,你就可以看到终端界面了。这个终端和原来的终端并没有什么不同,你一样可以浏览文件夹,打开文件,在原来的终端中能做到的事情,它也可以做到。

你也可以在启动 Screen 会话时,使用 -S 参数给会话起名字。例如,我想启动一个叫 alvin 的 Screen 会话:

  1. <font style="background-color:rgb(255, 255, 255)"><font face="Tahoma"><font color="black">7 T7 k* @, ~5 _: O5 a8 w
  2. $ screen -S alvin</font></font></font>* ^4 B- H5 m8 ?6 L6 `4 Q3 v
复制代码

当你启动了不止一个 Screen 会话时,这可以用来区分其他 Screen 会话。

进入 Screen 终端后,按 Ctrl a+? 快捷键,可以查看 Screen 所附带的所有命令:

微信图片_20200813213109.png markdown
, N1 x$ s6 x6 w0 {
. s# S$ S9 c2 G# A# u
分离与重新连接 Screen 会话
& `. `" x! I4 ^* T: P  a- k3 Q0 B4 o$ \: g1 }- b: _: j5 o

假如你要更新系统,你输入更新命令后,是需要等待很长时间才更新完毕的。这时,如果你没用 screen 命令,一旦你的网络连接断开了,那么更新就会被打断,你就必须要重新开始更新。
$ g  V9 x/ }8 i) [

Screen 会话的分离功能可以解决这个问题。你可以进入 Screen 终端里执行更新命令,然后输入会话分离快捷键 Ctrl a+d ,你会看到以下提示信息:

微信图片_20200813213112.png markdown

这就表示你已经成功从 Screen 会话中分离出来并回到原来的 Shell 会话中了。这时,Screen 会话会继续留在后台执行更新任务。而且无论是网络断开连接,还是关闭原来的 Shell 会话,它都不会受到影响。

当然,如果你来不及按会话分离快捷键网络就断开了,Screen 会话也不会关闭,它一样会继续留在后台执行更新任务。

如果你想重新连接到已分离的 Screen 会话,以查看更新进程,只需执行以下命令:

  1. <font style="background-color:rgb(255, 255, 255)"><font face="Tahoma"><font color="black">
    1 |) f/ ^& u+ N6 `- M
  2. $ screen -r</font></font></font>: X* K5 i1 [' a5 D4 E, e
复制代码

需要注意的是,该命令只适用于当前终端只启动了一个 Screen 会话的情况。

% h2 J6 }0 B3 @% y5 g) l3 a
. k" M( P2 U2 }. ~( b5 D
嵌套 Screen 会话9 U9 f: C7 x/ N. w( n+ O

! B' K# F/ q+ T3 I" d; p( \8 M

嵌套 Screen 会话,顾名思义,就是 Screen 会话中的 Screen 会话,是实现用户在一个窗口中使用多个终端的方法之一。
$ M  U; }7 o* u8 G

想要启动一个嵌套 Screen 会话很简单,你只需要在 Screen 终端再次输入 screen 命令,或者按 Ctrl a+c 快捷键,这会在你原来的 Screen 会话中再启动一个 Screen 会话,而原来的 Screen 会话则会在后台保持活动。

例如,你运行了 top 命令来监控系统的 CPU 的使用情况:

  1. . a# k# _0 g6 [3 m$ s6 l
  2. $ top
复制代码

& N4 X! o1 x+ q7 n( g8 L
微信图片_20200813213116.png markdown

而你既不想关掉这个 top 进程,又想同时做其他的任务,那么你就可以使用 Ctrl a+c 快捷键来启动一个新的 Screen 会话,这样,你既可以保持 top 命令在后台运行,又可以去执行其他的任务。

而如果你想切换回执行 top 命令的 Screen 会话,可以使用快捷键 Ctrl a+n (切换至下一个 Screen 会话)或者 Ctrl a+p (切换至上一个 Screen 会话)进行切换。


( |- [, c( u" }/ Z3 `. h) D

$ H1 z# [0 F0 z8 J  S4 Y: g5 _6 [# B分离并启动新的 Screen 会话9 \9 Z' h- T/ ?& v5 |& c

# K+ O+ N+ M1 d* F8 [

从 Screen 会话中分离出来再启动新的 Screen 会话,也可以实现用户在一个窗口中使用多个终端。
( {1 B- I) U! F. M! G

例如,你启动一个 Screen 会话,然后输入 df -h 来查看硬盘的使用情况:


  1. + g$ O) |0 ]  \; E/ ^% G
  2. $ df -h
复制代码


( \5 P5 S/ E3 W8 w
微信图片_20200813213120.png markdown

然后你可以按 Ctrl a+d 快捷键从 Screen 会话中分离出来,回到原来的终端。这时你就可以再次输入 screen 命令启动一个新的 Screen 会话来执行其他的任务。

如果你想重新连接回运行 df -h 命令的 Screen 会话,则需要先从新的 Screen 会话中分离出来,然后尝试输入 screen -r 命令。这时,由于你并行启动了多个 Screen 会话,然而 screen 命令并不知道你想要重新连接到哪个会话中,因此,你会看到以下提示信息:

微信图片_20200813213124.png markdown

从图中可以看到,每个 Screen 会话都有自己的 ID( 4352 与 4294 )以及自己的名字( pts-0.lxlinux )。这里可以看到两个会话的名字都是 pts-0.lxlinux ,那是因为我启动 Screen 会话的时候,没有指定名字,因此它们都以默认的名字作为自己的名字。

想要重新连接到运行 df -h 命令的 Screen 会话,你只需在 screen -r 命令后面再加上会话的 ID 就可以了,像这样:

  1. <font style="background-color:rgb(255, 255, 255)"><font face="Tahoma"><font color="black">( b' I; y1 B1 a6 e: D
  2. $ screen -r 4352</font></font></font>
    . ~, i1 Q" l4 L
复制代码

当然,如果在启动 Screen 会话时,你给会话指定了独一无二的名字,那么你也可以通过会话的名字来指定重新连接到哪个会话,例如,重新连接到名字为 alvin 的会话:

  1. <font style="background-color:rgb(255, 255, 255)"><font face="Tahoma"><font color="black">0 Z# v! G; H  N4 x  p# }  Y
  2. $ screen -r alvin</font></font></font>5 e* Y2 N+ S0 C/ P5 {4 _! c: Z
复制代码

如果你并不知道 Screen 会话的 ID 以及名字,你也可以通过以下命令来查看:

  1. <font style="background-color:rgb(255, 255, 255)"><font face="Tahoma"><font color="black">+ y4 B: l  |( P2 g' u+ j0 _, j
  2. $ screen -ls</font></font></font>8 c2 M" t1 T, |  U% q; B
复制代码

/ I" G, L" j! T& V5 u2 q

" B' a0 y" l; A0 l% O关闭 Screen 会话* U$ v" o$ |) s5 J. Y

! }/ g0 N  h3 x. u' S

要关闭 Screen 会话很简单,就和关闭平常的会话一样,你可以使用 Ctrl d 快捷键,也可以输入 exit 命令关闭:

  1. / y: ?* o) m: d! w' h5 `1 ~
  2. $ exit
复制代码


* b( O. s! n; b9 X4 P& j
微信图片_20200813213127.png markdown

4 A( B$ L+ e" r3 k3 e0 W
* r/ w: |3 W( @
善用 Screen
6 u- }1 h0 `& h4 ]4 y
/ E7 n' e% Q. P- r7 X3 f  Q

在工作中,我们总会遇到需要执行较长时间才能完成的任务,如果在执行这些任务的过程中,遇到网络中断,那将会导致数据丢失以及时间的浪费,这将严重影响我们的工作。Screen 允许会话断开后进程在后台继续运行,且支持从断点恢复进程,这很好地解决了这问题。+ M. H1 }# O$ v2 Z1 x0 R

而且 screen 命令还使我们可以利用一个窗口来同时执行多个任务,这对我们工作是非常有用的。因此,为了避免数据丢失以及节省时间,我们应该多用 screen 命令。最后,如果你还对 screen 命令有疑问,请留言告诉我呗!

赞 收藏 评论0 发布时间:2020-8-13 21:32

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版