【linux经典工具】tmux的好兄弟screen,作为程序员的你值得拥有
引子
从程序员的角度来看,对比tmux , screen 同样是一个极其方便的工具,尤其适合远程开发、后台运行任务、调试长时间运行的脚本等情况。以下是几个实际的例子,展示了 screen 的常用场景和具体用法。
1. 保持远程编译任务不间断
- 场景:假设你通过 SSH 登录到远程服务器上,并开始编译一个大型项目(例如 C++ 项目)。这个编译过程可能会持续很久,而断开连接会导致任务被迫中断。
- 解决方法:使用 screen 来启动编译任务,即使连接中断,编译也会继续。
操作步骤:
#进入服务器后启动一个名为 "build" 的 screen 会话
screen -S build
# 在 screen 会话中运行编译命令
make
# 编译开始后,按下 `Ctrl-a`,然后按 `d`,将当前会话分离
# 可以退出 SSH 连接,编译任务仍然会在后台运行
重新连接会话: 当你下次登录时,可以通过以下命令恢复编译会话,查看编译进度或结果:
screen -r build
2. 调试长时间运行的 Python 脚本
- 场景:你正在远程调试一个复杂的 Python 脚本。该脚本可能运行数小时,过程中你想随时检查输出结果和日志。
- 解决方法:利用 screen 启动 Python 脚本,以便在任意时刻分离会话、重新连接并检查状态。
操作步骤:
# 启动一个名为 "python_debug" 的 screen 会话
screen -S python_debug
# 在 screen 会话中运行 Python 脚本
python my_script.py
# 任务启动后,可以按 `Ctrl-a`,然后按 `d` 进行分离
随时查看日志输出: 重新连接会话后,观察脚本执行状态或调试输
screen -r python_debug
3. 同时管理多个任务
- 场景:你需要在同一台服务器上同时运行多个任务,如下载依赖包、运行数据库查询和调试服务。每个任务可以在一个独立的 screen 窗口中管理。
- 解决方法:在一个 screen 会话中创建多个窗口(每个窗口相当于一个独立的终端)。
操作步骤:
# 启动一个新的 screen 会话
screen -S multi_tasking
# 在第一个窗口中运行下载任务
wget https://example.com/largefile.tar.gz
# 按 `Ctrl-a` 然后按 `c` 创建一个新窗口,运行数据库查询
mysql -u user -p database
# 再次按 `Ctrl-a` + `c` 创建第三个窗口,启动调试
python -m pdb my_script.py
切换窗口:
- 使用 Ctrl-a + n 切换到下一个窗口,或使用 Ctrl-a + p 切换到上一个窗口。
- 使用 Ctrl-a + " 查看所有窗口列表,选择要切换的窗口。
4. 与团队共享会话
- 场景:你在远程协作开发,需要让另一位程序员查看你的终端环境,帮助你一起调试代码。
- 解决方法:在 screen 中启用多用户模式,这样其他用户可以加入你的会话。
操作步骤:
# 启动一个 screen 会话,并启用多用户模式
screen -S shared_debug
# 启用多用户模式(需要 sudo 权限)
sudo chmod +s /usr/bin/screen
screen -S shared_debug
Ctrl-a :multiuser on
# 允许特定用户访问该会话(假设用户名为 "teammate")
Ctrl-a :acladd teammate
团队成员加入会话: 另一位程序员(假设用户名为 “teammate”)可以用以下命令加入共享会话:
screen -x your_username/shared_debug
5. 定期检查日志文件或服务状态
- 场景:你需要持续监控一个日志文件或某个服务的状态,而不想始终保持连接。
- 解决方法:用 screen 启动日志监控,即使断开连接,监控任务也会持续进行。
操作步骤:
# 启动 screen 会话
screen -S log_monitor
# 开始监控日志文件
tail -f /var/log/syslog
# 按 `Ctrl-a` + `d` 分离会话,监控任务仍会继续
恢复会话: 需要查看日志时重新连接即可:
screen -r log_monitor
这些例子展示了 screen 在实际开发中的多种应用场景,它能够帮助程序员更灵活地管理远程任务、进行调试,并保证长时间任务不中断,提高工作效率。
原文地址:https://blog.csdn.net/songguangfan/article/details/143575747
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!