当前位置: 首页 > 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.lryc.cn/news/624208.html

相关文章:

  • 前端上传excel并解析成json
  • 实现自学习系统,输入excel文件,能学习后进行相应回答
  • AI 对话高效输入指令攻略(五):AI+PicDoc文生图表工具:解锁高效图表创作新范式
  • 实战测试:多模态AI在文档解析、图表分析中的准确率对比
  • 2025年8月更新!Windows 7 旗舰版 (32位+64位 轻度优化+离线驱动)
  • 【温室气体数据集】全球总碳柱观测网络 TCCON
  • 基于NLP的文本生成系统设计与实现(LW+源码+讲解+部署)
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-59,(知识点:谐振电路,谐振频率,串联谐振,并联谐振)
  • 【WSL2笔记10】WSL-Ubuntu 环境下 ComfyUI 本地部署性能最大化指南
  • 【Mac】【Minecraft】关于如何在Mac上搭建基岩版MC服务器的方法
  • SIGKDD-2023《Complementary Classifier Induced Partial Label Learning》
  • 如何用github记录mit6s081-2020-labs学习过程
  • 【网络运维】Playbook项目实战:基于 Ansible Playbook 一键部署 LNMP 架构服务器
  • Tmux Xftp及Xshell的服务器使用方法
  • Tomcat Context的核心机制
  • 【GPT入门】第47课 LlamaFacotory 合并原模型与LoRA模型
  • Navicat 无法登录时找回 SQL 文件的方法
  • Zephyr 中的 bt_le_per_adv_set_data 函数的介绍和应用方法
  • RK3568 NPU RKNN(六):RKNPU2 SDK
  • c++之static和const
  • Zephyr 中 BT_GATT_SERVICE_DEFINE 使用详解
  • 面向R语言用户的Highcharts
  • 【1:1复刻R版】python版火山图函数一键出图
  • Zephyr下控制ESP32S3的GPIO口
  • 生信分析自学攻略 | R软件和Rstudio的安装
  • 抗辐照CANFD通信芯片在高安全领域国产化替代的研究
  • Android系统模块编译调试与Ninja使用指南
  • 网络通信的基本概念与设备
  • 网络常识-SSE对比Websocket
  • MYSQL-175. 组合两个表