写点什么

linux-screen 命令使用

  • 2025-08-14
    北京
  • 本文字数:3864 字

    阅读完需:约 13 分钟

本文分享自天翼云开发者社区《linux-screen命令使用》,作者:SummerSnow

背景说明

有时候我们需要在服务器上执行一个可能耗费几天或者更长时间的命令或脚本,在此过程中,如果中途断网或者远程服务器 SSH 超时断开,可能就会出现“前功尽弃”的局面,为了有效解决这种场景问题,我们的主角 screen 就闪亮登场了。screen 是一个在 Unix 和类 Unix 系统上的终端复用工具。它允许用户在单个终端窗口中运行多个终端会话,并提供了一些其他功能,如会话断开后的恢复和远程连接的分离,以下是 screen 的一些主要特点:

  • 多窗口:screen 允许在一个终端窗口中创建多个虚拟终端(窗口),每个窗口可以运行独立的命令和程序;

  • 会话持久性:即使断开与服务器的连接,screen 会话仍然保持运行;

  • 远程连接:screen 允许用户在同一会话中分离(detach)并重新连接,这对于长时间运行的任务或需要断开连接的远程会话非常有用;

  • 多用户共享:多个用户可以连接到同一个 screen 会话,实现共享终端的目的;

  • 屏幕分割:screen 允许用户在同一个窗口中分割屏幕,显示多个区域,每个区域可以运行不同的命令等。

部署安装

本环境为CentOS Linux release 7.9.2009 (Core)
复制代码

部署

#1 如果您系统里没有screen命令,需要先安装screenyum install -y screen
#2 命令验证(使用方法)[root@es1][~/python]$screen --helpUse: screen [-opts] [cmd [args]] or: screen -r [host.tty]
Options:-4 Resolve hostnames only to IPv4 addresses.-6 Resolve hostnames only to IPv6 addresses.-a Force all capabilities into each window's termcap.-A -[r|R] Adapt all windows to the new display width & height.-c file Read configuration file instead of '.screenrc'.-d (-r) Detach the elsewhere running screen (and reattach here).-dmS name Start as daemon: Screen session in detached mode.-D (-r) Detach and logout remote (and reattach here).-D -RR Do whatever is needed to get a screen session.-e xy Change command characters.-f Flow control on, -fn = off, -fa = auto.-h lines Set the size of the scrollback history buffer.-i Interrupt output sooner when flow control is on.-l Login mode on (update /var/run/utmp), -ln = off.-ls [match] or-list Do nothing, just list our SockDir [on possible matches].-L Turn on output logging.-m ignore $STY variable, do create a new screen session.-O Choose optimal output rather than exact vt100 emulation.-p window Preselect the named window if it exists.-q Quiet startup. Exits with non-zero return code if unsuccessful.-Q Commands will send the response to the stdout of the querying process.-r [session] Reattach to a detached screen process.-R Reattach if possible, otherwise start a new session.-s shell Shell to execute rather than $SHELL.-S sockname Name this session <pid>.sockname instead of <pid>.<tty>.<host>.-t title Set title. (window's name).-T term Use term as $TERM for windows, rather than "screen".-U Tell screen to use UTF-8 encoding.-v Print "Screen version 4.01.00devel (GNU) 2-May-06".-wipe [match] Do nothing, just clean up SockDir [on possible matches].-x Attach to a not detached screen. (Multi display mode).-X Execute <cmd> as a screen command in the specified session.
复制代码

