Linux screen
命令详解与使用指南
在Linux系统中,screen
是允许用户在单个终端会话中运行多个进程,并能在会话之间切换。
适用情况:screen
特别适用于远程登录(如通过SSH)时,确保即使网络连接断开,正在运行的任务也不会中断。本文将详细介绍 screen
的安装、基本用法和常见技巧。
1. 安装 screen
在大多数Linux发行版中,screen
都包含在默认的软件库中。可以通过包管理器安装它:
Debian/Ubuntu
sudo apt-get install screen
Red Hat/CentOS
sudo yum install screen
Fedora
sudo dnf install screen
Arch Linux
sudo pacman -S screen
2. 用法
2.1、screen
创建会话
创建一个具有指定名称的 screen
会话,方便管理和识别,启动后,你会看到一个新的终端会话,并且可以在其中运行任何命令。
screen -S my_session
2.2、离开会话 (Detach状态)
在 screen
会话中,可以使用快捷键 Ctrl+A+D
离开当前会话。分离会话后,可以安全地退出SSH或关闭终端,正在运行的任务不会中断。
2.3、连接会话
2.3.1、连接会话 【Reattach状态的screen】
列出所有会话:screen -ls
输出示例:
There is a screen on:
3969263.fastapi (2024年09月27日 08时43分52秒) (Detached)
1 Socket in /run/screen/S-username.
使用 screen -r
命令重新连接到指定的会话:screen -r 3969263 或者 screen -r fastapi
2.3.2、连接会话状【Attached状态的screen】
screen -D -r your_screen_name # 解释:-D -r 先踢掉前一用户,再登陆
2.4、切换会话
在一个 screen
会话中,可以创建多个窗口,并在它们之间切换:
- 创建新窗口:
Ctrl-a c
- 切换到下一个窗口:
Ctrl-a n
- 切换到上一个窗口:
Ctrl-a p
- 列出所有窗口:
Ctrl-a "
2.5、共享会话
screen
允许多个用户共享一个会话,这对于协作调试和教学非常有用:
-
启动共享会话:
screen -S shared_session
-
启用多用户模式:
Ctrl-a :multiuser on
-
添加用户权限:
Ctrl-a :acladd username
另一个用户可以通过以下命令加入共享会话:
screen -x username/shared_session
2.6、日志记录
screen
可以将会话中的输出记录到文件:
-
启动日志记录:
Ctrl-a H
-
停止日志记录:
Ctrl-a H
日志文件将保存在当前用户的主目录下,默认文件名为 screenlog.0
。
2.7、删除screen
2.7.1、在screen中执行Ctrl+D删除
Ctrl+D # 在当前screen下,输入Ctrl+D,删除该screen
Ctrl+A,Ctrl+D # 在当前screen下,输入先后Ctrl+A,Ctrl+D,退出该screen
2.7.2、未进入screen的执行删除
# 删除指定screen, your_screen_name为待删除的screen name
screen -S your_screen_name -X quit
2.7.3、关闭所有screen
screen -ls | grep Detached | awk '{print $1}' | xargs -I {} screen -X -S {} quit
2.8、判断当前是否在screen下
# 判断当前是否在screen中断下,Ubuntu系统,可以这样:
sudo vim /etc/screenrc
# 文件末尾追加一行即可允许设置screen标题
caption always "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%H %Y/%m/%d "
2.9、快捷键
screen
提供了一系列快捷键,使得在会话中的操作更加便捷:
Ctrl-a c
:创建新窗口Ctrl-a n
:切换到下一个窗口Ctrl-a p
:切换到上一个窗口Ctrl-a d
:分离会话Ctrl-a "
:列出所有窗口Ctrl-a 0-9
:切换到指定编号的窗口Ctrl-a k
:关闭当前窗口Ctrl-a A
:重命名当前窗口
3. 常见问题解决
1)screen -ls 命令无响应,卡死,当输入screen的一些查询命令时,没有响应;
排查后的原因:套接字文件重复
解决办法:手动删除screen套接字文件
每个screen
会话都有一个对应的套接字文件,如果套接字文件损坏或无法访问,也可能导致screen
会话卡住。可以手动删除套接字文件,然后重新创建screen
会话。套接字文件通常位于/var/run/screen/S-用户名/
目录下,找到目标会话的套接字文件后,使用rm
命令删除它。
当遇到screen
命令无响应时,可以按照以下步骤进行排查和解决:
-
检查是否输入被阻止:
- 按下
Ctrl+A
,然后按Q
来检查按键状态。如果~Input
行显示ON
,则输入被阻止。可以尝试解除输入阻止,再次按下Ctrl+A
,然后按Q
来关闭输入阻止。
- 按下
-
检查正在运行的进程:
- 在另一个终端窗口中运行
ps -ef | grep screen
来查找有关screen
会话的进程,检查是否有任何进程阻碍了screen
的正常运行。
- 在另一个终端窗口中运行
-
检查
screen
配置:- 验证
screen
配置是否正确。在~/.screenrc
文件中查找任何错误或异常配置。
- 验证
-
使用
screen -wipe
命令:- 如果
screen
会话卡住,可以尝试使用screen -wipe
命令清除失效的screen
会话。这个命令会扫描所有screen
会话,并将那些无法访问的会话标记为失效,然后清除它们。
- 如果
-
使用
pkill screen
命令:- 如果
screen -wipe
命令不起作用,可以使用pkill screen
命令结束所有screen
进程。这可能会导致所有未保存的数据丢失,因此在执行前请确保已经保存了所有重要数据。
- 如果
-
使用
kill
命令精准打击:- 如果只想结束特定的
screen
会话,可以使用kill
命令。首先,使用ps aux | grep screen
命令查找所有screen
进程,并找到目标会话的PID。然后,使用kill PID
命令结束该进程。
- 如果只想结束特定的
-
手动删除
screen
套接字文件:- 每个
screen
会话都有一个对应的套接字文件,如果套接字文件损坏或无法访问,也可能导致screen
会话卡住。可以手动删除套接字文件,然后重新创建screen
会话。套接字文件通常位于/var/run/screen/S-用户名/
目录下,找到目标会话的套接字文件后,使用rm
命令删除它。
- 每个
-
检查终端连接:
- 确保你的终端连接是稳定的。如果你在远程SSH连接到服务器,请检查网络连接是否稳定。尝试重新连接终端并重新运行
screen
命令。
- 确保你的终端连接是稳定的。如果你在远程SSH连接到服务器,请检查网络连接是否稳定。尝试重新连接终端并重新运行
-
使用绝对路径启动
screen
命令:- 使用绝对路径而不是相对路径来启动
screen
命令,例如使用/usr/bin/screen
而不是仅仅screen
。这可以避免由于环境变量或PATH设置不当导致的问题。
- 使用绝对路径而不是相对路径来启动
-
检查环境变量:
- 确保你的环境变量设置正确。特别是
TERM
环境变量,它应该设置为一个有效的终端类型,如xterm
、vt100
等。你可以使用echo $TERM
命令来检查当前的终端类型。
- 确保你的环境变量设置正确。特别是
-
查看系统日志:
- 检查系统日志(如
/var/log/syslog
或/var/log/messages
)以获取有关screen
会话终止的更多信息。这可能会帮助你找到问题的根本原因。
- 检查系统日志(如
通过以上步骤,你应该能够排查并解决screen
命令无响应的问题。