screen命令
screen
是一个强大的终端多路复用器,允许你在单个终端会话中运行多个进程,并且可以在断开连接后重新连接,非常适合远程工作。以下是 screen
命令的详细说明:
一、基本概念
- 会话 (Session): 一个
screen
实例,可以包含多个窗口。 - 窗口 (Window): 一个会话中的独立终端环境,每个窗口运行一个命令。
- 分离 (Detach): 断开与当前
screen
会话的连接,但会话仍在后台运行。 - 重连 (Attach): 重新连接到一个已分离的
screen
会话。
二、启动 Screen
命令 | 说明 |
---|---|
screen | 启动一个新的 screen 会话,使用默认名称。 |
screen -S <会话名> | 启动一个命名的 screen 会话。例如:screen -S mysession |
screen -dmS <会话名> <命令> | 启动一个分离的 screen 会话,并立即在其中运行指定的命令。例如:screen -dmS backup tar -czf backup.tar.gz /data |
三、Screen 内部命令(在 screen 会话中使用)
所有内部命令都以 Ctrl + a
开头,然后按相应的键。
命令 (按 Ctrl + a 后) | 说明 |
---|---|
c | 创建一个新的窗口。 |
n | 切换到下一个窗口。 |
p | 切换到上一个窗口。 |
<数字> | 切换到指定编号的窗口(例如 0 , 1 , 2 ...)。 |
" | 列出所有窗口,可选择切换。 |
w | 显示所有窗口的列表(在状态栏)。 |
k | 杀死当前窗口(相当于 exit )。 |
d | 分离 (Detach) 当前 screen 会话,回到原始 shell。 |
D | 分离并退出 screen 会话。 |
A | 重命名当前窗口。 |
S | 水平分割当前区域。 |
` | 或 V` |
tab | 在分割的区域间切换。 |
x | 锁定屏幕(需要输入密码解锁)。 |
? | 显示帮助信息(所有可用命令)。 |
[ | 进入复制/滚动模式。 |
] | 粘贴之前复制的内容。 |
: | 进入命令行模式,可以输入更复杂的 screen 命令。 |
四、管理 Screen 会话(在普通 shell 中使用)
命令 | 说明 |
---|---|
screen -ls 或 screen -list | 列出所有正在运行(或分离)的 screen 会话。 |
screen -r <会话ID或会话名> | 重新连接 (Attach) 到一个已分离的会话。例如:screen -r 12345.mysession 或 screen -r mysession |
screen -r <会话ID> | 如果会话正在被其他终端占用,尝试连接。 |
screen -x <会话名> | 多路复用 (Attach) 到一个会话,允许多个用户/终端同时查看同一个会话(非常适合协作)。 |
screen -R <会话名> | 如果会话存在则重新连接,如果不存在则创建一个新的。 |
screen -d -r <会话名> | 先分离(detach)该会话(如果它被其他地方连接着),然后重新连接。 |
screen -S <旧会话名> -X quit | 终止指定名称的 screen 会话。 |
screen -S <会话名> -X screen <命令> | 在指定的 screen 会话中创建一个新窗口并运行命令。 |
screen -S <会话名> -p <窗口号> -X kill | 杀死指定会话中的指定窗口。 |
五、配置文件
screen
的配置文件是 ~/.screenrc
。你可以在这里设置默认行为。
常用配置示例 (~/.screenrc
):
Bash
深色版本
# 设置状态栏(硬状态线)
hardstatus alwayslastline "%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]"# 启用256色
term screen-256color# 设置默认 shell
shell /bin/bash# 启用滚动历史记录
defscrollback 5000# 设置窗口标题自动更新
autodetach on
六、实用技巧
- 防止会话意外终止: 使用
screen -S <name>
命名会话,便于管理和识别。 - 后台运行长时间任务:
screen -dmS <name> <command>
可以在后台启动任务,无需保持终端打开。 - 协作: 使用
screen -x <session>
可以让多个人同时看到同一个终端会话,进行协作调试或教学。 - 恢复会话: 即使网络中断,只要服务器没关,
screen
会话就在,用screen -r
就能恢复工作。 - 复制模式: 按
Ctrl + a [
进入复制模式,用方向键或Page Up/Down
滚动,按Space
开始选择,按Enter
结束选择并复制。然后按Ctrl + a ]
粘贴。
七、注意事项
screen
需要安装,通常在 Linux 发行版中可以通过包管理器安装(如apt install screen
或yum install screen
)。- 窗口编号从 0 开始。
- 分离 (
detach
) 后,screen
会话在后台继续运行,进程不会被SIGHUP
信号终止。 - 如果一个会话被多个地方连接(
attach
),其中一个执行detach
(Ctrl + a d
),其他连接不受影响。
掌握 screen
可以极大提高你在命令行环境下的工作效率,尤其是在管理远程服务器时。