Linux命令系列(3) —— 单会话多shell命令:screen

发布时间 2023-08-14 16:32:23作者: 苍凉温暖

一. 命令简介

  在使用Linux的时候,有些情况下只能使用单个会话,但是又有多shell的需求;又有一种情况,需要执行一个在会话结束以后依旧需要执行的进程(在Linux系统中,用户通过shell登录后执行的进程都是挂载在当前shell下,作为用户shell的子进程,当用户的shell结束后,下挂的所有进程都会销毁),可以选择命令后缀 & ,这样可以将进程挂载到systemd(系统守护进程)下,但是并不灵活,对于一些需要依旧需要命令行交互的进程,挂载到系统守护进程后,就失去了进程的交互权。
  此时就需要一个功能强大的工具—— screen,模拟shell连接。

二. 安装

绝大多数的Linux发行版都内置了screen工具,部分没有安装的可以直接使用对应系统的包管理工具搜索并安装 screen 工具。

三. 常用命令

1. 查看shell

  • 查看screen版本
    screen -v
    
  • 查看所有创建的screen
    screen -ls
    
    此命令会打印所有创建的shell窗口,shell窗口会有两种状态:Attached(已连接/占用)和 Detached(离线/未占用)。

2. 创建shell

  • 直接创建
    screen
    
    这样会创建一个用户名+随机字符作为名称的shell窗口,并直接进入。并不推荐这样使用。
  • 自定义名称创建
    screen -S text
    
    这样会创建一个名称为test的shell窗口,并直接进入。

3. 离开shell

  • 单shell离开(Attached -> Detached)
    screen -d
    
    此命令会将连接的shell置为离线状态(如果有其他终端用户也共享连接方式进入此shell,也会被踢出)。
  • 多shell离开(Attached -> Detached)
    screen -d name/pid
    
    多shell的情况下,需要指定shell名称或者pid(进程号)来对指定的shell离线处理。
  • 安全退出(Attached -> Attached/Detached)
    使用[Ctrl] + [a] + [d],即可安全退出当前shell(不影响其他终端用户继续使用此shell)。当最后一个用户退出此shell,shell的状态变为Detached。

4. 进入shell

  • 离线状态单shell进入(Detached -> Attached)
    screen -r [name/pid]
    
    当只有一个shell,且状态为Detached时,直接使用 -r 命令即可进入shell。(也可以后缀名称或者进程号)
  • 离线状态多shell进入(Detached -> Attached)
    screen -r name/pid
    
    当有多个shell的时候,就需要指定name或者进程号来进入状态为Detached的shell。
  • 进入已占用状态的单shell(Attached -> Attached)
    screen -x
    
    当shell变成Attached状态时,说明已经有用户进入了此shell,如果也想进入,需要使用 -x 命令。此shell就变为共享shell,所有进入的用户都可以即时的输入和看到输出。
  • 进入已占用状态的多shell(Attached -> Attached)
    screen -r name/pid - x
    
    多shell的情况下,进入Attached状态的shell,需要指定名称或者进程号。

5. 销毁shell

  • shell内命令销毁
    exit
    
    输入命令后,会销毁当前的shell,并将其他用户踢出。
  • shell内快捷键销毁
    使用[Ctrl] + [d],即可销毁当前shell。