linux:告别SSH断线烦恼,Screen命令核心使用指南

引言

在远程服务器上工作时,我们最怕的就是网络突然断开,一个正在运行的重要脚本或编译任务可能就此中断,前功尽弃。GNU Screen工具就是为了解决这个问题而生的。它就像一个“虚拟终端”的管理器,让我们可以在一个终端窗口中创建多个独立的会话(Session),并且可以随时“分离”(detach)和“恢复”(reattach),即使我们关闭了当前的SSH连接,里面的程序也会持续在后台运行。
看了 screen --help 感觉眼花缭乱是很正常的,它的参数确实非常多,但我们日常高频使用的其实就那么几个。
在这里插入图片描述

核心概念:会话(Session)与窗口(Window)

要理解screen,我们首先要搞清楚两个核心概念:

  • 会话 (Session): 当我们启动screen时,我们就创建了一个会话。这是一个大的容器,可以独立于我们的终端存在。我们可以断开连接,这个会话和里面的所有进程都会继续在服务器上运行。
  • 窗口 (Window): 在一个会话内部,我们可以创建多个窗口,每个窗口都像一个独立的命令行终端(Shell)。这就像浏览器的标签页,让我们可以在不同任务之间轻松切换。

下面,我们就来看看如何通过几个简单的命令玩转screen

创建一个新的Screen会话

这是我们使用screen的第一步。最简单的方式是直接输入screen,但这通常不够直观,因为当我们有多个会话时,很难区分它们。

常用命令:screen -S [session_name]

这个命令中的 -S 参数(S是大写的)允许我们为一个会话命名,强烈推荐每次都这样做。 这样可以让我们清晰地知道每个会话是用来做什么的。

示例:
假设我要开始一个编译项目的工作,我会创建一个名为 compiler 的会话:

dave@gitlab-runner:~$ screen -S compiler

执行后,我们会进入一个新的、看起来和之前一模一样的终端界面。但别担心,我们已经在一个受screen保护的会话里了。

分离(Detach)当前会话

这是screen的精髓所在。当我们需要暂时离开,但又想让会话中的任务继续运行时,就可以“分离”它。

常用快捷键:Ctrl+a 然后按 d

这个组合键的意思是:先同时按下Ctrla键,然后松开,再按一下d键(detach的首字母)。

示例:
在刚才的 compiler 会话中,我启动了一个需要长时间运行的编译命令。现在我需要下班回家,于是我按下 Ctrl+a 然后 d。终端会显示 [detached from 202352.compiler],然后返回到我们原来的主终端界面。此时,编译任务仍在服务器上默默运行。

查看所有正在运行的会话

下班回家后,我们重新登录服务器,想看看之前创建的会话还在不在。

常用命令:screen -lsscreen -list

这个命令会列出所有当前存在的screen会话及其状态(Attached或Detached)。

示例:

dave@gitlab-runner:~$ screen -ls
There are screens on:
	202352.compiler	(08/18/25 15:30:00)	(Detached)
	201098.pts-0.gitlab-runner	(08/18/25 12:51:32)	(Detached)
2 Sockets in /run/screen/S-dave.

看,我们之前创建的 compiler 会话正在安稳地运行,并且处于 Detached(已分离)状态。

恢复(Reattach)一个已存在的会话

现在,我们想回到之前的 compiler 会话中,查看编译的进度。

常用命令:screen -r [session_name_or_pid]

-r 参数(reattach的首字母)用于恢复一个已分离的会话。我们可以使用会话的PID(如202352)或者我们之前设置的名字(如compiler)来指定要恢复哪个会话。 使用名字显然更方便。

示例:

dave@gitlab-runner:~$ screen -r compiler

执行后,我们会立刻回到之前分离时的界面,看到我们的编译任务仍在屏幕上输出日志,仿佛从未离开过。

如果只有一个Detached的会话,我们甚至可以省略会话名,直接用 screen -r

在会话内管理窗口

当一个任务变得复杂,我们可能需要在一个会话里同时做几件事,比如一边编译代码,一边查看日志。这时,多窗口功能就派上用场了。

所有在screen会话内的快捷键都以 Ctrl+a 作为前缀。

  • Ctrl+a 然后 c: 创建一个新窗口 (create)。
  • Ctrl+a 然后 ": 显示窗口列表,我们可以用上下箭头选择并回车切换。
  • Ctrl+a 然后 n: 切换到下一个窗口 (next)。
  • Ctrl+a 然后 p: 切换到上一个窗口 (previous)。
  • Ctrl+a 然后 A: 重命名当前窗口 (大写的A)。

终止Screen会话

当我们的任务全部完成后,如何彻底关闭一个screen会话呢?

  1. 在会话内部:在会话的每个窗口中,像退出普通终端一样输入 exit 命令。当最后一个窗口被关闭时,整个screen会话就会结束。
  2. 在会话外部:如果我们不想进入会话再关闭,可以使用 -X 参数发送命令。
    dave@gitlab-runner:~$ screen -S compiler -X quit
    

UML 流程图:Screen常用操作流程

为了更直观地理解整个过程,我用UML绘制了一个简单的活动图。
在这里插入图片描述

在这里插入图片描述

结论

screen 工具的参数虽多,但我们只需要掌握 screen -S(创建)、screen -ls(查看)、screen -r(恢复)这三个核心命令,再配合 Ctrl+a d(分离)这个快捷键,就已经能解决90%以上的日常问题了。它就像是我们在Linux服务器上的一个“存档点”,让我们能安心地执行任何耗时任务,而不必担心网络波动带来的意外。希望这份指南能帮助大家快速上手,提升自己的工作效率!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云原生水神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值