GNU Screen 是一个终端多路复用器(窗口管理器)。顾名思义,Screen 能够在多个交互式 shell 之间复用物理终端,所以咱们能够在每一个终端会话中执行不一样的任务。全部的 Screen 会话都彻底独立地运行程序。所以,即便会话意外关闭或断开链接,在 Screen 会话内运行的程序或进程也将继续运行。例如,当经过 SSH 升级 Ubuntu 服务器时,screen
命令将继续运行升级过程,以防万一 SSH 会话因任何缘由而终止。linux
GNU Screen 容许咱们轻松建立多个 Screen 会话,在不一样会话之间切换,在会话之间复制文本,随时连上或脱离会话等等。它是每一个 Linux 管理员应该在必要时学习和使用的重要命令行工具之一。在本简要指南中,咱们将看到 screen
命令的基本用法以及在 Linux 中的示例。git
GNU Screen 在大多数 Linux 操做系统的默认存储库中均可用。github
要在 Arch Linux 上安装 GNU Screen,请运行:shell
$ sudo pacman -S screen
复制代码
在 Debian、Ubuntu、Linux Mint 上:ubuntu
$ sudo apt-get install screen
复制代码
在 Fedora 上:bash
$ sudo dnf install screen
复制代码
在 RHEL、CentOS 上:服务器
$ sudo yum install screen
复制代码
在 SUSE/openSUSE 上:session
$ sudo zypper install screen
复制代码
让咱们继续看一些 screen
命令示例。工具
在 Screen 中全部命令的默认前缀快捷方式是 Ctrl + a
。使用 Screen 时,你须要常用此快捷方式。因此,要记住这个键盘快捷键。学习
让咱们建立一个新的 Screen 会话并连上它。为此,请在终端中键入如下命令:
screen
复制代码
如今,在此会话中运行任何程序或进程,即便你与此会话断开链接,正在运行的进程或程序也将继续运行。
要从屏幕会话中脱离,请按 Ctrl + a
和 d
。你无需同时按下两个组合键。首先按 Ctrl + a
而后按 d
。从会话中脱离后,你将看到相似下面的输出。
[detached from 29149.pts-0.sk]
复制代码
这里,29149
是 Screen ID,pts-0.sk
是屏幕会话的名称。你可使用 Screen ID 或相应的会话名称来连上、脱离和终止屏幕会话。
你还能够用你选择的任何自定义名称建立一个 Screen 会话,而不是默认用户名,以下所示。
screen -S ostechnix
复制代码
上面的命令将建立一个名为 xxxxx.ostechnix
的新 Screen 会话,并当即连上它。要从当前会话中脱离,请按 Ctrl + a
,而后按 d
。
当你想要查找哪些进程在哪些会话上运行时,命名会话会颇有用。例如,当在会话中设置 LAMP 系统时,你能够简单地将其命名为以下所示。
screen -S lampstack
复制代码
有时,你可能想要建立一个会话,但不但愿自动连上该会话。在这种状况下,运行如下命令来建立名为senthil
的已脱离会话:
screen -S senthil -d -m
复制代码
也能够缩短为:
screen -dmS senthil
复制代码
上面的命令将建立一个名为 senthil
的会话,但不会连上它。
要列出全部正在运行的会话(连上的或脱离的),请运行:
screen -ls
复制代码
示例输出:
There are screens on:
29700.senthil (Detached)
29415.ostechnix (Detached)
29149.pts-0.sk (Detached)
3 Sockets in /run/screens/S-sk.
复制代码
如你所见,我有三个正在运行的会话,而且全部会话都已脱离。
若是你想连上会话,例如 29415.ostechnix
,只需运行:
screen -r 29415.ostechnix
复制代码
或:
screen -r ostechnix
复制代码
或使用 Screen ID:
screen -r 29415
复制代码
要验证咱们是否连上到上述会话,只需列出打开的会话并检查。
screen -ls
复制代码
示例输出:
There are screens on:
29700.senthil (Detached)
29415.ostechnix (Attached)
29149.pts-0.sk (Detached)
3 Sockets in /run/screens/S-sk.
复制代码
如你所见,在上面的输出中,咱们目前已连上到 29415.ostechnix
会话。要退出当前会话,请按 ctrl + a d
。
当咱们运行 screen
命令时,它将为咱们建立一个会话。可是,咱们能够建立嵌套会话(会话内的会话)。
首先,建立一个新会话或连上已打开的会话。而后我将建立一个名为 nested
的新会话。
screen -S nested
复制代码
如今,在会话中按 Ctrl + a
和 c
建立另外一个会话。只需重复此操做便可建立任意数量的嵌套 Screen 会话。每一个会话都将分配一个号码。号码将从 0
开始。
你能够按 Ctrl + n
移动到下一个会话,而后按 Ctrl + p
移动到上一个会话。
如下是管理嵌套会话的重要键盘快捷键列表。
Ctrl + a "
- 列出全部会话Ctrl + a 0
- 切换到会话号 0Ctrl + a n
- 切换到下一个会话Ctrl + a p
- 切换到上一个会话Ctrl + a S
- 将当前区域水平分割为两个区域Ctrl + a l
- 将当前区域垂直分割为两个区域Ctrl + a Q
- 关闭除当前会话以外的全部会话Ctrl + a X
- 关闭当前会话Ctrl + a \
- 终止全部会话并终止 ScreenCtrl + a ?
- 显示键绑定。要退出,请按回车Screen 有一个锁定会话的选项。为此,请按 Ctrl + a
和 x
。 输入你的 Linux 密码以锁定。
Screen used by sk <sk> on ubuntuserver.
Password:
复制代码
你可能但愿记录 Screen 会话中的全部内容。为此,只需按 Ctrl + a
和 H
便可。
或者,你也可使用 -L
参数启动新会话来启用日志记录。
screen -L
复制代码
从如今开始,你在会话中作的全部活动都将记录并存储在 $HOME
目录中名为 screenlog.x
的文件中。这里,x
是一个数字。
你可使用 cat
命令或任何文本查看器查看日志文件的内容。
记录 Screen 会话
若是再也不须要会话,只需杀死它。要杀死名为 senthil
的脱离会话:
screen -r senthil -X quit
复制代码
或:
screen -X -S senthil quit
复制代码
或:
screen -X -S 29415 quit
复制代码
若是没有打开的会话,你将看到如下输出:
$ screen -ls
No Sockets found in /run/screens/S-sk.
复制代码
更多细节请参照 man 手册页:
$ man screen
复制代码
还有一个名为 Tmux 的相似的命令行实用程序,它与 GNU Screen 执行相同的工做。要了解更多信息,请参阅如下指南。
via: www.ostechnix.com/screen-comm…