学习
实践
活动
工具
TVP
写文章
专栏首页Mintimate's BlogLinux终端命令神器--Screen命令详解。助力Linux使用和管理
原创

Linux终端命令神器--Screen命令详解。助力Linux使用和管理

作者:Mintimate

博客:https://www.mintimate.cn

Mintimate's Blog,只为与你分享

封面

GNU计划

最早Unix发布,其高效率的交互迅速获得大家青睐;但是,随后Unix宣布闭源,以及商业收费后,自然会有一个新的系统来替代。于是,就有了GNU计划(英语:GNU Project),又译为革奴计划。

GUN是一个自由软件集体协作计划,始创于1983年,它的目标是创建一套完全自由的操作系统,称为GNU。也就是我们俗称的Linux系统,后续的Debian、CentOS也是基于Linux开发的发行版本。而我们今天的主角:screen,就是在首批GNU计划内。

GNU

GNU Screen

GNU Screen简称Screen或screen,源自GNU计划,其官网:GNU Screen

初始版本早在1987年就发布,目前的最新稳定版本是:.8.0(2020年2月5日)。所以,你现在使用的screen命令,其实三十年前就有人在使用了。

上篇文章:Linux上后台保持Terminal交互运行的两种方式,就有提screen,这次来填坑~~╮( ̄▽ ̄"")╭

screen的功能

screen的功能大体有三个:

  • 会话恢复:只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
  • 多窗口:在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。
  • 会话共享:Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

这三个功能,其实互相交织,组成screen功能繁多的命令集。

安装screen

因为screen是“元老级”的GNU计划项目,所以不管是apt软件源、或者是yum软件源等其他软件源,都存在screen,只需要使用软件源安装命令即可:

# CentOS
yum install screen
# Debian/Ubuntu
apt install screen

比如:腾讯云轻量应用服务器的Debian镜像,是纯净的Debian镜像,并没有自带screen的,输入screen,会提示screen: command not found,但是我们可以使用apt命令进行安装:

服务器上安装screen

之后,即可使用screen命令:

查询screen版本

screen命令集

screen,通常的命令格式为:

screen [-opts] [cmd [args]]

通常情况下,使用一下基础命令即可,高阶命令过多,比较难记。

注意:

  • 命令区分大小写

状态介绍

通常情况下,screen创建的虚拟终端,有两个工作模式:

  • Attached:表示当前screen正在作为主终端使用,为活跃状态。
  • Detached:表示当前screen正在后台使用,为非激发状态。

通常情况下,不需要关注上面的状态。

基础命令

这里列举一些我认为常用的screen命令,使用以下命令基本满足日常使用。

1. 帮助查询

screen的帮助文档实在是过于详细,以至于查个命令,可能要查几分钟;但是你可以直接使用帮助命令,查询自己需要的命令:

# 查询screen提示
screen -help
查询命令

通过这个命令,可以查询到大部常用命令。

2. 终端列表

怎么查看已经存在的screen终端呢?很简单,使用命令:

screenv -ls

即可查看已经创建(在后台运行的终端):

已经创建的终端

如果你之前没有创建,那么是为空的,比如我的另外一台腾讯云服务器(主要用于测试,所以没怎么部署东西):

已经创建的终端为空

3. 新建终端

大部分人使用screen,是为了让进程以前端运行的方式,后端存活(运行)。所以,使用screen新建一个虚拟终端,后端运行很重要。screen创建虚拟终端的方法很多

比如:直接输入screen回车,即可新建一个虚拟终端,但是这样的名称太乱(以Linux的hostname命名)

直接创建

screen官方推荐的创建虚拟终端的方法是:

# 创建一个叫Hello的虚拟终端
screen -S Hello

腾讯云轻量应用服务器上演示:

创建叫Hello的虚拟终端

之后,会新建一个空白的Terminal,这个就是新的虚拟终端了,如果你使用的是Oh-my-zsh,其上部还会有提示:

oh-my-zsh上的提示

而我一般是使用-R创建虚拟终端:

# 使用-R创建Hello
screen -R Hello

创建好虚拟终端后,运行你的程序(如:Springboot):

