在管理Linux实例时,您会发现,通过专门设计用于处理系统中特定内容的工具,您的工作会变得更加轻松。例如,如果您需要安装软件包,则可以使用易于使用的软件包管理器。如果需要创建,调整大小或删除文件系统,则可以使用供这类型使用的工具来实现。分别使用systemctl和journalctl命令使用systemd管理服务和浏览日志也是如此。screen工具是另一个这样的例子。您可以直接在命令行界面上运行所有这些工具。但是,如果您要使用SSH远程连接到服务器,有时您需要在操作系统和操作系统之间添加另一层,这样,即使远程连接终止,您正在运行的命令也不会停止。系统管理员这样做是为了防止在出现连接问题时突然终止,而且还故意运行需要无限期在后台运行的命令。
screen介绍及基本使用
screen工具使您可以拥有彼此独立的多个会话(称为screens),并且可以根据需要命名、离开和加入会话。它是远程CLI的多任务处理。您只需运行以下命令即可开始使用它:
$ screen
该命令将创建一个screen并将您连接到该screen:您当前的会话现在是一个screen。您可以运行执行某些操作并且在几秒钟后不会自动终止的任何命令。例如,您可以调用Web应用程序可执行文件或游戏服务器。然后按Ctrl+A,然后紧接着按D键,您将脱离screen,使其在后台运行。
由于Ctrl+A组合是每个screen命令的一部分,因此在文档中通常将其缩写为C-a。然后,可以将先前使用的分离命令简单地描述为C-ad。
1、进入和离开sessions
如果要再次连接到该screen,请运行screen -r,然后将连接到该screen。刚运行的screen将创建一个新screen,随后的screen -r命令将打印出如下内容:
There are several suitable screens on:
5589.pts-0.hostname (Detached)
5536.pts-0.hostname (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
然后,您可以通过运行以下任一命令来选择是恢复创建的第一screen还是第二screen:
$ screen -r 5536
$ screen -r 5589
在这种情况下,添加字符串的其余名称是可选的。
2、命名screens
如果您知道会有多个screen,则可能希望能够使用您选择的名称连接到一个screen。这比从仅反映screen会话的进程ID的数字列表中选择要容易。为此,请使用-S选项,如以下示例所示:
$ screen -S mywebapp
然后,您可以在以后使用以下命令恢复该screen:
$ screen -r mywebapp
3、使用screen在后台启动进程
可选参数是要在创建的会话内执行的命令。例如:
$ screen -S session_name command args
这与运行相同:
$ screen -S session_name
然后在screen会话中运行以下命令:
$ command args
当命令完成执行时,screen会话将终止。
通过传递-dm选项,该选项特别有用,它将在后台启动screen而不附加screen。例如,您可以通过运行以下命令在后台复制一个非常大的文件:
$ screen -S copy -d -m cp /path/to/file /path/to/output
其他screen功能
现在,您已经了解了基础知识,下面我们来看看其他一些最常用的screen功能。
1、在screen上的窗口之间轻松切换
在screen内时,您可以使用C-a c创建一个新窗口。完成此操作后,您可以使用C-a n转到下一个窗口,并使用C-a p转到上一个窗口在窗口之间切换。您可以使用C-a k销毁(杀死)当前窗口。
2、复制和粘贴文字
screen工具还使您可以复制screen上的任何文本,然后将其粘贴到以后您可以键入任何文本的位置。
C-a [键盘绑定可以使您的光标摆脱任何约束,并可以使用键盘上的箭头键将其放到您想要的任何位置。要选择和复制文本,请移至要复制的字符串的开头,然后按键盘上的Enter。然后将光标移至要复制的文本的末尾,然后再次按Enter。
完成此操作后,请使用C-a]将文本粘贴到您的外壳中。或者,您可以打开文本编辑器(如vim或nano),然后将复制的文本粘贴到此处。
有关screen的重要说明
使用此实用程序时,请记住以下其他提示。
1、screen内的特权会话与sudo
如果您需要在screen内运行具有root特权的命令怎么办?您可以运行以下命令之一:
$ screen -S sessionname sudo command
$ sudo screen -S sessionname command
请注意,第二个命令就像运行以下命令:
# screen -S sessionname command
通过这种方式查看事物,使其变得更加明显,同时每个screen都与用户相关联:
1]、第一个创建的screen具有root特权,即使当前用户在该screen内使用sudo -i命令切换到另一个用户或root,也可以由该用户访问。
2]、第二个创建的screen只能由root用户访问,也可以通过具有适当sudo访问权限的用户身份运行sudo screen -r来访问。
2、关于以系统单位显示screen的注意事项
您可能很想在后台运行screen会话,作为启动时执行的systemd单元的一部分,就像任何Unix守护程序一样。这样,您可以恢复screen会话并与您以这种方式运行的内容进行交互。可以,但是您需要考虑到它需要正确的设置。
默认情况下,systemd假定服务要么是oneshot,就是说它们先设置了某项然后关闭,要么是简单的。默认情况下,创建没有类型的单位文件时,服务是简单的。您实际需要做的是将Type设置为forking,这描述了传递-dm选项时screen的实际行为。它启动进程,然后进行分叉,使进程在后台运行,而前台进程关闭。
如果未设置该选项,则systemd会将该screen行为解释为服务退出或失败。这会导致systemd在前台进程退出时杀死后台进程,这不是您想要的。
相关主题