目录
远程神器 screen命令的保姆级详解教程+举例_screen 默认上下滚动,滚动历史记录-CSDN博客
系统管理员经常需要SSH或者telent远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。
screen命令可以很好的解决这个问题。实现在断开SSH的情况下,在服务器上继续执行程序。
一般情况下,只要没有人去kill你的screen任务进程,服务器也没有关机或重启操作,screen任务都会平稳运行。
screen的使用实现了长耗时任务的无人值守,解放了操作者的双手,节省了时间,是IT民工必备的技能之一。
Screen被称之为一个全屏窗口管理器, 用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。
注意有会话(session)和窗口(window)两个概念。?进入screen会话后,可在会话中创建多个窗口(window)。
需要明确三个窗口的概念。
所谓默认窗口就是我们没有用screen命令时的那个干干净净的窗口,不能使用等会介绍的screen命令下的任何快捷键。
screen会话就是当我们进入screen空间下的,占用了一个进程pid的一个界面。这个界面有他自己的名字,有他自己内部交互的快捷键,能够拥有很多不同的子终端的界面。也可以理解成独立于默认窗口之外的窗口。注意,是每一个screen会话都能拥有很多的子窗口,而我们的电脑能同时拥有很多不同的screen会话。
每一个子窗口都是附属与一个screen会话下的,他们互不影响,能够分别执行不同的命令,这是整个screen命令的精华所在。对窗口进行管理,管理命令以ctrl + a开头。 工作时,我们需要做的就是选定某一个screen会话,并且选定一个子窗口。这样如果我们需要换一个界面的话,我们就只需要更换另一个子窗口就行了。
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令dettach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。
Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。
方式一: 创建有名字的screen任务
screen -S {task_name}
方式二: 创建没有名字的screen任务
screen
执行完上述命令后,其实就进入了screen的shell环境,此时执行的操作,都是放在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.
快捷键?ctrl+a+d? ???此时,程序仍在后台执行;
另外一种方式:再打开一个终端
screen -d {pid}
或者
screen -d {task_name}
screen -r {pid}
或者
screen -r {task_name}
使用?-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命令的精髓,用组合键Ctrl+a+d
?就能detached当前的screen,回到默认界面。
使用Ctrl+a+k命令