Linux Screen 命令入门指南

作为 Linux 用户,我们常常需要处理一些耗时较长的任务,例如:下载或复制大文件、执行耗时的数据库查询等。有时,这些重要任务会因会话超时而意外中断。

为解决此类问题,我们可以使用 screen 命令。它是一个全屏软件程序,能将一个物理控制台在多个进程(通常是交互式 shell)之间进行复用。它允许用户在单个终端窗口管理器中打开多个独立的终端实例。

如果我们需要从命令行界面处理多个程序,或者希望将程序与终端 shell 分离,screen 将非常有用。它还允许我们与其他用户共享会话,并实现终端会话的分离与重连。

本文将介绍如何在 Linux 系统中安装、配置和使用 screen 命令,并通过实际示例来理解其用法和优势。

1.安装 Screen 命令

在常见的Linux发行版中,screen默认并未安装,因此需要先通过包管理器手动安装。

请根据你的发行版使用对应的命令进行安装:

复制代码
apt-get install screen      # [Debian/Ubuntu/Mint]
yum install screen          # [RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux]

比如在,RHEL系中安装:

复制代码
[root@yyzcdb81 ~]# yum install screen
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
......
---> 软件包 screen.x86_64.0.4.1.0-0.26.20120314git3c2946.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

===================================================================================================================================================
 Package                      架构                         版本                                                     源                        大小
===================================================================================================================================================
正在安装:
 screen                       x86_64                       4.1.0-0.26.20120314git3c2946.el7                         EL                       552 k

事务概要
===================================================================================================================================================
安装  1 软件包

......
已安装:
  screen.x86_64 0:4.1.0-0.26.20120314git3c2946.el7                                                                                                 

完毕!
[root@yyzcdb81 ~]#

安装完成后,执行screen --version命令验证是否成功:

复制代码
[root@yyzcdb81 ~]# screen --version
Screen version 4.01.00devel (GNU) 2-May-06

下面让我们通过具体示例来学习 screen 的基本用法。

2.Screen 命令语法

screen 的基本语法如下:

复制代码
$ screen [选项] [命令 [参数]]

其中,方括号 [] 表示可选项。

3.20个实用示例
3.1首次启动 Screen

直接在命令行输入 screen,会进入一个看似与普通终端完全相同的界面:

复制代码
screen
3.2 查看 Screen 命令帮助

进入 screen 后,可以像在普通终端一样工作。但由于它是应用程序,拥有自己的命令体系。

按下 Ctrl+A,再输入 ?,即可查看所有可用命令。按 空格键回车键 可退出帮助界面。

根据提示,按空格键,显示下一页帮助信息:

3.3 列出所有打开的窗口

启动 screen 会话后,按下 Ctrl+A 再按 ",可以列出当前会话中的所有窗口。

输出信息中,第一列为窗口编号(从 0 开始),第二列为窗口名称,默认格式为 <用户>@<主机名>:<工作目录>

3.4 终止当前窗口会话

按下 Ctrl+A 再按 k,可以终止当前活动窗口。系统会在左下角提示确认,输入 y 继续,n 取消。

复制代码
[root@yyzcdb81 ~]# screen
[screen is terminating]
[root@yyzcdb81 ~]# 
3.5 创建自定义名称会话

使用 -S 选项可以为会话指定一个易记的名称,这在管理多个会话时非常方便:

复制代码
screen -S mybackup
3.6 分离会话(保持任务运行)

screen 的一大优势是可以"分离"会话,之后重新连接时,所有工作状态都会保留。

例如,通过 SSH 连接到服务器,正在用 wget 下载一个需要数小时的大文件。如果直接断开 SSH 连接,下载会中断。此时可先进入 screen,再开始下载:

复制代码
[root@yyzcdb81 backup]# screen -S mydownos

下载过程中,按下 Ctrl+A 再按 d,即可安全分离会话,返回原终端。你会看到类似这样的提示:

复制代码
[detached from 109888.mydownos]
3.7 重新连接会话

然后退出ssh连接,重新登录服务器后,先用 screen -ls 查看所有可用会话:

如果有多个 screen 会话,需指定会话 ID。

复制代码
[root@yyzcdb81 ~]# screen -ls
There is a screen on:
 109888.mydownos (Detached)
1 Socket in /var/run/screen/S-root.

[root@yyzcdb81 ~]#

然后指定 ID 进行恢复:

复制代码
[root@yyzcdb81 ~]# screen -r 109888
或者
[root@yyzcdb81 ~]# screen -r   # 由于这里保有一个会话,不需指定会话ID
3.8 多窗口操作

