作为Linux用户,可能经常需要处理长时间运行的任务,例如下载或复制大文件、执行耗时的数据库查询等。有时候,这些重要任务会由于会话超时或其它原因而突然终止。
为了避免这种情况的发生,可以使用screen命令,它是一个全屏软件程序,可用于在多个进程(通常是交互式 shell)之间多路复用物理控制台。它允许用户在单个终端窗口管理器中打开多个独立的终端实例。
如果你从命令行界面处理多个程序并将程序与终端shell分开,则screen应用程序非常有用。它还允许你与其它用户共享会话并分离/附加终端会话。在本文中,小编将简单介绍在Linux系统上安装、配置和使用screen命令。通过还可以通过实际示例了解screen命令的用法和优势。
关于screen命令的安装可以参考:Linux系统使用screen命令管理终端的简单方法介绍。
screen命令语法
screen命令的语法如下
$ screen [OPTIONS] [ CMD [ ARGS ] ]
在上面的语法中,可以看到所有参数都是选项,它们由方括号表示([])
。
1、首次启动screen
只需在命令提示符下键入screen即可,然后screen将显示与命令提示符完全相同的界面,入地at所示:
$ screen
2、显示screen参数
当进入screen时,可以像在正常的命令行环境中一样完成所有工作。但由于screen是一个应用程序,所以它有命令或参数。输入“ Ctrl+A ?” 不带引号。然后将在screen上看到所有命令或参数。
要退出帮助screen,可以按“空格键”按钮或“ Enter ”。(请注意,所有使用“ Ctrl+A ”的快捷方式都没有引号)。
3、列出所有打开的窗口
在上面的示例中,使用screen命令启动了一个新的shell会话。现在使用ctrl+a “组合键列出当前screen会话的所有打开窗口:
在上面的输出中,可以看到窗口的编号和名称。第一列代表窗口编号,它从零开始。下一列代表窗口的名称,其默认格式为<user>@<hostname>:<working-directory>
。
4、终止screen窗口会话
可以使用组合键终止活动窗口会话ctrl+a k
。重要的是要注意,此操作将中断当前虚拟窗口中的命令执行。
在上面的输出中,可以看到screen命令正在等待用户的确认。它在左下角显示警告消息。就像其它Linux命令一样,可以使用它'y'
来继续或'n'
中止操作。
5、使用名称启动screen会话
screen命令允许创建一个具有用户定义名称的会话,这在有多个会话可用时会派上用场。因此,下面使用命令的-S
选项来创建一个命名会话:
$ screen -S demo-screen
在上面的命令中,demo-screen是会话的名称。
6、使用screen分离终端会话
screen命令的优点之一是可以将其分离。然后可以在不丢失screen上所做的任何操作的情况下恢复它。以下示例场景:
您正处于服务器上的SSH会话期间,并且正在使用wget命令为系统下载一个500MB的补丁。
下载过程估计需要2小时,如果断开SSH会话,或者连接突然意外丢失,则下载过程将停止,那么必须从头再来。为避免这种情况,可以使用screen并将其分离。
下面来看看这个命令。首先,必须进入screen。
$ screen
然后可以做下载过程。例如,在Linux Mint系统上,我正在使用apt命令升级我的dpkg包。
$ sudo apt install dpkg
Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be upgraded: dpkg 1 upgraded, 0 newly installed, 0 to remove and 1146 not upgraded. Need to get 2,583 kB of archives. After this operation, 127 kB of additional disk space will be used. Get:1 http://debian.linuxmint.com/latest/ testing/main dpkg i386 1.16.10 [2,583 kB] 47% [1 dpkg 1,625 kB/2,583 kB 47%] 14,7 kB/s
在下载过程中,可以按“ Ctrl+A
d
”。当按下这些按钮时,将看不到任何东西。输出将是这样的:
[detached from 5561.pts-0.mint] pungki@mint ~ $
7、使用screen重新连接终端会话
分离screen后,假设要断开SSH会话并返回主页。在主页面,想要再次通过SSH连接到服务器,并且想要查看刚刚下载过程的进度。这种情况需要恢复screen,这时可以运行此命令:
pungki@mint ~ $ screen -r
你会看到刚刚断开进程仍在运行。
当有超过1个screen会话时,需要键入screen会话ID。可以使用screen -ls查看有多少screen可用。
pungki@mint ~ $ screen -ls
pungki@mint ~ $ screen -ls There are screens on: 7849.pts-0.mint (14/01/2023 01:50:45 PM) (Detached) 5561.pts-0.mint (14/01/2023 11:12:05 AM) (Detached) 2 Sockets in /var/run/screen/S-pungki
如果要恢复screen 7849.pts-0.mint,请键入此命令。
pungki@mint ~ $ screen -r 7849
8、使用多screen终端窗口
当需要超过1个screen来完成工作时,这可能吗?是的。你可以同时运行多个屏幕窗口。有两种方法可以做到这一点。
首先,可以分离第一个屏幕并在真实终端上运行另一个屏幕。其次,需要做一个如下图所示的嵌套屏幕。
要创建新窗口,请使用两次ctrl+a c
组合键来创建两个新窗口。接下来,使用ctrl+a "
组合键列出所有活动窗口:
在上面的输出中,可以看到现在有三个窗口。
9、重命名screen窗口
在前面的示例中,创建了两个新窗口。但是,它们的默认名称并未提供有关它们的任何详细信息。在这种情况下,可以为它们分配一些有意义的名称。
这里可以使用ctrl+a A
组合键来重命名当前窗口会话。此组合键提示用户设置窗口标题:
10、screen终端窗口之间的切换
在前面的示例中,我们已经创建了多个窗口。现在让我们看看如何在它们之间切换。
首先,使用组合键列出所有活动窗口ctrl+a "
。接下来,使用向上或向下箭头键选择适当的窗口,最后按回车键切换到选中的窗口。
在此示例中,小编选择了标题为db-query的窗口。
11、如何移动到下一个screen窗口
可以使用ctrl+a n
组合键移动到下一个窗口。现在用一个例子来理解这一点。
首先,切换到第一个窗口并使用ctrl+a "
组合键进行验证:
现在,让我们按ctrl+a n
两次组合键转到第三个窗口并使用ctrl+a "
组合键进行验证,如下图已经切换到第三个窗口:
12、 如何移动到上一个screen窗口
类似地,可以使用ctrl+a p
组合键切换到上一个窗口。
目前正处于第三个窗口。因此,现在使用ctrl+a p
组合键两次,并且再次验证是否在第一个窗口中:
在上面的输出中,可以看到现在我们已经回到了第一个窗口。
13.、如何在当前窗口和上一个窗口之间切换
有时候,只想在两个窗口之间切换。在这种情况下,可以使用ctrl-a + ctrl-a
组合键。
要理解这一点,首先切换到第一个窗口:
接下来,切换到最后一个窗口:
最后再次使用ctrl-a + ctrl-a
组合键跳转到第一个窗口。
14、如何跳转到特定的screen窗口
在前面的示例中,已经看到了在窗口之间切换的各种方法。然而,有时候想跳转到特定的窗口。在这种情况下,可以使用窗口编号。首先,让我们使用ctrl+a "
组合键查找窗口编号:
在上面的输出中,第一列代表窗口编号。重要的是要注意,screen命令从零开始编号。
现在,使用ctrl+a 2
组合键跳转到第三个窗口并验证是否在正确的窗口中:
15、如何水平分割screen窗口
就像普通终端一样,也可以拆分屏幕窗口。可以使用ctrl+a S
组合键水平分割窗口。
现在,可以使用ctrl+a tab
组合键在区域之间跳转。
最后,可以使用ctrl+a X
组合键来删除当前区域。重要的是要注意,这里必须使用大写的 X 字符。
16、如何垂直分割screen窗口
同样,可以使用ctrl+a |
组合键来垂直分割当前窗口。
除此之外,还可以使用ctrl+a tab
组合键切换和ctrl+a X
关闭当前区域的组合键。
17、在Linux中启用screen记录
有时记录控制台中所做的事情很重要。假设你是管理大量Linux服务器的Linux 管理员。
使用此screen日志记录,这样就无需记下你完成的每条命令。要激活屏幕记录功能,只需按“ Ctrl+A
H
”。(请注意,使用大写字母 ‘ H
‘。使用非大写字母 ‘ h
‘,只会在另一个名为hardcopy的文件中创建屏幕截图)。
在屏幕的左下角,会有一个通知告诉你:正在创建日志文件“ screenlog.0 ”。你会在主目录中找到一个screenlog.0文件。
当在screen窗口中时,此功能将记录你所做的一切。要关闭screen记录日志,可以再次按“ Ctrl+A
H
”。
另一种激活日志记录功能的方法,可以在第一次运行屏幕时添加参数“-L
”,具体命令如下:
pungki@mint ~ $ screen -L
18、锁定Linux终端screen
screen还具有锁定屏幕的快捷方式。可以按“ Ctrl+A x
”快捷键锁定屏幕。如果想快速锁定屏幕,这会很方便。以下是按下快捷方式后锁定屏幕的示例输出。
Screen used by Pungki Arianto on mint. Password:
这时候可以使用Linux用户密码来解锁它。
19、将密码添加到screen会话
出于安全原因,你可能希望将密码放入screen会话。每当想重新连接屏幕时,系统都会提示输入密码。此密码与上述锁屏机制不同。
要设置保护屏幕密码,可以编辑“ $HOME/.screenrc ”文件。如果该文件不存在,可以手动创建它,具体语法如下:
password crypt_password
要创建上面的“ crypt_password ”,可以在Linux上使用“mkpasswd”命令。以下是密码为“ pungki123 ”的命令。
pungki@mint ~ $ mkpasswd pungki123 l2BIBzvIeQNOs
mkpasswd将生成一个哈希密码,如上所示。获得哈希密码后,可以将其复制到“ .screenrc ”文件中并保存。所以“ .screenrc ”文件将是这样的。
password l2BIBzvIeQNOs
下次运行屏幕并分离它时,当尝试重新附加它时会询问密码,如下所示:
pungki@mint ~ $ screen -r 5741 Screen password:
输入密码,即“ pungki123 ”,屏幕将再次重新连接。
执行完这个屏幕密码后按“ Ctrl-A x
”,输出结果如下。
Screen used by Pungki Arianto on mint. Password: Screen password:
这时候向你询问密码两次。第一个密码是Linux用户密码,第二个密码是在.screenrc文件中设置的密码,注意二者的区别。
20、离开screen终端会话
有两种方式离开screen。首先,可以使用“ Ctrl+A d
”来分离屏幕。其次,可以使用exit命令来终止屏幕。也可以使用“ Ctrl+ A K
来结束屏幕。
screen命令汇总
命令 | 描述 |
---|---|
screen -S <session_name> |
使用会话名称启动新会话。 |
screen -ls |
列出正在运行的会话/屏幕。 |
screen -x |
附加到正在运行的会话。 |
screen -r <session_name> |
使用名称附加到正在运行的会话。 |
screen -d <session_name> |
分离正在运行的会话。 |
Ctrl+a c |
创建新窗口。 |
Ctrl+a Ctrl+a |
更改为上次访问的活动窗口。 |
Ctrl+a <number> |
按编号更改为窗口。 |
Ctrl+a ' <number or title> |
按编号或名称更改为窗口。 |
Ctrl+a n 或 Ctrl+a <space> |
切换到列表中的下一个窗口。 |
Ctrl+a p 或 Ctrl+a <backspace> |
切换到列表中的上一个窗口。 |
Ctrl+a " |
请参阅窗口列表。 |
Ctrl+a w |
显示窗口栏。 |
Ctrl+a k |
杀死当前窗口。 |
Ctrl+a \ |
杀死所有窗口。 |
Ctrl+a A |
重命名当前窗口。 |
Ctrl+a S |
水平分割显示。 |
Ctrl+a | 或 Ctrl+a V |
垂直分割显示。 |
Ctrl+a tab |
跳转到下一个显示区域。 |
Ctrl+a X |
删除当前区域。 |
Ctrl+a Q |
删除除当前区域以外的所有区域。 |
Ctrl+a H |
在屏幕会话中启用日志记录。 |
Ctrl+a x |
锁定(密码保护)显示。 |
总结
以上就是整理一些日常使用的screen命令。screen命令里面还有很多功能。您可以查看screen手册页以获取更多详细信息。最后希望以上内容更够帮助大家更好的使用screen命来管理Linux服务器。