参数说明

  • -4仅将主机名解析为 IPv4 地址。

  • -6仅将主机名解析为 IPv6 地址。

  • -a强制将所有功能放入每个窗口的 termcap。

  • -A -[r|R] 使所有窗口适应新的显示宽度和高度。

  • ** -c file 读取配置文件而不是 screenrc。**

  • -d(-r)​分离别处运行的屏幕(并在此处重新连接)。

  • -dmS name作为守护进程启动:分离模式下的屏幕会话。

  • -D(-r)​分离并注销远程(并在此处重新连接)。

  • -D -RR做任何需要的事情来获得 screen 会话。

  • -e xy更改命令字符。

  • -f **流量控制打开,-fn=关闭,-fa=自动。**

  • -h lines设置回滚历史缓冲区的大小。

  • -i流量控制开启时,中断输出更快。

  • -l登录模式打开(更新/var/run/utmp),-ln=off。

  • -ls [match]​什么都不做,只列出我们的 SockDir[关于可能的匹配],同-list

  • -list什么都不做,只列出我们的 SockDir[关于可能的匹配]。

  • -L打开输出日志记录。

  • -m忽略 STY 变量,创建一个新的屏幕会话。

  • -O选择最佳输出,而不是精确的 vt100 模拟。

  • -p windows如果命名窗口存在,则预选该窗口。

  • -q安静启动。如果不成功,则使用非零返回代码退出。

  • -Q命令将向查询进程的标准输出发送响应。

  • -r [session]​重新连接到分离的屏幕进程。

  • -R如果可能,重新连接,否则启动新会话。

  • -s shell要执行的 shell。

  • -S sockname​​将此会话命名为​​**.sockname 而不是​​.​​..。**

  • -t title设置标题。(窗口名称)。

  • -T term将术语用作 windows 的 $term,而不是“screen”。

  • -U告诉 screen 使用 UTF-8 编码。

  • -v打印“屏幕版本 4.01.00devel(GNU)2006 年 5 月 2 日”。

  • -wipe [match]​什么都不做,只需清理 SockDir。

  • -x连接到未分离的屏幕上。(多显示模式)。

  • -X在指定会话中作为屏幕命令执行。

命令使用

单个 screen

#1 在shell终端直接使用screen命令,则会进入到一个screen里。 #1.1 打开screen,模拟ping百度screen[root@es1][~]$ screen
[root@es1 ~]# ping baidu.com64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=1 ttl=51 time=7.56 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=2 ttl=51 time=6.64 ms
#1.2 可以查看已打开的screen会话screen -ls[root@es1 ~]# screen -lsThere is a screen on: 15346.pts-0.es1 (Attached)1 Socket in /var/run/screen/S-root.
#2.1 退出(不间断退出)ctrl+a,再按d,退出当前screen。#2.2 直接退出exit
#3 退出后,如果想再次登入某个screen会话,可以使用的是screen -r [编号],这个编号指的是上述ls的编号,打开后就可以看到ping baidu.com一直在运行[root@es1][~]$ screen -r 1534664 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=198 ttl=51 time=7.33 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=199 ttl=51 time=6.63 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=200 ttl=51 time=6.91 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=201 ttl=51 time=7.17 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=202 ttl=51 time=8.71 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=203 ttl=51 time=6.93 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=204 ttl=51 time=6.55 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=205 ttl=51 time=6.62 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=206 ttl=51 time=7.89 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=207 ttl=51 time=6.44 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=208 ttl=51 time=8.33 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=209 ttl=51 time=6.83 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=210 ttl=51 time=6.41 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=211 ttl=51 time=6.43 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=212 ttl=51 time=6.45 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=213 ttl=51 time=6.64 ms64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=214 ttl=51 time=6.42 ms
#4 在使用exit后再次查看screen -ls[root@es1 ~]# exit[root@es1][~]$ screen -lsNo Sockets found in /var/run/screen/S-root.
复制代码

多个 screen

不指定名字

#1 创建三个screen,若想进入到其中一个,只需指定id[root@es1][~]$ screen [detached from 16976.pts-0.es1]
[root@es1][~]$ screen [detached from 17011.pts-0.es1]
[root@es1][~]$ screen [detached from 17027.pts-0.es1]
#2 查看screen ,目前已经有3个了[root@es1][~]$ screen -lsThere are screens on: 16976.pts-0.es1 (Detached) 17011.pts-0.es1 (Detached) 17027.pts-0.es1 (Detached)3 Sockets in /var/run/screen/S-root.
复制代码

指定名字

#1 指定名字 [root@es1][~]$ screen -S "song_screen" [detached from 17462.song_screen]
#2 列出所有的screen[root@es1][~]$ screen -lsThere are screens on: 16976.pts-0.es1 (Detached) 17011.pts-0.es1 (Detached) 17027.pts-0.es1 (Detached) 17462.song_screen (Detached)4 Sockets in /var/run/screen/S-root.
#3 进入指定screen,即可使用编号,也可使用名称[root@es1][~]$ screen -r 17462[detached from 17462.song_screen]
[root@es1][~]$ screen -r song_screen[detached from 17462.song_screen]
复制代码


用户头像

还未添加个人签名 2022-02-22 加入

天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。

评论

发布
暂无评论
linux-screen命令使用_CDN_天翼云开发者社区_InfoQ写作社区