在一个 screen 会话中,可以创建多个虚拟终端窗口。按下 Ctrl+A 再按 c 即可创建新窗口。多次执行可创建多个窗口。

3.9 重命名窗口

默认窗口名称为 <用户名>@<主机名>,可自定义为更有意义的名称。

在当前窗口按下 Ctrl+A 再按 A(大写),即可重命名。

3.10 在窗口间切换

按下 Ctrl+A 再按 ",可显示窗口列表,使用方向键选择后按回车即可切换。

3.11 切换到下一个窗口

Ctrl+A + n(next)可快速切换到下一个窗口。

3.12 切换到上一个窗口

Ctrl+A + p(previous)可快速切换到上一个窗口。

3.13 在当前与上一个窗口间切换

Ctrl+A + Ctrl+A 可在最近使用的两个窗口之间快速跳转。

3.14. 跳转到指定编号窗口

Ctrl+A + <窗口编号>(如 0、1、2)可直接跳转到对应窗口。

3.16 水平分割窗口

Ctrl+A + S(大写)可将当前窗口水平分割为上下两个区域。

使用 Ctrl+A + Tab 可在区域间切换,Ctrl+A + X(大写)可关闭当前区域。

3.16 垂直分割窗口

Ctrl+A + |(管道符,通常需按 Shift+\)可将当前窗口垂直分割为左右两个区域。

切换与关闭操作同上。

3.17 启用日志记录

按下 Ctrl+A + H(大写),会在当前用户目录下创建 screenlog.0 文件,记录该窗口的所有操作。再次按下可关闭日志。

也可在启动时直接开启日志:

复制代码
$ screen -L
3.18 快速锁屏

Ctrl+A + x 可立即锁定当前 screen 会话,需要输入 Linux 用户密码解锁。

3.19 为会话设置独立密码

可以为 screen 会话设置独立的密码,用于重连时的验证。

首先使用 mkpasswd 生成加密密码(如明文密码为 test123):

mkpasswd这个命令会随时生成字符串,可用来做密码,需使用命令yum install -y expect来安装,这里安装过程略。

复制代码
[root@yyzcdb81 ~]# mkpasswd -l 12
FpyhnocR6=s9
[root@yyzcdb81 ~]# echo -n "FpyhnocR6=s9" | openssl passwd -stdin -1
$1$j6hOq40m$iW7gcT4Kr7uOhw7CQZppF1

将生成的哈希值写入 ~/.screenrc 文件:

复制代码
echo "password $1$j6hOq40m$iW7gcT4Kr7uOhw7CQZppF1" > ~/.screenrc

此后重新连接会话时,会提示输入该密码。

3.20 退出 Screen

分离会话:Ctrl+A + d

终止会话:在当前窗口输入 exit 或使用 Ctrl+A + k

4.常用命令速查表
命令/快捷键 说明
screen -S <名称> 创建具名会话
screen -ls 列出所有会话
screen -r [ID/名称] 重新连接会话
screen -d [ID/名称] 强制分离远程会话
Ctrl+a c 创建新窗口
Ctrl+a " 显示窗口列表
Ctrl+a n / Ctrl+a p 切换至下一个/上一个窗口
Ctrl+a <编号> 跳转到指定编号窗口
Ctrl+a A 重命名当前窗口
Ctrl+a S 或 `Ctrl+a `
Ctrl+a Tab 在分割区域间切换
Ctrl+a X 关闭当前区域
Ctrl+a H 开启/关闭日志记录
Ctrl+a x 快速锁屏
Ctrl+a d 分离当前会话
Ctrl+a k 终止当前窗口
exit 关闭当前窗口/会话
相关推荐
我也不曾来过11 分钟前
传输层协议UDP和TCP
linux·网络·udp
molihuan2 分钟前
最新VMware Ubuntu 1分钟极速安装 植物人教程
linux·ubuntu
拜托啦!狮子4 分钟前
安装EnsDb.Hsapiens.v86
java·服务器·前端
sdm07042713 分钟前
深刻理解进程信号
linux·运维·服务器
Simonhans16 分钟前
Linux安装Bun
linux·bun
数智化精益手记局24 分钟前
什么是安全生产?解读安全生产的基本方针与核心要求
大数据·运维·人工智能·安全·信息可视化·自动化·精益工程
70asunflower30 分钟前
Ubuntu `tree` 命令完全指南:让目录结构一目了然
linux·数据库·ubuntu
老四啊laosi30 分钟前
【Linux系统】16. 进程程序替换
linux·exec·程序替换
scheduleTTe31 分钟前
Nginx
服务器·前端·nginx
zjeweler34 分钟前
好淘云:低成本云服务器选型与实战应用指南
运维·服务器