如何使用screen命令
大家好,我是良许。
很多时候,我们都需要执行一些需要很长时间的任务。如果这时候,你的网络连接突然断开了,那么你之前所做的所有工作可能都会丢失,所做的工作可能都要重做一遍,这会浪费我们许多的时间,非常影响我们的工作。那么有没有办法可以解决这个问题呢?
答案是肯定的,那就是使用 screen 命令。screen 命令允许用户在一个窗口内使用多个终端会话,可以断开连接,也可以重新连接已断开连接的会话。每个会话都可以恢复连接,这样就算会话断开了,用户也不必担心数据丢失,这正好解决了我们的问题。
因此,良许想与大家分享 Screen 这个实用工具的一些功能以及用法:
安装 Screen
现在许多的 Linux 发行版通常都预装了 Screen 。通过运行以下命令,可以查看系统是否安装了 Screen :
$ screen --version
Screen version 4.06.02 (GNU) 23-Oct-17
如果你的系统并未安装 Screen ,则可以执行以下命令来安装:
$ sudo apt install screen
启动 Screen 会话
想要启动一个 Screen 会话,只需输入以下命令:
$ screen
输入 screen 命令后,你会看到一个布满版权信息的界面,你只需按回车或者空格键就可以跳过这个界面。跳过之后,你就可以看到终端界面了。这个终端和原来的终端并没有什么不同,你一样可以浏览文件夹,打开文件,在原来的终端中能做到的事情,它也可以做到。
你也可以在启动 Screen 会话时,使用 -S 参数给会话起名字。例如,我想启动一个叫 alvin 的 Screen 会话:
$ screen -S alvin
当你启动了不止一个 Screen 会话时,这可以用来区分其他 Screen 会话。
进入 Screen 终端后,按 Ctrl a+? 快捷键,可以查看 Screen 所附带的所有命令:

分离与重新连接 Screen 会话
假如你要更新系统,你输入更新命令后,是需要等待很长时间才更新完毕的。这时,如果你没用 screen 命令,一旦你的网络连接断开了,那么更新就会被打断,你就必须要重新开始更新。
Screen 会话的分离功能可以解决这个问题。你可以进入 Screen 终端里执行更新命令,然后输入会话分离快捷键 Ctrl a+d ,你会看到以下提示信息:

这就表示你已经成功从 Screen 会话中分离出来并回到原来的 Shell 会话中了。这时,Screen 会话会继续留在后台执行更新任务。而且无论是网络断开连接,还是关闭原来的 Shell 会话,它都不会受到影响。
当然,如果你来不及按会话分离快捷键网络就断开了,Screen 会话也不会关闭,它一样会继续留在后台执行更新任务。
如果你想重新连接到已分离的 Screen 会话,以查看更新进程,只需执行以下命令:
$ screen -r
需要注意的是,该命令只适用于当前终端只启动了一个 Screen 会话的情况。
嵌套 Screen 会话
嵌套 Screen 会话,顾名思义,就是 Screen 会话中的 Screen 会话,是实现用户在一个窗口中使用多个终端的方法之一。
想要启动一个嵌套 Screen 会话很简单,你只需要在 Screen 终端再次输入 screen 命令,或者按 Ctrl a+c 快捷键,这会在你原来的 Screen 会话中再启动一个 Screen 会话,而原来的 Screen 会话则会在后台保持活动。
例如,你运行了 top 命令来监控系统的 CPU 的使用情况:
$ top

而你既不想关掉这个 top 进程,又想同时做其他的任务,那么你就可以使用 Ctrl a+c 快捷键来启动一个新的 Screen 会话,这样,你既可以保持 top 命令在后台运行,又可以去执行其他的任务。
而如果你想切换回执行 top 命令的 Screen 会话,可以使用快捷键 Ctrl a+n (切换至下一个 Screen 会话)或者 Ctrl a+p (切换至上一个 Screen 会话)进行切换。
分离并启动新的 Screen 会话
从 Screen 会话中分离出来再启动新的 Screen 会话,也可以实现用户在一个窗口中使用多个终端。
例如,你启动一个 Screen 会话,然后输入 df -h 来查看硬盘的使用情况:
$ df -h

然后你可以按 Ctrl a+d 快捷键从 Screen 会话中分离出来,回到原来的终端。这时你就可以再次输入 screen 命令启动一个新的 Screen 会话来执行其他的任务。
如果你想重新连接回运行 df -h 命令的 Screen 会话,则需要先从新的 Screen 会话中分离出来,然后尝试输入 screen -r 命令。这时,由于你并行启动了多个 Screen 会话,然而 screen 命令并不知道你想要重新连接到哪个会话中,因此,你会看到以下提示信息:

从图中可以看到,每个 Screen 会话都有自己的 ID( 4352 与 4294 )以及自己的名字( pts-0.lxlinux )。这里可以看到两个会话的名字都是 pts-0.lxlinux ,那是因为我启动 Screen 会话的时候,没有指定名字,因此它们都以默认的名字作为自己的名字。
想要重新连接到运行 df -h 命令的 Screen 会话,你只需在 screen -r 命令后面再加上会话的 ID 就可以了,像这样:
$ screen -r 4352
当然,如果在启动 Screen 会话时,你给会话指定了独一无二的名字,那么你也可以通过会话的名字来指定重新连接到哪个会话,例如,重新连接到名字为 alvin 的会话:
$ screen -r alvin
如果你并不知道 Screen 会话的 ID 以及名字,你也可以通过以下命令来查看:
$ screen -ls
关闭 Screen 会话
要关闭 Screen 会话很简单,就和关闭平常的会话一样,你可以使用 Ctrl d 快捷键,也可以输入 exit 命令关闭:
$ exit

