【基础】每天掌握一个Linux命令 - screen:守护你的远程会话
在Linux系统运维和开发过程中,经常会遇到这样的场景:通过SSH远程连接服务器执行任务,一旦网络断开或终端关闭,任务就会中断。screen
命令工具正是为解决这类问题而生,它能创建、管理多个独立的终端会话,即使网络中断,会话中的任务也能继续运行,待重新连接后可恢复操作,极大提升工作效率和任务稳定性。
一、工具概述
screen
是一款用于多窗口管理的GNU终端复用器,在Linux和Unix系统中广泛使用。它允许用户在一个终端窗口下创建、切换和管理多个虚拟终端会话,每个会话都能独立运行程序,互不干扰。用户可随时分离当前会话使其在后台继续运行,之后再重新连接恢复操作,特别适合长时间运行脚本、远程调试等场景。
二、安装方式
不同的Linux发行版安装screen
的方式略有不同:
- Debian/Ubuntu系统:使用以下命令安装
sudo apt-get update
sudo apt-get install screen
- CentOS/RHEL系统:通过以下命令安装
sudo yum update
sudo yum install screen
- Arch Linux系统:执行命令安装
sudo pacman -S screen
三、核心功能
功能 | 说明 |
---|---|
会话管理 | 创建、分离、恢复、删除终端会话,实现任务在后台持续运行和随时恢复 |
多窗口操作 | 在一个会话中创建多个虚拟终端窗口,方便同时处理不同任务 |
会话共享 | 支持多个用户共享同一个会话,便于团队协作和技术支持 |
会话录制与回放 | 可以录制会话内容,方便复盘操作过程,也能用于教学和问题排查 |
四、基础用法
- 创建新会话
screen -S <session_name>
:创建一个指定名称的新会话,<session_name>
为自定义的会话名称。例如screen -S mywork
,会进入新的终端会话环境,在其中执行的命令都在该会话内运行。
- 分离会话
- 按下
Ctrl + A
组合键,松开后再按下d
键,可将会话分离,使其在后台继续运行。此时终端会显示[detached from <session_id>. <session_name>]
,表示会话已成功分离。
- 按下
- 列出所有会话
screen -ls
:列出当前用户所有的screen
会话,输出结果类似:
There are screens on:
12345.mywork (Detached)
67890.test (Detached)
2 Sockets in /var/run/screen/S-username.
- 其中,`12345`、`67890` 是会话ID,`mywork`、`test` 是会话名称,`(Detached)` 表示会话处于分离状态。
- 恢复会话
screen -r <session_name>
或screen -r <session_id>
:恢复指定名称或ID的会话。例如screen -r mywork
,即可重新进入名为mywork
的会话继续操作。
- 删除会话
- 先通过
screen -r <session_name>
进入会话,然后在会话内执行exit
命令,或者使用screen -X -S <session_name> quit
在外部强制删除指定会话。
- 先通过
五、进阶操作
- 在会话中创建新窗口
- 在已进入的
screen
会话中,按下Ctrl + A
组合键,松开后再按下c
键,即可创建一个新的虚拟终端窗口。可以通过Ctrl + A
然后按n
(下一个窗口)、p
(上一个窗口)来切换窗口。
- 在已进入的
- 重命名窗口
- 按下
Ctrl + A
组合键,松开后再按下A
键(大写),此时终端会提示输入新的窗口名称,输入后回车即可完成重命名。
- 按下
- 会话共享
- 首先,用户A创建一个会话,如
screen -S shared_session
。然后,用户B想要加入该会话,可执行screen -x <session_name>
,例如screen -x shared_session
。此时用户A和用户B会共享同一个会话,双方操作都会同步显示。
- 首先,用户A创建一个会话,如
- 会话录制
- 创建会话时指定录制文件,命令为
screen -L -Logfile <log_file_name> -S <session_name>
,例如screen -L -Logfile session.log -S myrecording
。之后在会话中的所有操作都会被记录到session.log
文件中。
- 创建会话时指定录制文件,命令为
六、实战案例
案例1:面试题场景
在面试中,面试官可能会问:“当你通过SSH远程连接服务器执行一个长时间运行的脚本,中途网络中断,如何保证脚本继续运行且后续能查看运行结果?”
此时就可以使用 screen
命令。先执行 screen -S script_session
创建一个会话,然后在会话中运行脚本,如 ./long_running_script.sh
。若网络中断,下次重新连接服务器后,执行 screen -r script_session
恢复会话,即可查看脚本运行进度和结果。
案例2:生产场景
在生产环境中,运维人员需要同时监控多个服务的运行日志。可以使用 screen
创建多个窗口,每个窗口打开一个服务的日志文件进行实时监控。先创建一个名为 monitor
的会话 screen -S monitor
,然后通过 Ctrl + A + c
多次创建新窗口,在每个窗口中分别执行 tail -f /var/log/service1.log
、tail -f /var/log/service2.log
等命令,实现对不同服务日志的同时监控。
七、注意事项
- 避免在一个会话中长时间运行过多占用资源的任务,防止系统资源耗尽影响其他服务。
- 定期清理不再使用的
screen
会话,可通过screen -ls
查看后使用screen -X -S <session_name> quit
删除,避免会话堆积占用系统资源。 - 在共享会话时,要注意操作权限和数据安全,避免误操作影响业务运行。
- 部分系统可能默认没有安装
screen
,使用前需确认是否已安装,若未安装按照对应发行版的安装方式进行安装。