当谈到在Linux终端中管理会话时,screen
是一个非常有用的工具。它允许你在单个终端会话中创建多个虚拟终端,从而可以同时运行多个任务,即使在断开与服务器的连接后也可以保持这些会话。下面是关于screen
命令的详细介绍:
1. 安装和启动screen
: 通常,screen
已经预装在大多数Linux发行版中。如果未安装,你可以使用适用于你的包管理器的命令进行安装。例如,在Debian或Ubuntu上,你可以使用以下命令安装:
sudo apt-get install screen
启动screen
很简单,只需在终端中输入screen
并按Enter键即可启动一个新的会话。
在 CentOS 系统中源码安装操作命令如下:
wget https://ftp.gnu.org/gnu/screen/screen-4.8.0.tar.gz
mkdir build && cd build
../configure
make
make install
2. 基本screen
用法: 在启动screen
后,你将进入一个新的终端会话。在这个会话中,你可以执行所有常规的终端命令。以下是一些常用的screen
命令:
-
分离会话:你可以使用快捷键
Ctrl + A
,然后按d
键,来分离当前的screen
会话,这样你可以暂时离开终端而不中断正在运行的任务。 -
查看会话列表:使用以下命令可以列出所有正在运行的
screen
会话:
screen -ls
或
screen --list
-
重新连接会话:当你重新连接服务器时,可以使用以下命令重新连接到之前分离的
screen
会话:
screen -r <会话ID>
其中<会话ID>
是之前分离会话的ID,你可以从screen -ls
命令中获取。
-
新建窗口:在
screen
会话中,你可以通过按Ctrl + A
,然后按c
键来创建一个新的虚拟终端窗口。 -
切换窗口:使用
Ctrl + A
,然后按n
(下一个窗口)或p
(上一个窗口)来在多个窗口间切换。 -
关闭窗口:在窗口内执行
exit
命令来关闭窗口。
3. 高级screen
用法: 除了基本用法之外,screen
还提供了一些更高级的功能:
-
多窗口滚动:按
Ctrl + A
,然后按Esc
键,即可进入复制模式,然后你可以使用方向键或Vi编辑器风格的快捷键来滚动查看终端输出。 -
窗口命名:你可以为每个
screen
窗口设置自定义名称,这样更容易识别它们。在窗口内,使用Ctrl + A
,然后按A
键来为当前窗口重命名。 -
配置
screen
:screen
可以通过一个配置文件(~/.screenrc
)进行自定义设置,包括定义快捷键、默认窗口、状态栏等等。
4. 退出screen
会话: 要完全退出screen
会话并关闭所有窗口,可以执行以下命令:
exit
如果只想关闭当前窗口,可以使用Ctrl + D
键。
5. 暂时禁用会话: 有时,你可能想临时暂停screen
会话,而不是完全分离它。你可以按Ctrl + A
,然后按z
键来暂时禁用screen
会话。要恢复会话,可以使用fg
命令。
6. 多用户共享会话: screen
支持多用户共享会话的功能。这在团队协作或技术支持方面非常有用。一个用户可以启动一个screen
会话,并允许其他用户加入和参与该会话。其他用户可以使用以下命令加入一个已经运行的会话:
screen -x <会话ID>
7. 设置状态栏: screen
允许你在状态栏中显示有用的信息,如当前时间、主机名、窗口列表等等。你可以编辑~/.screenrc
配置文件来自定义状态栏。例如,要在状态栏中显示窗口号和标题,你可以添加以下行:
hardstatus alwayslastline
hardstatus string '%{= kw}[ %{= kb}%H%{= kw} ][ %{= kw}%?%-Lw%?%{= kW}%n*%f %t%?%?%{= kw}%?%+Lw%?%?%= %{= kw} ][ %{= kc}%Y-%m-%d %c %{= kw}]'
8. screen
命令参数: screen
命令还支持一些有用的参数,可以根据需求使用:
-
-S <会话名称>
:指定会话名称,用于标识和重连。 -
-dmS <会话名称>
:以后台模式启动一个新会话,无需立即连接。 -
-r <会话名称>
:重连到指定名称的会话。
9. screen
快捷键列表: 以下是一些常用的screen
快捷键列表,它们可以在screen
会话中使用:
-
Ctrl + A, c
:创建新窗口 -
Ctrl + A, n
:切换到下一个窗口 -
Ctrl + A, p
:切换到上一个窗口 -
Ctrl + A, A
:为当前窗口重命名 -
Ctrl + A, d
:分离会话 -
Ctrl + A, k
:关闭当前窗口 -
Ctrl + A, [Enter]
:进入复制/滚动模式 -
Ctrl + A, Esc
:进入复制/滚动模式(Vi编辑器风格) -
Ctrl + A, z
:暂时禁用会话 -
Ctrl + A, S
:水平拆分当前窗口 -
Ctrl + A, |
:垂直
拆分当前窗口
-
Ctrl + A, Tab
:在拆分窗口之间切换
screen
是一种非常强大且灵活的工具,特别适合在终端中进行长时间的任务和多任务管理。
补充:
-
Screen 命令的常见用途:
-
多窗口操作:通过 Screen 命令,你可以在同一个终端窗口中创建多个窗口,并在这些窗口中同时运行不同的应用程序,而不需要打开多个终端窗口。
-
多任务操作:在一个窗口中使用 Screen 命令可以实现多任务操作,比如同时运行多个进程或命令等。
-
断线恢复:如果你在使用远程连接时突然断开连接,那么在 Screen 命令下运行的任务仍然可以继续执行,并且在重新连接后可以通过 Screen 命令重新打开之前的会话,恢复之前的工作状态。
-
后台运行:Screen 命令可以将一个命令或脚本放到后台运行,而不需要打开一个新的终端窗口或使用 nohup 命令。
-
共享会话:使用 Screen 命令可以与其他用户共享一个会话,这对于协同工作或者远程技术支持非常有用。
-
screen 创建的虚拟终端,有2种工作状态:
-
Attached:表示当前screen正在作为主终端使用,为活跃状态。
-
Detached:表示当前screen正在后台使用,为非激发状态。
-
screen 命令格式与常见参数:
screen [OPTIONS] [ CMD [ ARGS ] ]
screen -r [[PID.]TTY[.HOST]]
screen -r SESSIONOWNER/[[PID.]TTY[.HOST]]
-A
将所有窗口都调整为目前终端机的大小
-d, -D [PID.TTY.HOST]
分离指定的 screen 会话
-h NUM
将历史记录回滚缓冲区指定为 NUM 行
-m
即使目前处于 screen 会话,仍强制建立新的 screen 会话
-r [PID.TTY.HOST]
-r SESSIONOWNER/[PID.TTY.HOST]
恢复离线的 screen 会话
-R
先试图恢复离线的会话,若找不到离线的会话,再建立新的 screen 会话
-s PROGRAM
指定建立新窗口时所要执行的 Shell,用以取代环境变量 SHELL 表示的 Shell
-S SESSIONNAME
创建一个指定名称的新 session
-v
显示版本信息
-x
恢复之前离线的 screen 会话
-ls, --list
显示目前所有的 screen 会话
-wipe [MATCH]
检查目前所有的 screen 会话,并删除已经无法使用的 screen 会话