UNIXETC

screen使用详解

Screen是一个全屏窗口管理器,它在多个进程之间多路复用物理终端。每个虚拟终端都提供DEC VT100终端的功能,此外,还提供 ANSI X3.64 (ISO 6429) 和 ISO 2022 标准的多项控制功能(例如,插入/删除行和支持多个字符集)。

每个虚拟终端都有一个回滚历史缓冲区和一个复制和粘贴机制,允许用户在窗口之间移动文本区域。当screen被调用时,它会创建一个带有 shell(或指定命令)的窗口,以便你可以像往常一样使用该程序。然后,您可以随时创建包含其他程序(包括更多 shell)的新(全屏)窗口、终止当前窗口、查看活动窗口列表、打开和关闭输出日志记录、在窗口之间复制文本、查看回滚历史记录、在窗口之间切换等。所有窗口都完全独立于彼此运行其程序。

安装screen

screen是默认的gun utils,很多linux系统默认都安装了,如果没有可使用如下命令安装

# debian based
apt install screen 
# redhat based
yum install screen
# or
dnf install screen

# 检查screen版本
root@hcss-ecs-279f:~# screen -v
Screen version 4.09.00 (GNU) 30-Jan-22

使用screen

使用screen命令不带任何参数即可新建打开一个session。

每个session都有如[pid.sessionname]的命名,其中pid为唯一生成的id,而默认生成的sessionname由tty和host名组成。

session有两种状态:

如下,使用screen -ls查看session列表,会发现一个pid为1489名为pts-3.hcss-ecs-279f的session,状态为Attached。

root@hcss-ecs-279f:~# screen -ls
There is a screen on:
        1489.pts-3.hcss-ecs-279f        (04/09/2025 04:45:13 PM)        (Attached)
1 Socket in /run/screen/S-root.
root@hcss-ecs-279f:~#

命名session

为了便于管理,可以使用-S选项来指定session名称,如下新建了一个名为toby的session

root@hcss-ecs-279f:~# screen -S toby

root@hcss-ecs-279f:~# screen -ls
There are screens on:
        1538.toby       (04/09/2025 05:03:09 PM)        (Attached)
        1489.pts-3.hcss-ecs-279f        (04/09/2025 04:45:13 PM)        (Attached)
2 Sockets in /run/screen/S-root.
root@hcss-ecs-279f:~#

后台运行session

可以使用快捷键Ctrl+a d来将当前session转为Detached状态,这样退出系统后,下次可以使用-r选项来恢复session。

提示 Ctrl+a d的操作方法是先按Ctrl和a,然后再按d

恢复session

使用-r [pid.sessionname]选项可以重新恢复指定session,使用pidsessionname都可以。

screen -r 1538

#or

screen -r toby

退出session

使用exit即可退出当前session,或者使用快捷键Ctrl+a k杀死当前session。

Really kill this window [y/n]

还可以使用-X选项将quit命令传递给指定session,如下:

root@hcss-ecs-279f:~# screen -ls
There are screens on:
        1634.pts-4.hcss-ecs-279f        (04/09/2025 05:27:19 PM)        (Detached)
        1589.toby       (04/09/2025 05:16:03 PM)        (Detached)
        1489.pts-3.hcss-ecs-279f        (04/09/2025 04:45:13 PM)        (Detached)
3 Sockets in /run/screen/S-root.
root@hcss-ecs-279f:~# screen -R 1589 -X quit
root@hcss-ecs-279f:~# screen -ls
There are screens on:
        1634.pts-4.hcss-ecs-279f        (04/09/2025 05:27:19 PM)        (Detached)
        1489.pts-3.hcss-ecs-279f        (04/09/2025 04:45:13 PM)        (Detached)
2 Sockets in /run/screen/S-root.

screen快捷键

screen提供了功能丰富的快捷键,可以方便键盘侠便捷使用。

screen默认快捷键可以使用Ctrl+a来调用,先按Ctrl+a,然后按?即可出现默认快捷键提示。

                             Screen key bindings, page 1 of 2.

                              Command key:  ^A   Literal ^A:  a

break       ^B b       history     { }        other       ^A         split       S
clear       C          info        i          pow_break   B          suspend     ^Z z
colon       :          kill        K k        pow_detach  D          time        ^T t
copy        ^[ [       lastmsg     ^M m       prev        ^H ^P p ^? title       A
detach      ^D d       license     ,          quit        \          vbell       ^G
digraph     ^V         lockscreen  ^X x       readbuf     <          version     v
displays    *          log         H          redisplay   ^L l       width       W
dumptermcap .          login       L          remove      X          windows     ^W w
fit         F          meta        a          removebuf   =          wrap        ^R r
flow        ^F f       monitor     M          reset       Z          writebuf    >
focus       ^I         next        ^@ ^N sp n screen      ^C c       xoff        ^S s
hardcopy    h          number      N          select      '          xon         ^Q q
help        ?          only        Q          silence     _

                         [Press Space for next page; Return to end.]
                              Screen key bindings, page 2 of 2.

^]   paste .
"    windowlist -b
-    select -
0    select 0
1    select 1
2    select 2
3    select 3
4    select 4
5    select 5
6    select 6
7    select 7
8    select 8
9    select 9
I    login on
O    login off
]    paste .
|    split -v
:kB: focus prev

                               [Press Space or Return to end.]

There is no screen to be resumed matching XX错误

如下,由于意外断网导致上次的session(989.ls)还处于Attached状态,但使用screen -r 989恢复时会提示无法成功

root@hcss-ecs-279f:~# screen -ls
There is a screen on:
        989.ls  (04/09/2025 04:16:31 PM)        (Attached)
1 Socket in /run/screen/S-root.
root@hcss-ecs-279f:~# screen -r 989
There is a screen on:
        989.ls  (04/09/2025 04:16:31 PM)        (Attached)
There is no screen to be resumed matching 989.
root@hcss-ecs-279f:~#

这是因为同样一个session无法重复attached,解决方法时先使用screen -d 989将其detach,然后再使用screen -r 989重新attach session。

root@hcss-ecs-279f:~# screen -d 989
[989.ls detached.]
root@hcss-ecs-279f:~# screen -ls
There is a screen on:
        989.ls  (04/09/2025 04:16:31 PM)        (Detached)
1 Socket in /run/screen/S-root.
root@hcss-ecs-279f:~# screen -r 989

一些screen用例

设置screen实现每次登录vps使用同一会话

https://www.gnu.org/software/screen/

#Debian #Vps #Screen #Linux #Session #会话管理 #Attached #Detached