screen教程

文章目录

  • screen是什么
    • [电脑a的xshell连接了一个ssh终端,不管是关掉 xshell正在连接的ssh终端,还是直接关掉电脑a,还是电脑a出现任何的问题,screen都会在服务器上运行吗](#电脑a的xshell连接了一个ssh终端,不管是关掉 xshell正在连接的ssh终端,还是直接关掉电脑a,还是电脑a出现任何的问题,screen都会在服务器上运行吗)
    • 平常在xshell里运行脚本,只要吧xshell链接的终端关了,或者xshell关了,或者电脑a关了,脚本自动就结束了是吧
      • [Xshell 里的那个 ssh 窗口 = 给服务器开的一个"远程黑框框"(终端)](#Xshell 里的那个 ssh 窗口 = 给服务器开的一个“远程黑框框”(终端))
      • [那什么时候关掉 Xshell 还能继续跑?](#那什么时候关掉 Xshell 还能继续跑?)
  • screen功能
  • 安装screen
  • 参数说明
    • [-A 将所有的视窗都调整为目前终端机的大小。](#-A 将所有的视窗都调整为目前终端机的大小。)
    • [-d 将指定的screen作业离线。](#-d 将指定的screen作业离线。)
    • [-h <行数>  指定视窗的缓冲区行数。](#-h <行数>  指定视窗的缓冲区行数。)
    • [-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。](#-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。)
    • [-r <作业名称>  恢复离线的screen作业。](#-r <作业名称>  恢复离线的screen作业。)
    • [-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。](#-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。)
    • [-s  指定建立新视窗时,所要执行的shell。](#-s  指定建立新视窗时,所要执行的shell。)
    • [-S <作业名称>  指定screen作业的名称。](#-S <作业名称>  指定screen作业的名称。)
    • [-v  显示版本信息。](#-v  显示版本信息。)
    • [-x  恢复之前离线的screen作业。和-r类似,但支持多个终端同时"附着"在同一个screen会话上](#-x  恢复之前离线的screen作业。和-r类似,但支持多个终端同时“附着”在同一个screen会话上)
    • [-ls或--list  显示目前所有的screen作业。](#-ls或--list  显示目前所有的screen作业。)
    • [-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。](#-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。)
  • [列出所有screen会话 screen -ls](#列出所有screen会话 screen -ls)
    • [Detached = 后台挂着,人没在看,Attached = 正有人在看(占着)](#Detached = 后台挂着,人没在看,Attached = 正有人在看(占着))
      • [screen -d -r xxx -d, -r都作用在xxx上](#screen -d -r xxx -d, -r都作用在xxx上)
      • [There is a screen on:1502688.myjob (Attached)There is no screen to be resumed.](#There is a screen on:1502688.myjob (Attached)There is no screen to be resumed.)
      • [如果你就是那个正在 Attached 的终端本人,在里面再敲 screen -r myjob,那通常会直接黑屏一下,然后"什么都没发生",因为你已经在那个会话里了。](#如果你就是那个正在 Attached 的终端本人,在里面再敲 screen -r myjob,那通常会直接黑屏一下,然后“什么都没发生”,因为你已经在那个会话里了。)
    • [screen -r 显示attached的screen,或者提示 There is a screen on:xx都表示这个会话正被某个终端占着](#screen -r 显示attached的screen,或者提示 There is a screen on:xx都表示这个会话正被某个终端占着)
  • 新建screen
    • screen
      • [直接screen 会新建一个screen会话,名字时xxx.pts-x.xxxx,分别是screen进程的id,所在终端的名字,主机名](#直接screen 会新建一个screen会话,名字时xxx.pts-x.xxxx,分别是screen进程的id,所在终端的名字,主机名)
    • [screen -S name](#screen -S name)
  • [screen -r 重新连接到 screen 会话](#screen -r 重新连接到 screen 会话)
    • [screen -r](#screen -r)
    • [screen -r 跟「会话名」(你用 -S 起的名字)](#screen -r 跟「会话名」(你用 -S 起的名字))
  • [中止 screen 会话](#中止 screen 会话)
    • [在 screen 里面 结束会话的几种方法](#在 screen 里面 结束会话的几种方法)
      • 只杀当前窗口
        • [Ctrl + d/exit](#Ctrl + d/exit)
        • [Ctrl + a 然后 k](#Ctrl + a 然后 k)
      • [一次性干掉整个 screen 会话:Ctrl + a 然后 \](#一次性干掉整个 screen 会话:Ctrl + a 然后 )
    • [在 screen 外面 结束会话的方法](#在 screen 外面 结束会话的方法)
      • [screen -S xxx -X quit](#screen -S xxx -X quit)
    • 顺带再帮你强调一下"退出"和"离开"的区别
  • [在每个screen session 下,命令都以 ctrl+a开始](#在每个screen session 下,命令都以 ctrl+a开始)
    • [ctrl+a d 暂时离开当前session](#ctrl+a d 暂时离开当前session)
    • [ctrl+a z](#ctrl+a z)
    • 窗口操作
      • [Ctrl+a+w: 展示当前会话中的所有窗口;](#Ctrl+a+w: 展示当前会话中的所有窗口;)
      • [Ctrl+a+c: 创建一个新的窗口,相当于在同一个 screen 里开一个新的终端](#Ctrl+a+c: 创建一个新的窗口,相当于在同一个 screen 里开一个新的终端)
      • [Ctrl+a+n: 切换至下一个窗口;](#Ctrl+a+n: 切换至下一个窗口;)
      • [Ctrl+a+p: 切换至上一个窗口;](#Ctrl+a+p: 切换至上一个窗口;)
      • [Ctrl+a+num: 切换至编号为num的窗口;](#Ctrl+a+num: 切换至编号为num的窗口;)
      • [ctrl+a ctrl+a](#ctrl+a ctrl+a)
      • [Ctrl+a+k: 杀死当前窗口;](#Ctrl+a+k: 杀死当前窗口;)
    • [复制 / 粘贴(copy mode](#复制 / 粘贴(copy mode)

screen是什么

screen = 在服务器上开的"虚拟终端房间"

你可以在这个房间里跑程序,你人走了(ssh 断了 / Xshell 关了 / 电脑关机),房间还在,程序继续跑

和 直接在 Xshell 终端里跑脚本 的区别:

直接跑:终端一关,脚本基本就跟着死

用 screen 跑:终端关了没事,只要 服务器不重启,脚本继续跑

电脑a的xshell连接了一个ssh终端,不管是关掉 xshell正在连接的ssh终端,还是直接关掉电脑a,还是电脑a出现任何的问题,screen都会在服务器上运行吗

只要:服务器那台机器还活着(没重启/没关机),screen 里的东西就会继续跑。

跟你本地电脑 A、Xshell 是否开着,关系不大


平常在xshell里运行脚本,只要吧xshell链接的终端关了,或者xshell关了,或者电脑a关了,脚本自动就结束了是吧

Xshell 里的那个 ssh 窗口 = 给服务器开的一个"远程黑框框"(终端)

那什么时候关掉 Xshell 还能继续跑?

screen功能

screen的功能大体有三个:

  • 会话恢复:只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用------即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen

    -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。

  • 多窗口:在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。

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

一开始看不懂没关系,往下看,都看完回来再看就明白了。

安装screen

shell 复制代码
# 查看时centos还是Ubuntu
cat /etc/os-release

注意:uname -a 看的是"内核",不是发行版

你可能也见过有人让你敲:

uname -a

这个命令看的是 Linux 内核版本,比如:

Linux hostname 3.10.0-1160.el7.x86_64 #1 SMP ... x86_64 x86_64 x86_64 GNU/Linux

它看不出来是 "CentOS / Ubuntu / Debian",只能看出:

Linux:说明是 Linux 内核

3.10.0-1160.el7:内核版本号

参数说明

shell 复制代码
-A  将所有的视窗都调整为目前终端机的大小。
-d     <作业名称>  将指定的screen作业离线。
-h     <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r      <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S    <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或--list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

-A 将所有的视窗都调整为目前终端机的大小。

-d 将指定的screen作业离线。

-h <行数>  指定视窗的缓冲区行数。

-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。

-r <作业名称>  恢复离线的screen作业。

-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。

-s  指定建立新视窗时,所要执行的shell。

-S <作业名称>  指定screen作业的名称。

-v  显示版本信息。

-x  恢复之前离线的screen作业。和-r类似,但支持多个终端同时"附着"在同一个screen会话上


-ls或--list  显示目前所有的screen作业。

-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

列出所有screen会话 screen -ls

Detached = 后台挂着,人没在看,Attached = 正有人在看(占着)

screen -d -r xxx -d, -r都作用在xxx上

There is a screen on:1502688.myjob (Attached)There is no screen to be resumed.

如果你就是那个正在 Attached 的终端本人,在里面再敲 screen -r myjob,那通常会直接黑屏一下,然后"什么都没发生",因为你已经在那个会话里了。

screen -r 显示attached的screen,或者提示 There is a screen on:xx都表示这个会话正被某个终端占着


新建screen

screen

直接screen 会新建一个screen会话,名字时xxx.pts-x.xxxx,分别是screen进程的id,所在终端的名字,主机名





screen -S name


screen -r 重新连接到 screen 会话

screen -r



screen -r 跟「会话名」(你用 -S 起的名字)

##screnn -r 跟「ID」(前面的数字,也就是 PID)

中止 screen 会话

在 screen 里面 结束会话的几种方法

只杀当前窗口

Ctrl + d/exit
Ctrl + a 然后 k

一次性干掉整个 screen 会话:Ctrl + a 然后 \

在 screen 外面 结束会话的方法

screen -S xxx -X quit


顺带再帮你强调一下"退出"和"离开"的区别

在每个screen session 下,命令都以 ctrl+a开始

ctrl+a d 暂时离开当前session

shell 复制代码
ctrl-a d   # detach,暂时离开当前session,
# 当前 screen 会话继续在后台跑
# 你退回到进 screen 前的那个 shell 提示符
# screen 进程还在,所以:
# 里面所有前台/后台的程序都继续跑
# 即使你 logout / Xshell 关掉 / 电脑关机,只要服务器不重启,它们都活着
# 之后可以screen -r 再回去

ctrl+a z

ctrl-a z # 把当前session放到后台执行,用 shell 的 fg 命令则可回去。

窗口操作

Ctrl+a+w: 展示当前会话中的所有窗口;

Ctrl+a+c: 创建一个新的窗口,相当于在同一个 screen 里开一个新的终端

创建新窗口(新的 shell)。

👉 比喻:在同一个 screen 房间里又摆了一台新电脑

Ctrl+a+n: 切换至下一个窗口;

Ctrl+a+p: 切换至上一个窗口;

Ctrl+a+num: 切换至编号为num的窗口;

ctrl+a ctrl+a

Ctrl+a+k: 杀死当前窗口;

复制 / 粘贴(copy mode

https://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html

相关推荐
皇族崛起2 小时前
【3D标注】- Unreal Engine 5.7 与 Python 交互基础
python·3d·ue5
Joren的学习记录2 小时前
【Linux运维进阶知识】Nginx负载均衡
linux·运维·nginx
你想知道什么?2 小时前
Python基础篇(上) 学习笔记
笔记·python·学习
Jtti3 小时前
服务器防御SYN Flood攻击的方法
运维·服务器
2501_941982053 小时前
RPA 的跨平台部署与统一自动化策略
运维·自动化·rpa
b***25113 小时前
电池自动分选机:精密分选保障新能源产业质量核心
运维·自动化·制造
数数科技的数据干货3 小时前
游戏流失分析:一套经实战检验的「流程化操作指南」
大数据·运维·人工智能·游戏
Swizard3 小时前
速度与激情:Android Python + CameraX 零拷贝实时推理指南
android·python·ai·移动开发
一直跑3 小时前
Liunx服务器centos7离线升级内核(Liunx服务器centos7.9离线/升级系统内核)
python
leocoder3 小时前
大模型基础概念入门 + 代码实战(实现一个多轮会话机器人)
前端·人工智能·python