在服务器运维工作中,我们经常需要执行一些耗时的任务,比如系统升级、大文件传输等。如果是通过SSH连接服务器,一旦网络断开或者需要关闭终端,这些任务就会被中断。而Screen命令就是解决这个问题的完美工具。
什么是Screen?
—
Screen是一个可以在多个虚拟终端之间切换的窗口管理器。它可以:
在单个SSH会话中打开多个终端窗口
断开(detach)终端并在后台继续运行程序
重新连接(attach)到之前的会话
在多个用户之间共享会话
基本用法
—
1. 安装Screen
# Ubuntu/Debian
sudo apt-get install screen
[//]: # (space-10)
# CentOS/RHEL
sudo yum install screen
2. 创建新会话
# 创建一个名为"mysession"的新会话
screen -S mysession
[//]: # (space-10)
# 创建匿名会话
screen
3. 管理会话
# 列出所有会话
screen -ls
[//]: # (space-10)
# 重新连接到指定会话
screen -r mysession
[//]: # (space-10)
# 强制连接(会话被其他用户占用时)
screen -D -r mysession
4. 在会话中操作
最常用的快捷键(按Ctrl+a后再按对应键):
c
: 创建新窗口n
: 切换到下一个窗口p
: 切换到上一个窗口d
: 暂时断开当前会话k
: 杀死当前窗口[
: 进入复制模式]
: 粘贴复制的内容
实用案例
—
案例1:后台运行长时间任务
假设需要压缩一个大文件:
# 创建新会话
screen -S compress
[//]: # (space-10)
# 在screen会话中执行压缩命令
tar -czf big_file.tar.gz /path/to/big_directory
[//]: # (space-10)
# 按Ctrl+a然后按d暂时断开
# 稍后重新连接查看进度
screen -r compress
案例2:多窗口管理
# 创建带多个窗口的工作环境
screen -S work
[//]: # (space-10)
# 按Ctrl+a c创建新窗口
# 窗口1:查看日志
tail -f /var/log/syslog
[//]: # (space-10)
# 按Ctrl+a c创建窗口2
# 窗口2:监控系统资源
top
[//]: # (space-10)
# 按Ctrl+a c创建窗口3
# 窗口3:编辑配置文件
vim /etc/nginx/nginx.conf
案例3:会话共享
# 用户A创建可多人访问的会话
screen -S shared_session -m
[//]: # (space-10)
# 用户B连接到这个会话(只读模式)
screen -x shared_session
进阶配置
—
可以创建~/.screenrc
文件来自定义Screen的行为:
# 显示状态栏
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'
[//]: # (space-10)
# 关闭启动画面
startup_message off
[//]: # (space-10)
# 设置滚动缓冲区大小
defscrollback 10000
使用技巧
—
命名窗口:在screen会话中,使用
Ctrl+a A
可以给当前窗口命名,方便识别。
分割窗口:
Ctrl+a S
:水平分割Ctrl+a |
:垂直分割Ctrl+a Tab
:在分割的区域间切换
批量操作:可以使用
screen -X
向所有会话发送命令:
# 关闭所有会话
screen -X quit
常见问题解决
—
无法重连到会话
# 查看是否有dead会话
screen -ls
# 清理dead会话
screen -wipe
会话共享权限问题
# 修改会话权限
chmod 755 /var/run/screen/S-username/*
总结
—
Screen是一个强大的终端复用工具,掌握它可以:
让长时间任务在后台安全运行
提高多任务管理效率
实现团队协作的终端共享
建议把常用的命令和快捷键记下来,慢慢练习,很快你就能体会到Screen带来的便利。