screen是一个linux命令行中的终端复用工具,你可以使用screen在一个终端会话中打开多个终端窗口,还可以在离开终端后让screen在后台继续任务并保持程序输出。

简介

screen可以让你在一个终端中运行多个终端会话,你可以在一个终端中切换到不同的会话;或者detach所有的会话,当程序运行一段世界后再attach到之前的会话中。

screen的具体应用场景例如下面:

  • 当你使用ssh登录到服务器运行一个长时间的任务的时候,如果离开了终端,那么任务就会停止。那么这时候可以让这个命令运行在screen的会话中,这样即使离开终端,程序仍然会继续。你可以在之后访问终端时候继续screen的会话;
  • 当你通过很多安全验证通过ssh登录到一个终端的时候,你需要一边运行程序同时执行其它操作的话,可以通过screen打开在一个终端内打开多个终端窗口,避免了反复登录ssh。

和screen类似的程序还有tmux,byobu,screen不如后面的程序现代化,但是大多数linux都自带了screen所以你不需要再去安装,如果没有网络的时候也可以直接使用。

你可以使用screen --version来查看当前的版本。如果没有安装可以使用apt install screen来安装。

start, detach, then attach

开始一个screen会话,可以通过下面的命令:

screen -R test

它会创建一个名为test的会话,如果已经存在一个名为test的会话,那么它会attach到之前的会话中。一些博客推荐使用screen -S test来创建会话,但是这有时候会导致创建了两个名为test的会话。

之后你可以在这个终端中输入一些内容比如echo hello screen

接着按下 ctrl a + d ,就会发现退出了screen,回到了原来的shell,同时下面显示detached。刚才的screen会话被放在了后台运行并没有消失。

如果运行:

screen -ls

可以发现后台运行的全部screen会话。

如果希望attach到之前的会话,可以使用下面的命令,其中test是之前会话的标签:

screen -R test

你还可以尝试使用screenie来attach到之前的会话,在终端输入screenie(需要先安装),之后在弹出的对话中按下数字选择会话就可以进入。

自定义配置

如何知道自己当前在screen的会话中?可以使用ctrl+a 然后按下t键,如果显示日期那么说明当前的终端是在screen中。

当时在实际使用不能实时按键检查,另一个方法是修改配置文件.screenrc

# 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}]'

之后看到状态栏有提示就说明在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 关闭当前区域。

参考