Linux screen命令

介绍

screen命令可以创建多个在后台运行的会话中,同时运行多个程序,无需打开多个终端窗口。常用于“挂起”需要长时间运行的任务(同步文件、执行脚本等),可以会话之间来回切换、稍后可以重连会话、多个用户可以连接到同一个 screen 会话,共同查看和操作程序。

基本语法

screen [ -options ] [ cmd [ args ] ]

  • options:可选参数;
  • cmd:可选命令,在启动会话时,直接运行这个命令;
  • args:命令的参数;

会话的状态

  • Attached:会话正在前台运行,有用户正在会话中;
  • Detached:会话正在后台运行,没有用户正在会话中;
  • Multiuser:会话中存在多个用户;
  • Dead:会话中的所有窗口都被关闭,会话已结束;
  • Attached but not responding:会话处于 Attached 状态,由于网络或终端被意外关闭等原因,会话无法正常响应。
可选参数 介绍
-S(session) 创建一个自定义命名的会话
-d(detach) 修改会话的状态为Detached
-r(resume) 重新连接会话
-ls-list 查看全部会话
-x(mux) 重新连接到一个Attached状态的会话,并允许多个用户同时查看和操作该会话
-wipe 清理Dead状态的会话
-h(history lines) 设置会话中缓存区缓存历史的行数
-m(mandatory) 如果正在被其它用户使用,强行连接会话

快捷键

在连接会话后,可以使用快捷键的方式来操作。

快捷键 功能
Ctrl + a screen 的命令前缀,所有操作都需要先按下这个组合键
Ctrl + a c 创建一个新的窗口(终端会话)
Ctrl + a n 切换到下一个窗口
Ctrl + a p 切换到上一个窗口
Ctrl + a 0-9 切换到指定编号的窗口(例如 Ctrl + a 1 切换到窗口 1)
Ctrl + a d 从当前会话中分离(会话仍在后台运行)
Ctrl + a k 关闭当前窗口
Ctrl + a ? 显示所有可用的快捷键
Ctrl + a A 重命名当前窗口
Ctrl + a : 进入命令模式(可以输入 screen 的命令,例如 quit 退出所有窗口)

常用功能

创建会话

直接使用screen可创建匿名会话,不推荐使用。建议,使用自定义命名的会话:

screen -S <session_name>

暂时离开会话

快捷键:Ctrl+a d

重连会话

会话创建成功后,系统会生成一个session_id。screen支持会话名称重复,再次连接会话时,需要指定session_id

  • 连接的会话状态是Detached,使用 screen -r <session_name or session_id>
  • 连接的会话状态是Attached,当前正有用户在会话中,有两个方式进行重连:
    1. 中断用户的连接,然后在连接,使用 screen -dr <session_name or session_id>-d 表示分离当前连接,-r 表示重新连接。
    2. 和用户一起协作,使用 screen -x <session_name or session_id>

退出会话

  • 在会话中,使用 exit;或者使用 Ctrl + a k
  • 在会话外,使用 screen -X -S <session_name or session_id>

清理会话

如果会话已经死亡(例如程序退出或终端关闭),可以通过以下命令清理:

screen -wipe

日志记录

将会话内容保存到日志文件。使用快捷键:Ctrl+ a H