阡陌 发表于 2023-12-26 00:14:52

screen——基于会话的多窗体复用终端



你是否遇到过 ssh 或 telnet 到服务器执行一个长时间的任务,等了几个小时离完成只剩几秒钟时网络中断了,重连后一切等待付诸东流的狗血剧情?

screen 是一款基于会话的多窗体复用终端工具。用户可以创建若干个会话(session),每个会话又可以创建多个窗体,窗体可以在后台运行又可以部分地放在前台上下左右分屏显示。使用它可以解决你的烦恼,远程连上服务器执行命令后随便断开终端,关电脑潇洒走人让程序自己跑即可。过段时间远程连上服务器附着终端(attach),瞄上两眼。

![](https://file.mculoop.com/images/2022/04/72b05e8fa87bddae.jpg)

<!--more-->



## 会话管理

### 会话状态

Attached(被附着,即有用户进入会话)
Detached(分离状态,即没有用户进入该会话)



### 创建会话

1、创建自动命名的会话

```
screen
```

2、创建一个命名的会话

```
screen -S <name>
```

会话可以重名,会以不同的 PID 被区分(PID.name)

3、创建一个命名的会话或附着到已存在会话(推荐)

```
screen -R <name>
```

不同于 -S,-R 会判断指定名字的会话是否已存在,若存在则直接附着。



### 分离会话

在 screen 终端里按下 `Ctrl+a` `d` 键,此时回到父终端,screen 终端将继续运行。

**查看会话**

```
screen -ls
```

**附着会话**

```
screen -r <pid/name>
```

附着一个会话,如果已经被附着则会提示已被占用。

也可以用 -R <name> 附着,不可以用 pid,会被当成 name 处理。

**同步附着会话**

```
screen -x <pid/name>
```

用 -x 替换 -r 可好玩儿了,已被附着的会话也可以被附着,而且任意操作都会反应到其他用户。这简直就是终端界的“远程桌面”了。



### 结束会话

1、在会话里结束会话

(1) 退出命令

```
exit
```
终端结束后会回到父终端

(2) 快捷键
`Ctrl+a` `k`

2、不附着会话的情况下结束会话

```
screen <-R/-S/-r> <pid/name> -X quit
```

-R、-S、-r 三者任意一个就可以



## 窗体操作

在一个会话中通过快捷键可以创建多个窗体。可以只显示一个窗体,也可以将显示屏分成上下左右多个区域来显示窗体。

`Ctrl+a` `c` 创建一个窗体,会自动打开 shell
`Ctrl+a` `"` 列出所有窗体,然后可以通过方向键或数字键选择显示指定窗体
`Ctrl+a` `0` 输入一个数字,显示该编号的窗体
`Ctrl+a` `n` 切换到下一个窗体
`Ctrl+a` `p` 切换到上一个窗体
`Ctrl+a` `A` 重命名当前窗体(注意,大写字母需要使用组合键 `Shift + a`)



## 显示区操作

显示区并不是窗体,而是供窗体显示的区域,同一个窗体可以显示在不同的分区

`Ctrl+a` `S` 将当前显示区(region)分为上下两个区
`Ctrl+a` `|` 将当前显示区(region)分为左右两个区(注意,是竖线,不是 I 或 l)
`Ctrl+a` `Tab` 将焦点切换到下一个显示区
`Ctrl+a` `X` 关闭当前区域
`Ctrl+a` `Q` 关闭除当前区域外的所有显示区

显示区的大小是可以根据需要调整的,这里就不细说了。



## 其他快捷键

`Ctrl+a` `?` 显示帮助信息


页: [1]
查看完整版本: screen——基于会话的多窗体复用终端