作为 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 |
关闭当前窗口/会话 |