`screen` 是一个强大的终端多路复用器,允许用户在一个终端会话中同时运行和管理多个独立的会话。它特别适用于需要在远程服务器上运行长时间任务的场景,即使网络连接中断,任务仍能继续执行,用户可以随时重新连接并恢复会话。
## 一、`screen` 命令的主要作用
1. **多会话管理**:在一个终端窗口中创建、切换和管理多个独立的会话。
2. **会话持久化**:即使断开连接,`screen` 会话仍在后台运行,用户可以随时重新连接。
3. **任务管理**:方便地启动和管理多个后台任务,如编译、服务器进程等。
4. **共享会话**:多个用户可以共享同一个 `screen` 会话,适用于协作和教学。
## 二、`screen` 的安装
在大多数 Linux 发行版中,`screen` 通常已经预安装。若未安装,可以使用以下命令进行安装:
- **Debian/Ubuntu 系统**:
```bash
sudo apt-get update
sudo apt-get install screen
```
- **CentOS/RHEL 系统**:
```bash
sudo yum install screen
```
- **macOS (使用 Homebrew)**:
```bash
brew install screen
```
## 三、`screen` 的基本用法
### 1. 启动 `screen`
```bash
screen
```
这将启动一个新的 `screen` 会话,并进入该会话的终端环境。
### 2. 分离会话
按下 `Ctrl + A`,然后按 `D` 键,可以将当前会话分离(detach),使其在后台运行。
### 3. 查看当前会话
```bash
screen -ls
```
此命令会列出所有当前运行的 `screen` 会话。
### 4. 重新连接会话
```bash
screen -r [会话ID]
```
其中 `[会话ID]` 可以通过 `screen -ls` 命令查看。例如:
```bash
screen -r 12345.pts-0.hostname
```
### 5. 创建命名会话
为了方便管理,可以为会话指定一个名称:
```bash
screen -S mysession
```
### 6. 终止会话
在 `screen` 会话内,输入 `exit` 或按 `Ctrl + D`,即可终止当前会话。
## 四、`screen` 的高级用法
### 1. 多窗口管理
在一个 `screen` 会话中,可以创建多个窗口,每个窗口都是一个独立的终端。
- **创建新窗口**:按下 `Ctrl + A`,然后按 `C` 键。
- **在窗口之间切换**:
- 下一个窗口:`Ctrl + A`,然后按 `N` 键。
- 上一个窗口:`Ctrl + A`,然后按 `P` 键。
- 直接切换到指定窗口编号:`Ctrl + A`,然后输入窗口编号(如 `0`、`1` 等)。
- **列出所有窗口**:按下 `Ctrl + A`,然后按 `"` 键,出现窗口列表可选择。
### 2. 分屏显示
`screen` 允许在同一个终端窗口中水平或垂直分割屏幕,显示多个子窗口。
- **水平分割**:
```bash
Ctrl + A + S
```
- **垂直分割**(需要 `screen` 支持):
```bash
Ctrl + A + | (可能需要配置或使用新版本的 `screen`)
```
- **在分割的屏幕间切换**:
```bash
Ctrl + A + Tab
```
- **关闭当前分割屏幕**:
```bash
Ctrl + A + X
```
### 3. 滚动缓冲区
在 `screen` 会话中,可以查看之前的输出内容。
- **进入复制模式**:
```bash
Ctrl + A + [
```
- **滚动浏览**:使用箭头键或 `Page Up` / `Page Down`。
- **退出复制模式**:
```bash
Esc
```
### 4. 日志记录
`screen` 可以记录会话的所有输出内容。
- **启动日志记录**:
```bash
Ctrl + A + H
```
记录的日志默认保存在当前目录下,文件名为 `screenlog.0`。
- **停止日志记录**:
再次按下 `Ctrl + A + H`。
### 5. 共享会话
允许多个用户连接到同一个 `screen` 会话,适用于协作和教学。
1. **启动共享会话**:
```bash
screen -S sharedsession
```
2. **允许其他用户连接**:
其他用户使用以下命令连接到该会话:
```bash
screen -x [您的用户名]/sharedsession
```
需要确保文件权限和用户权限配置正确。
## 五、示例说明
### 示例一:在远程服务器上运行长时间任务
1. **连接到远程服务器**:
```bash
ssh user@remote-server
```
2. **启动一个 `screen` 会话**:
```bash
screen -S longtask
```
3. **运行长时间任务**,例如编译程序:
```bash
make
```
4. **分离会话**,让任务在后台继续运行:
```bash
Ctrl + A + D
```
5. **断开连接**,即关闭 SSH 会话。
6. **稍后重新连接并恢复会话**:
```bash
ssh user@remote-server
screen -r longtask
```
### 示例二:在一个 `screen` 会话中运行多个任务
1. **启动 `screen` 会话**:
```bash
screen -S multitask
```
2. **创建第一个窗口并运行任务**:
- 默认在窗口 0 中。
- 例如,启动一个 Python HTTP 服务器:
```bash
python3 -m http.server 8000
```
3. **创建第二个窗口**:
```bash
Ctrl + A + C
```
- 进入新窗口(窗口 1)。
- 运行另一个任务,例如 `top` 实时监控系统资源:
```bash
top
```
4. **在窗口之间切换**:
- 从窗口 0 切换到窗口 1:
```bash
Ctrl + A + N
```
- 或直接切换到指定窗口编号:
```bash
Ctrl + A + 0
Ctrl + A + 1
```
5. **分离会话**,保留所有任务在后台运行:
```bash
Ctrl + A + D
```
6. **重新连接并查看任务状态**:
```bash
screen -r multitask
```
### 示例三:共享 `screen` 会话进行协作
1. **用户 A 启动共享会话**:
```bash
screen -S sharedsession
```
2. **用户 A 授予其他用户访问权限**:
```bash
chmod 770 /var/run/screen/S-$(whoami)
```
需要根据系统配置和安全策略调整权限。
3. **用户 B 连接到共享会话**:
```bash
screen -x userA/sharedsession
```
4. **现在,用户 A 和用户 B 可以在同一个 `screen` 会话中协作操作**。
## 六、常用 `screen` 命令总结
- **启动 `screen`**:
```bash
screen
screen -S session_name
```
- **查看所有会话**:
```bash
screen -ls
```
- **重新连接会话**:
```bash
screen -r [session_id]
```
- **分离会话**:
```bash
Ctrl + A + D
```
- **创建新窗口**:
```bash
Ctrl + A + C
```
- **切换窗口**:
```bash
Ctrl + A + N (下一个)
Ctrl + A + P (上一个)
Ctrl + A + [0-9] (指定窗口)
```
- **进入复制模式**:
```bash
Ctrl + A + [
```
- **启动/停止日志记录**:
```bash
Ctrl + A + H
```
- **退出 `screen` 会话**:
在所有窗口中输入 `exit` 或使用 `Ctrl + D`。
## 七、注意事项
1. **自启动 `screen`**:可以通过在 shell 配置文件(如 `.bashrc`)中添加自动启动 `screen`,但需谨慎操作以避免重复会话。
2. **配置文件**:`screen` 的配置文件通常位于 `~/.screenrc`,可以通过编辑此文件来自定义快捷键、窗口命名等。
3. **安全性**:在共享会话时,确保权限和用户认证配置正确,避免未经授权的访问。
`screen` 是一个功能丰富且灵活的工具,熟练掌握其使用可以大幅提升终端操作的效率和便利性。结合实际需求,多练习和探索其高级功能,将有助于更好地完成各种任务管理和远程操作。
本文暂时没有评论,来添加一个吧(●'◡'●)