screen内运行Spring

这个时候,我们按Ctril+a,再按d,即可保持这个screen到后台并回到主终端:

回到主终端

三种创建方法比较:

  • 使用-R创建,如果之前有创建唯一一个同名的screen,则直接进入之前创建的screen
  • 使用-S创建和直接输入screen创建的虚拟终端,不会检录之前创建的screen(也就是会创建同名的screen)

4. 回到终端

刚刚我们介绍了创建虚拟终端,并回到主终端的方法。那么,如何重新回到虚拟终端呢?

很简单,使用-R或者-r命令即可:

# 使用screen -r命令
screen -r [pid/name]

其中:

  • pid/name:为虚拟终端PID或Name

如图:

例图

其中:32307PIDtoolName

回到这个虚拟终端的命令即为:

screen -r 32307
# 或(在没有重名虚拟终端情况下)
screen -r tool

另外一个-R-r一样,但是没有对应名称的PID或者Name时,会自动创建新的虚拟终端。

5. 清除终端

有时候,我们的进程已经“守护”完毕,不需要这个虚拟终端了,也就是需要释放资源,如何操作呢?

比较推荐的方法,是进入对应虚拟终端,然后输入:

# 退出终端
exit

之后,就会回到主终端。

退出

当然,你如果对screen运行程序,确定已经停止运行了,也可以在主终端内,使用命令释放:

# 使用-R/-r/-S均可
screen -R [pid/Name] -X quit
Demo

高阶命令

screen也有一些高级命令。

绑定键

在虚拟终端内,输入Ctril+a将等待接受预先设置的绑定键,这个时候可以输入对应的一些命令,来操作虚拟终端,如:

  • d:保存会话,后台运行改虚拟终端
  • k:关闭对话,等同输入:exit
  • c:新建一个虚拟终端
  • ?:显示所有绑定键盘
Ctril+a d

实际使用

以下操作,均在真实腾讯云轻量服务器上使用过。

场景1:Minecraft后台运行

当我们创建Minecraft,用screen后台运行是个不错的选择。这样,也可以方便后续我们对服务器进行操作(如:设置管理员)

场景2:后台运行Aria2

我们运行Aria2的交互模式,为什么一定要创建为系统Service呢?其实也可以创建为screnn:

Aira2后台交互

场景3:运行FFmpeg交互

有时候,我们需要对爬虫“爬”下来的文件,使用FFmpeg去处理(如:视频转码),这个时候我们可以使用screen后台挂起:

后台运行FFmpeg

场景4:运行Python爬虫

这个就不放图了,大概就是后台去“爬”一些视频网站,然后screen挂起,方便看日志。

问题&解答

无法进入Attached状态虚拟终端

上文提到,screen有两种状态,Attached状态,其实代表此虚拟终端,用户正在使用,这个时候,是无法进入的。但是,有时候,我们创建虚拟终端,并没有使用Ctril+a再按d退出并挂起虚拟终端,反而因为长时间没操作,或者本地网络掉包等问题,非正常退出虚拟终端,导致出现SSH连接服务器,并没有在虚拟终端内,却出现Attached状态:

Attached状态

使用screen -r tool无法进入:

无法进入

而使用screen -R tool更会“奇迹般”创建新的虚拟终端。

这个时候,不用慌。

只需要:

screen -d tool
screen -d tool

之后,即可使用screen -r toolscreen -R tool进入。

screen内中文输出乱码

中文输出乱码,主要还是编码问题。一般旧版本screen会有这个问题,两个解决方法:

方法一:修改配置文件

创建文件,并加入设置:

# 新建或修改文件
 vim ~/.screenrc

加入以下设置:

# 设置编码
defutf8 on
defencoding utf8
encoding UTF-8 UTF-8

再次开启虚拟终端,就可以看到中文不乱码了。

方法二:单次设置编码

在创建和查看虚拟终端时,加上-U参数:

# 新建对话
screen -U -S new_screen
#切换会话(utf8编码查看)
screen -U -r new_screen

总结

综上所述,就是Linux终端神器- Screen的使用教程和详解。大家是不是都会用这个神器了呢?或者有什么更好的GNU工具呢?欢迎评论区留言嗷。

