大家在使用linux的时候,是否遇见过这种情况:在远端服务器运行一个耗时很长的任务,突然间远程连接掉线,SSH会话终端,你正在运行的程序也随之终止。这样的情况会让人很郁闷,那么有没有可以预防这种情况发生的命令呢?(那必须有!)类似于screen和nohup的命令可以让程序在后台运行,及时是远程连接终端甚至是关闭SSH终端,都不会影响到运行的程序。
这篇文章主要对screen进行简单的介绍,希望看了这篇文章的朋友能够对screen有个大致了解。参考英文文章链接如下:
https://linuxize.com/post/how-to-use-linux-screen/#reattach-to-a-linux-screen 如有侵权,请告知。
一、 screen是什么?
screen是个“多路开关”,简单地说,你可以启动一个screen会话界面,然后在该会话界面可以开启任意数量的窗口(虚拟终端),在screen上运行的程序在窗口关闭甚至你和远程失去连接之后依然可以正常运行。
二、 安装Screen
首先可以检查一下你是否在linux系统中安装了screen,输入如下命令:
$ screen --version
如果已经安装,则会有如下输出:
Screen version 4.03.01 (GNU) 28-Jun-15
如果linux系统中没有安装screen,可以通过下面的简易命令进行安装:
Ubuntu 和 Debian:
$ sudo apt install screen
CentOS 和 Fedora:
$ sudo yum install screen
三、 启动 linux screen
在控制台输入命令:
$ screen
然后会有提示让按一下空格才能进入(我这是这种情况),然后按空格,这样就打开了一个screen会话。
四、 Screen 命令:
1. 如果你不知道screen的相关操作命令,可以在当前窗口输入:
Ctrl + a ? (先按 Ctrl+ a, 随后再按shift和旁边的键,即“?”)
这样会在界面上显示一系列的命令,如下图所示。
2. 建立一个自主命名的screen会话窗口
在运行任务不多时,我们可以使用默认的会话名,但是当任务量增加时,我们需要对会话进行命名以对其进行区分。输入命令:
$ screen -S session_name
可以建立一个名字为“session_name”的screen会话窗口。
3. 建立多个linux screen 会话窗口
我们可以在screen会话界面建立多个窗口,同时运行多个程序(只要设备内存/显存足够的话)
Ctrl+a c
在screen会话界面按下 “Ctrl+a c” 组合会新建一个会话窗口,默认按照从0到9的顺序对其进行命名。
Ctrl+a "(shift+回车左边那个键,也就是打出引号的键盘配合)
可以列出当前所有的screen会话窗口,如下图所示
4. 还有如下常用的linux screen窗口管理命令:
Ctrl+a 0 切换到窗口0(编号为数字0)
Ctrl+a A 对当前的窗口重命名
Ctrl+a S 把当前的区域水平分为2块区域,再输入一次会将当前窗口水平均分成3份,再次输入一次,当前窗口被均分成4份,以此类推,效果入下图。
Ctrl+a | 把当前的区域竖直均分为2块区域,再输入一次将当前窗口竖直均分成3份,以此类推(和上面的规律相似)
Ctrl+a tab 将输入光标切换到下一个区域
Ctrl+a Ctrl+a 在当前和之前的区域之间切换
Ctrl+a Q 关闭除当前区域以外的其他区域
Ctrl+a X 关闭当前区域
5. 分离linux screen会话
Ctrl+a d
这条命令可以将screen会话从当前终端进行分离,但是screen会话中的程序仍会继续运行
6. 再次附着 linux screen
输入如下命令恢复screen会话:
$ screen -r
如果当前有多个screen会话正在运行,可以在上述命令后加上screen会话的ID,从而恢复指定的screen会话。
此命令可以获取到当前运行的screen会话ID:
$ screen -ls
会得到如下输出:
There are screens on:
10835.pts-0.linuxize-desktop (Detached)
10366.pts-0.linuxize-desktop (Detached)
2 Sockets in /run/screens/S-linuxize.
如果想恢复screen 10835.pts-0,输入如下命令:
$ screen -r 10835
即可实现对指定screen的恢复。
上面对screen的一些简单操作进行了介绍,希望大家看过之后能对screen有个初步的了解。后续随着使用screen熟练度的提高,会对本篇文章进行深度和广度的扩展。