概述#
screen 是一个强大的终端多路复用器,允许你在一个物理终端上运行多个全屏窗格(虚拟终端)。这是特别有用的工具,尤其是在需要长期运行进程或者在远程会话中保持会话不被断开的情况下。screen 可以让开启的应用程序在后台运行。
安装#
linux 下安装
sudo apt install screen
mac 下安装
brew install screen
参数#
选项 | 描述 |
---|---|
-4 | 仅将主机名解析为 IPv4 地址。 |
-6 | 仅将主机名解析为 IPv6 地址。 |
-A -[r|R] | 适应所有窗口以适应新的显示宽度和高度。 |
-c file | 读取配置文件而不是 '.screenrc'。 |
-d (-r) | 分离正在运行的 screen(并在此处重新连接)。 |
-dmS name | 以守护进程模式启动:在分离模式下进行 screen 会话。 |
-D (-r) | 分离并登出远程连接(并在此处重新连接)。 |
-D -RR | 执行所需的操作以获取 screen 会话。 |
-f | 开启流量控制,-fn = 关闭,-fa = 自动。 |
-h lines | 设置滚动历史缓冲区的大小。 |
-i | 当流量控制开启时,更早地中断输出。 |
-l | 开启登录模式(更新 /var/run/utmp),-ln = 关闭。 |
-ls [match] | 什么都不做,只列出我们的 SockDir [在可能的匹配上]。 |
-L | 打开输出日志。 |
-Logfile file | 设置日志文件名称。 |
-m | 忽略 $STY 变量,创建一个新的 screen 会话。 |
-O | 选择最佳输出而不是精确的 vt100 仿真。 |
-p window | 如果存在,预选命名窗口。 |
-q | 安静启动。如果失败则退出并返回非零返回码。 |
-r [session] | 重新连接到分离的 screen 进程。 |
-R | 如果可能,重新连接,否则启动新会话。 |
-s shell | 执行的 shell,而不是 $SHELL。 |
-S sockname | 将此会话命名为<pid>.sockname ,而不是<pid>.<tty>.<host> 。 |
-t title | 设置标题。(窗口的名称)。 |
-U | 告诉 screen 使用 UTF-8 编码。 |
-x | 附加到未分离的 screen。(多显示模式)。 |
-X | 在指定会话中执行<cmd> 作为 screen 命令。 |
案例#
- 启动一个新的 screen 会话
screen
- 给 screen 会话命名,方便会话管理
screen -S <name>
- detached (分离) 正在运行的 screen 会话,放至后台(会话环境中操作)
ctrl + a; d
- 列出正在运行的 screen 会话
screen -ls
- 指定 PID 重新连接到运行的 screen
screen -r <pid>
- 指定名称重新连接到运行的 screen
screen -r <name>
- 锁定 screen 会话
ctrl + a; x
需要输入密码才能打开会话
- 杀死 detached screen 会话
screen -S <name-or-pid> -X kill
- 退出 detached screen 会话
screen -S <name-or-pid> -X quit
常用的一些快捷键#
- 在当前会话中创建一个新窗口
ctrl + a;c
切换窗口
切换到下一个窗口:
ctrl-a;n
切换到上一个窗口:
ctrl-a;p
列出所有窗口:
ctrl-a;w
杀掉窗口
关闭当前窗口:
Ctrl-a;k
重命名窗口
重命名当前窗口:
Ctrl-a;A
分屏显示
水平分屏:
Ctrl-a;S
垂直分屏(较新的 screen 版本支持):
Ctrl-a;|
切换到下一个分屏:
Ctrl-a;TAB
关闭当前分屏:
Ctrl-a;X
实用案例#
远程会话#
如果通过 ssh 远程服务器进行操作,需要保持会话不中断,可以使用 screen:
ssh user@server_ip
screen -S remotesession
在 screen 会话中进行操作,即使网络连接中断,你的会话也会保持运行。重新建立连接后可以重新连接:
ssh user@server_ip
screen -r remotesession
多任务处理#
在同一个 screen 会话中处理多个任务:screen -S multitask
在第一个窗口中运行一个任务,例如监控系统日志:tail -f /var/log/syslog
创建新窗口:Ctrl-a;c
在新窗口中进行其他任务,例如编辑文件:vim /etc/hosts
通过 Ctrl-a;n
和Ctrl-a;p
在两者之间切换。
退出 Screen 会话#
通过exit
或者Ctrl-d
关闭所有窗口后,screen 会话会自动结束。