善用 Screen
在工作中,我们总会遇到需要执行较长时间才能完成的任务,如果在执行这些任务的过程中,遇到网络中断,那将会导致数据丢失以及时间的浪费,这将严重影响我们的工作。Screen 允许会话断开后进程在后台继续运行,且支持从断点恢复进程,这很好地解决了这问题。
而且 screen 命令还使我们可以利用一个窗口来同时执行多个任务,这对我们工作是非常有用的。因此,为了避免数据丢失以及节省时间,我们应该多用 screen 命令。最后,如果你还对 screen 命令有疑问,请留言告诉我呗!
公众号:良许Linux

有收获?希望老铁们来个三连击,给更多的人看到这篇文章
如何使用screen命令的更多相关文章
- linux screen 命令详解
一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...
- linux screen 命令详解[转]
一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...
- Linux screen 命令
简单的来说 在screen里面敲的命令都是在后台的,所以不需要想bg那样,ctrl+z在bg把后台服务运行起来.而且下次可以直接进去screen作业的后台界面,可以看到我们过去敲的命令记录,即使你的C ...
- linux screen 命令详解(未验证+研究)
一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...
- screen命令学习
我们有时需要做一些长时间的工作,比如格式化一个20T的raid磁盘,可能需要几个小时以上,如果只是执行格式化的话,由于网络不稳定,或者要下班了,还没格式化完成,关闭了ssh的窗口,命令可能就执行失败了 ...
- Linux下screen命令
//1.列出当前的screenscreen -ls //2.新建一个screen,直接在命令行键入screen命令 screen -S [会话名称][root@www.lnuxidc.com ~]# ...
- [转]linux中强大的screen命令
[转]linux中强大的screen命令 http://pythonorg.diandian.com/post/2012-01-05/40027464147 今天用SCREEN用点生了,有几个功能不知 ...
- Linux screen命令简介
Linux上有的shell脚本运行时候是阻塞的,如果想在屏幕上即能够看到阻塞命令的输出,同时又能够在shell窗口运行其他程序,那么Linux自带的screen命令是非常不错的选择. 1.screen ...
- linux中screen命令的用法
http://www.9usb.net/201002/linux-screen-mingling.html 作为linux服务器管理员,经常要使用ssh登陆到远程linux机器上做一些耗时的操作.也许 ...
- linux之screen命令
linux平台下想同时运行多个操作,执行多个程序或命令:命令行就一个,要想同时执行多个命令如何操作? 一个screen命令即可: Centos操作系统默认没有安装screen: 安装方法: Cento ...
随机推荐
- p73_万维网和HTTP协议
一.URL形式 URL不区分大小写 <协议>://<主机>:<端口>/<路径> 二.HTTP协议 HTTP协议定义了浏览器(万维网客户进程)怎样向万维网 ...
- APP自动化 -- 框架
一.框架源码 https://github.com/jiangnan27/Autotest_APP_Open 二.框架环境 python3 + appium1.15.3 + pytest5.3.5 三 ...
- Sts 授权直传阿里云 OSS-.net core实现
前言 磁盘怎么又满了?赶紧 快 打电话给运维扩容扩容扩容!这个问题已经是我入职新公司两个月来,第 3 次听到了.经过一通了解,事情原来是这样的.虽然我们使用了阿里云的 OSS 对象存储服务,但是为了不 ...
- ELK5.6.4+Redis+Filebeat+Nginx(CentOS7.4)
下载地址: Elasticsearhc: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.4.tar.gz ...
- Bug--Tomcat Error start child
添加Quartz之后报错 下面的Cause by: More than one fragment with the name [spring_web] was found. This is not l ...
- scrapyd 部署
步骤 1 pip install scrapyd pip install scrapy-client 步骤 2 修改 scrapy.cfg [deploy:targetName]url = http: ...
- Servlet学习之Tomcat控制台中文乱码问题
Tomcat控制台中文乱码问题 在更新了IDEA2020.1版本后,可以安装官方的简体中文插件,方便我们日常使用,但是更新后再运行Tomcat时,控制台的输出日志出现中文乱码问题,接下来告诉大家如何修 ...
- 找工作的你不容错过的45个PHP面试题附答案(上篇)
Q1: == 和 === 之间有什么区别? 如果是两个不同的类型,运算符 == 则在两个不同的类型之间进行强制转换 === 操作符执行 ’ 类型安全比较’ 这意味着只有当两个操作数具有相同的类型和相同 ...
- Python os.lseek() 方法
概述 os.lseek() 方法用于设置文件描述符 fd 当前位置为 pos, how 方式修改.高佣联盟 www.cgewang.com 在Unix,Windows中有效. 语法 lseek()方法 ...
- luogu P4769 [NOI2018]冒泡排序 结论 树状数组 卡特兰数
LINK:冒泡排序 神题. 可以想到爆搜 期望得分5~10分. 打成这个样子心态不得爆炸? 仔细分析 一个不合法序列还有什么标志. 容易想到某个数字离自己位置相反的方向多走了一步. 考虑单独对每个数字 ...