linux 远程会话管理 screen

85 阅读3分钟

介绍

在日常开发和服务器管理工作中,通过 SSH 连接到远程服务器时,通常需要同时执行多个任务在后台运行。Linux 的 screen 就是用来方便管理多个命令行会话的工具。

screen的功能大体有三个:

  • 会话恢复:只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
  • 多窗口:在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。
  • 会话共享:Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

安装

Ubuntu/Debian 系统

sudo apt update
sudo apt install screen

CentOS/RHEL 系统

sudo yum install screen

使用

  • 详细使用参照linux man手册。
  • 同时可以screen -help 查看指令含义。
  • 下面列出日常使用的命令。

# 创建(如果不存在)或连接名称为test1 的虚拟终端
screen -R test1

# 暂时离开当前会话
Ctrl + A + D

# 查看会话 存在的虚拟终端
screen -ls

# 结束会话  在连接进去虚拟终端后,通过exit 退出且结束当前虚拟终端
exit

# 向虚拟终端test1 发送 ls 指令 , 相当与进入虚拟终端打 ls 指令,方便脚本化
# ​​-X​​:向指定会话发送命令。
# ​stuff​​:向会话的输入缓冲区“注入”字符串(模拟键盘输入)。
screen -S test1 -X stuff "ls\n"

# 共享会话  连接到一个已经存在的screen会话test1,并与该会话中的其他终端进行共享。
# 将与该会话中的其他终端共享屏幕,并能够同时查看和交互操作。
# 这对于多用户协作或同时监视会话很有用
screen -x test1

脚本化启动


# 设置会话名称,例如"ale"
session_name="ale"

# 启动screen ,创建 session_name
# -L: 将虚拟终端的打印记录到日志 screenlog.o (同级文件夹)
# -d​​:以分离模式(Detached)启动会话(不立即进入会话)。
# ​-m​​:强制创建新会话 。
# ​-S $session_name​​:指定会话名称
screen -L -dmS $session_name 

# 让虚拟终端运行脚本 "gdb ./test_main \n"
sudo screen -S  $session_name  -X stuff "gdb -ex run --args ./test_main -i args > temp.log\n" 

参考链接

screen使用手册 : www.man7.org/linux/man-p…