当前位置: 首页 > news >正文

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服务器上的一个“存档点”,让我们能安心地执行任何耗时任务,而不必担心网络波动带来的意外。希望这份指南能帮助大家快速上手,提升自己的工作效率!

http://www.dtcms.com/a/337713.html

相关文章:

  • 第四章:大模型(LLM)】07.Prompt工程-(1)Prompt 原理与基本结构
  • 大数据分析-读取文本文件内容进行词云图展示
  • Zephyr 中的 bt_le_per_adv_set_data 函数的介绍和应用方法
  • [机器学习]09-基于四种近邻算法的鸢尾花数据集分类
  • 具身智能赋能轮椅机器人的认知革命与人机共生新范式
  • 【软考架构】第4章 信息安全的抗攻击技术
  • 从「行走」到「思考」:机器人进化之路与感知—决策链路的工程化实践
  • 微电网管控系统中python多线程缓存与SQLite多数据库文件连接池实践总结(含源码)
  • 安川YASKAWA焊接机器人保护气智能节气阀
  • 蓝牙 GFSK RX Core 架构解析
  • Linux下的软件编程——IPC机制
  • 重复(Repeat)和迭代(Iteration)区别、递归(Recursion)
  • 超级云平台:重构数字生态的“超级连接器“
  • 想找出版社出书?这样选就对了!
  • 哈工深无人机目标导航新基准!UAV-ON:开放世界空中智能体目标导向导航基准测试
  • 【论文阅读】-《GeoDA: a geometric framework for black-box adversarial attacks》
  • 基于Flink CDC实现联系人与标签数据实时同步至ES的实践
  • 后台管理系统-6-vue3之mockjs模拟和axios请求数据
  • python UV虚拟环境项目搭建
  • 和芯星通携手思博伦通信,测试验证系列导航定位芯片/模块符合GB/T 45086.1标准
  • 学习stm32 感应开关盖垃圾桶
  • 用 Python 实现一个“小型 ReAct 智能体”:思维链 + 工具调用 + 环境交互
  • 软件测试覆盖率:真相与实践
  • unity实现背包拖拽排序
  • 1个月征服Java:零基础直达企业级开发——Java面向对象补充知识
  • 汽车近光灯难达标?OAS 软件精准解困
  • 【牛客刷题】正六边形阴影面积计算
  • 深入理解列式存储与向量化引擎
  • 无人机行业“黑话”
  • 10CL016YF484C8G Altera FPGA Cyclone