screen 是一个终端复用器,允许用户在单个终端窗口中创建多个虚拟终端会话,并可以在这些会话之间切换、分离和重新连接。这对于长时间运行的任务、远程工作和管理多个任务非常有用。
大多数Linux发行版已经预装了screen。如果没有安装,可以使用以下命令:
sudo apt-get update
sudo apt-get install screen
sudo yum install screen
直接启动一个未命名的screen会话:
screen
启动一个命名会话:
screen -S session_name
在screen会话中,按 Ctrl + a 然后按 d 可以分离当前会话,让它在后台继续运行。
查看当前所有screen会话:
screen -ls
重新连接到指定会话:
screen -r session_name
如果会话处于attached状态,使用:
screen -d -r session_name
| 命令 | 说明 |
|---|---|
screen -S name |
创建名为name的新会话 |
screen -ls |
列出所有会话 |
screen -r name |
重新连接到指定会话 |
screen -d name |
分离指定会话 |
screen -X -S name quit |
结束指定会话 |
在screen会话中,所有快捷键都以 Ctrl + a 开始:
| 快捷键 | 功能 |
|---|---|
| Ctrl + a + c | 创建新窗口 |
| Ctrl + a + n | 切换到下一个窗口 |
| Ctrl + a + p | 切换到上一个窗口 |
| Ctrl + a + 0-9 | 切换到指定编号窗口 |
| Ctrl + a + " | 显示窗口列表 |
| Ctrl + a + k | 关闭当前窗口 |
| Ctrl + a + d | 分离当前会话 |
| Ctrl + a + A | 重命名当前窗口 |
启动一个名为"data_backup"的会话运行备份任务:
# 创建新会话
screen -S data_backup
# 在会话中运行备份命令
tar -czf backup.tar.gz /data/
# 按Ctrl+a然后按d分离会话
# 此时备份任务会在后台继续运行
# 稍后查看进度
screen -r data_backup
在一个screen会话中管理多个任务:
# 启动screen
screen
# 创建三个窗口分别执行不同任务
# 窗口1:监控系统日志
tail -f /var/log/syslog
# 按Ctrl+a然后按c创建新窗口
# 窗口2:编译程序
make
# 再按Ctrl+a然后按c创建新窗口
# 窗口3:执行脚本
./run_script.sh
# 使用Ctrl+a+n在不同窗口间切换
多人协作时共享同一个screen会话:
# 用户A创建可共享的会话
screen -S shared_session -x
# 用户B连接到同一会话
screen -x shared_session
# 两人可以看到相同的屏幕并同时操作
创建 ~/.screenrc 文件来自定义screen行为:
# 显示状态栏
hardstatus on
hardstatus alwayslastline
hardstatus string "%{= kw}%-w%{= BW}%n %t%{-}%+w"
# 设置滚动缓冲区大小
defscrollback 5000
# 禁用启动消息
startup_message off
# 设置退出时是否关闭窗口
autodetach on
使用脚本自动创建和配置screen会话:
#!/bin/bash
SESSION="dev_environment"
# 创建新会话并运行多个命令
screen -dmS $SESSION
screen -S $SESSION -X screen -t "server" ./start_server.sh
screen -S $SESSION -X screen -t "log" tail -f server.log
screen -S $SESSION -X screen -t "shell" bash
echo "开发环境已启动,使用 'screen -r $SESSION' 连接"
如果会话状态为"Attached",先分离再连接:
screen -d session_name
screen -r session_name
确保在退出前正确分离会话(Ctrl+a d),而不是直接关闭终端。
使用 -list 或 -ls 查看所有会话,包括已断开的会话。
虽然screen功能强大,但tmux是另一个流行的终端复用器,提供更现代的界面和功能:
screen -ls 检查会话状态