您是否曾经遇到过在远程计算机上执行长时间运行的任务,突然连接中断,SSH会话终止以及工作丢失的情况。

在本教程中,我们将说明如何安装screen命令并说明如何使用screen命令,如何使用screen运行后台命令,进程与任务。

screen或GNU screen是终端多路复用器。换句话说,这意味着您可以启动screen会话,然后在该会话中打开任意数量的窗口,也就是虚拟终端。

即使它们的窗口不可见,在Screen中运行的进程也将继续运行。

如今,大多数Linux发行版中都已预先安装screen命令。可以运行命令screen --version检查它是否已安装在你的Linux系统。命令将会screen的版本信息。

如果您的系统上未安装screen,则可以使用发行版的软件包管理器轻松安装它。

如果你的计算机运行的是基于Debian的Linux发行版。例如Ubuntu和Linux mint,可以运行命令sudo apt install screen安装screen。

如果你的计算机运行的是基于Redhat的Linux发行版。例如CentOS和Fedora,可以运行命令sudo apt install screen安装screen。

sudo yum install screen #for centos and fedora
sudo apt install screen #for Ubuntu and Debian
screen --version
Screen version 4.06.02 (GNU) 23-Oct-17

启动 screen

要开始screen会话,只需在终端运行screen 命令即可。这将打开一个screen会话,创建一个新窗口,并在该窗口中启动shell。

当您运行多个screen会话时,命名会话非常有用。要创建命令的会话,请运行命令screen -S session_name

现在您已经打开了一个screen会话,你键入Ctrl+a ?来获取命令列表。

当进入后,请键入Ctrl-a c,创建一个shell会话,然后就可以运行命令或者执行常驻后台任务。

如果需要退出当前screen会话时,请键入Ctrl+a d 退出screen。你执行任务将会一直运行。

screen

screen -S session_name #命名会话
Ctrl+a ?   #获取帮助
Ctrl+a c   #在screen创建shell 会话
Ctrl+a d   #退出screen

screen 快捷键

当您开始新的screen会话时,它将创建一个带有shell的窗口。screen会话中可以有多个窗口。

要创建shell会话类型的窗口键入Ctrl+a c,将为其分配范围0...9中的第一个可用数字。

以下是一些用于管理screen窗口的最常用命令。Ctrl+a c创建一个新窗口,包括shell会话。

Ctrl+a "列出所有窗口,Ctrl+a 0切换到窗口0,Ctrl+a A重命名当前窗口

Ctrl+a S将当前窗口水平分为两个窗口,Ctrl+a |将当前窗口垂直分割为两个窗口。

Ctrl+a tab将输入焦点切换到下一个窗口,Ctrl+a Ctrl+a在当前窗口和上一个之间切换。

Ctrl+a Q关闭当前区域以外的所有窗口,Ctrl+a X关闭当前窗口。

您可以随时输入键入Ctrl+a d退出screen会话,从会话断开后,在screen会话中运行的程序将继续运行。

恢复screen会话

要恢复screen会话,请运行命令screen -r。如果您的计算机上正在运行多个screen会话,则需要在r选项后附加screen会话id。

要找到会话ID,请运行screen -ls命令列出当前正在运行的screen会话。例如要还原screen的id是10835.pts的会话,请运行命令screen -r 10835

screen -ls
screen -r

screen -r 10835
There are screens on:
    10835.pts-0.myfreax-desktop   (Detached)
    10366.pts-0.myfreax-desktop   (Detached)
2 Sockets in /run/screens/S-myfreax.

自定义screen

启动screen时,如果配置文件存在,它将从/etc/screenrc~/.screenrc中读取其配置参数。

我们可以在~/.screenrc文件根据喜好修改默认的screen设置。以下是带有自定义状态行和一些其他选项的示例配置。

# Turn off the welcome message
startup_message off

# Disable visual bell
vbell off

# Set scrollback buffer to 10000
defscrollback 10000

# Customize the status line
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'
〜/.screenrc

结论

在本教程中,您学习了如何使用Gnu Screen。现在,您可以开始使用screen程序,并通过单个会话创建多个窗口,在窗口之间导航。

退出和恢复screen会话,并使用〜/.screenrc文件个性化您的screen终端。请访问Screen用户手册页,了解有关Gnu screen的更多信息。