PS:大家还想了解什么Linux工具呢?

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • linux screen 命令详解(可以中断终端界面运行)

    系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们...

    青阳
  • linux screen 命令详解(可以中断终端界面运行)

    系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们...

    青阳
  • Linux中的screen命令使用详解

    Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可...

    砸漏
  • linux Screen使用 关于screen的命令详解的命令详解(SSH防掉线)

    什么是vps母鸡?VPS母鸡的作用是什么?相信很多开发者和企业第一次听到VPS母鸡这个词的时候都很疑惑。VPS母鸡其实是VPS母机的通俗说法,是指虚拟专用服务器...

    雾海梦曦
  • linux使用screen命令多重视窗管理程序

    此处所谓的视窗,是指一个全屏幕的文字模式画面。通常中有在使用telnet登入主机或是使用老式的终端机时,才有可能用到screen程序。

    用户7639835
  • Linux学习笔记——详解Linux常见命令及终端使用技巧

    timerring
  • linux常用命令_screen和nohup管理远程会话

    线上服务器往往没有安装系统桌面,在进行耗时时间长的操作过程中,有时中途不得不离开,回来之后,因为网络断开,往往操作没有完成。欲哭无泪,不得不重新开始,自从学会了...

    IT不难
  • 【Linux系列】Telnet 命令使用和详解

    Windows操作系统默认未安装该功能。下面演示在 Windows中安装 Telnet Client 的方法。

    框架师
  • Linux中stat函数和stat命令使用详解

    linux文件里的【inode = index node】解释:要理解inode必须了解磁盘和【目录项】,inode实际是连接【目录项】和磁盘的中间物质。

    砸漏
  • Linux rpm 命令参数使用详解[介绍和应用]

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包 二进制包(Bi...

    用户1257215
  • 在 Linux 上使用 kill 和 killall 命令来管理进程

    在 Linux 中,每个程序和 守护程序(daemon)都是一个“ 进程(process)”。 大多数进程代表一个正在运行的程序。而另外一些程序可以派生出其他...

    用户8639654
  • 零基础使用Linux服务器搭建Minecraft基岩(Bedrock)服务器

    Minecraft确实是一款休闲的好游戏,如何搭建Minecraft 基岩版本服务器?脱离局域网的束缚,随时随地和小伙伴联机休闲呢?(也同时让自己的服务器多了个...

    Mintimate
  • Linux命令中Ctrl+z、Ctrl+c和Ctrl+d的区别和使用详解

    Ctrl+z的是将任务中断,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态。

    砸漏
  • 详解Linux Screen让程序保持后台运行

    您是否曾经遇到过在远程计算机上执行长时间运行的任务,突然连接中断,SSH会话终止以及工作丢失的情况。 好吧,这在某个时候发生在我们所有人身上,不是吗? 幸运的是...

    小锋学长生活大爆炸
  • Linux 进程后台运行的几种方式(screen)

    Ctrl+z/bg/nohup/setsid/& 在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作...

    惨绿少年
  • Linux上后台保持Terminal交互运行的两种方式

    Linux上,如果一个进程需要保持后台运行,尤其是在Linux服务器上,后台运行程序、避免因为SSH连接断开而导致进程停止运行时,该怎么办?

    Mintimate
  • Linux学习第三十四篇:rsync通过服务同步,Linux系统日志,screen工具

    rsync通过服务同步 rsync 通过服务的方式同步(在主机上配置好rsync的各种应用) 要编辑配置文件 /etc/rsyncd.conf rsy...

    用户1215343
  • Linux进程管理详细解读

    Linux系统为多用户多任务系统 生物软件运行时要能够查看运行状态 实时监控软件运行状态 例如 CPU 内存使用情况等 当运行出现错误时 要能够及时...

    生信喵实验柴
  • linux系统管理初学者指南 基于centos 7.6下载_centos查看运行的进程

    进程管理包括进程调度、中断处理、信号、进程优先级、进程切换、进程状态、进程内存等等。

    全栈程序员站长

扫码关注腾讯云开发者

领取腾讯云代金券