Linux中screen命令详解

2023-12-29 00:41:50

目录

参考链接

背景

什么是screen命令?

默认窗口

screen会话

子窗口window

特点

会话恢复

多窗口

会话共享

面向screen级别的命令

创建一个screen任务

查看screen任务

将screen任务放到后台

进入screen任务

删除screen任务

面向子窗口切换的快捷键

新建子窗口:

查询当前的子界面状态:

切换子窗口:

锁定当前窗口:

关闭当前窗口:

暂离当前screen:

杀死当前窗口:


参考链接

?screen命令-CSDN博客

远程神器 screen命令的保姆级详解教程+举例_screen 默认上下滚动,滚动历史记录-CSDN博客

背景

系统管理员经常需要SSH或者telent远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。
screen命令可以很好的解决这个问题。实现在断开SSH的情况下,在服务器上继续执行程序。

一般情况下,只要没有人去kill你的screen任务进程,服务器也没有关机或重启操作,screen任务都会平稳运行。

screen的使用实现了长耗时任务的无人值守,解放了操作者的双手,节省了时间,是IT民工必备的技能之一。

什么是screen命令?

Screen被称之为一个全屏窗口管理器, 用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。
注意有会话(session)和窗口(window)两个概念。?进入screen会话后,可在会话中创建多个窗口(window)。

需要明确三个窗口的概念。

默认窗口

所谓默认窗口就是我们没有用screen命令时的那个干干净净的窗口,不能使用等会介绍的screen命令下的任何快捷键。

screen会话

screen会话就是当我们进入screen空间下的,占用了一个进程pid的一个界面。这个界面有他自己的名字,有他自己内部交互的快捷键,能够拥有很多不同的子终端的界面。也可以理解成独立于默认窗口之外的窗口。注意,是每一个screen会话都能拥有很多的子窗口,而我们的电脑能同时拥有很多不同的screen会话。

子窗口window

每一个子窗口都是附属与一个screen会话下的,他们互不影响,能够分别执行不同的命令,这是整个screen命令的精华所在。对窗口进行管理,管理命令以ctrl + a开头。 工作时,我们需要做的就是选定某一个screen会话,并且选定一个子窗口。这样如果我们需要换一个界面的话,我们就只需要更换另一个子窗口就行了。

特点

会话恢复

只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令dettach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。

多窗口

在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。

会话共享

Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

面向screen级别的命令

创建一个screen任务

方式一: 创建有名字的screen任务

screen -S {task_name}

方式二: 创建没有名字的screen任务

screen

执行完上述命令后,其实就进入了screen的shell环境,此时执行的操作,都是放在screen里的

查看screen任务

执行-ls?可以查看到系统中所有的screen任务的信息(如pid)

screen -ls

如下的1614717就是screen任务的pid

(base) dwl@baode:~$ screen -ls
There are screens on:
? ? ? ? 1614717.15dwl4 ?(12/27/2023 04:21:28 PM) ? ? ? ?(Attached)
? ? ? ? 1523208.15dwl3 ?(12/27/2023 02:07:45 PM) ? ? ? ?(Attached)
? ? ? ? 1518493.15dwl2 ?(12/27/2023 02:02:42 PM) ? ? ? ?(Attached)
? ? ? ? 788677.15dwl1 ? (12/27/2023 04:45:00 AM) ? ? ? ?(Attached)
4 Sockets in /run/screen/S-dwl.

将screen任务放到后台

快捷键?ctrl+a+d? ???此时,程序仍在后台执行;

另外一种方式:再打开一个终端

screen -d {pid}
或者
screen -d {task_name}

进入screen任务

screen -r {pid}
或者
screen -r {task_name}

删除screen任务

使用?-r进入screen任务之后 输入exit

或者使用命令?screen -X -S {task_name}? quit

面向子窗口切换的快捷键

在一个screen下,我们可以方便的创建多个子窗口,这些窗口之间转换的操作都是通过Ctrl+a再加参数的组合快捷键实现的。

新建子窗口:

可以通过Ctrl+a+c?组合快捷键在当前的screen下创建一个新的子窗口,并跳转到上面去。

查询当前的子界面状态:

可以通过Ctrl+a+w组合快捷键,展示当前会话中的所有窗口,在屏幕的左下角就会出现类似:0-$ bash 1*$ bash之类的样式。这个表示当前screen下有两个子窗口,当前在的是1号子窗口。当然,这个子窗口的数目可以有很多。

切换子窗口:

方法很多,可以通过Ctrl+a+a组合快捷键在最近的两个窗口中切换,也可以用Ctrl+a+n?切换到下一个窗口,或是Ctrl+a+p?切换到上一个窗口,或是Ctrl+a+num?切换到编号为num的窗口。

锁定当前窗口:

可以用Ctrl+a+x?来锁住当前的界面,此时所有的快捷键都无法使用,直到输入了密码。。

关闭当前窗口:

这个可以直接用Ctrl+d?或者exit?来关闭,当这个窗口是现有screen的最后一个窗口时,就会触发上面讲的关闭当前screen的事件了。

暂离当前screen:

这个也是screen命令的精髓,用组合键Ctrl+a+d?就能detached当前的screen,回到默认界面

杀死当前窗口:

使用Ctrl+a+k命令

文章来源:https://blog.csdn.net/weixin_44001371/article/details/135263391
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。