概述
在 Linux 下,一个常见的问题就是因为网络或者关闭客户端(比如笔记本合上盖子)等原因导致我们 SSH 到远程机器的会话被中断,尤其是跑一个要运行很久的重要命令时,这个感受尤其难受,本文就介绍一个解决这个痛点的命令:screen。
有同学就问了,Tmux 不香吗?大多数情况挺香的,我之前简单写过一个介绍:命令行工具推荐 —— tmux (screen),说了一下 Tmux 比 screen 多了哪些东西,现在我不清楚有没有更强,但是之前至少是多了:
- 分屏
- 配置简单
所以我也用了一段时间,但是事情并不总是完美的,我也遇到了问题,那就是在使用某些 IDE 的 Terminal 的时候,或者使用某些 Terminal 工具的时候,Tmux 和 Terminal 的快捷键冲突了,导致操作很尴尬,这也不是最难受的问题;一个更难受的问题是忘记哪个 Terminal 了,和 Tmux 是不兼容的,你分是分不了屏的,所以后面我就没用了。不过确实,分屏这个 feature 大多数 Terminal 也能承载,不过就是 Tmux 自带会话保持分屏这个比较好,但是在大多数情况下,简单的 screen 也够用了,所以这里还是介绍 screen。
语法
screen 没啥复杂的语法,查看参数列表即可了解大体功能,分别是:
[root@liqiang.io]# screen -h
Use: screen [-opts] [cmd [args]]
or: screen -r [host.tty]
Options:
-4 只解析 hostname 的 ipv4 地址
-6 只解析 hostname 的 ipv6 地址
-a 将每个窗口的宽高调整为对应窗口的大小
-A -[r|R] 将所有的窗口都调整到当前展示窗口的宽和高(session 自带宽高管理?)
-c file 使用自定义配置文件(默认的是 .screenrc)
-d (-r) 脱离当前 session 并且进入另外一个 session(当前的 session 不退出)
-dmS name 在后台运行一个指定名称的 screen
-D (-r) 关闭当前 session 并且进入另外一个 session(当前的 session 退出)
-D -RR 关闭当前 session 并且切换到一个新的 session,如果新 session 不存在,创建一个
-e xy 修改命令字符(这个没试过)
-h lines 设置历史记录滚动 buff 的大小
-i Interrupt output sooner when flow control is on.
-l Login mode on (update /var/run/utmp), -ln = off.
-ls [match] or
-list 查看当前系统中有哪些 session(常用)
-r [session] 回到之前推出的 session 中(常用)
-R 回到之前推出的 session 中,如果指定 session 不存在就创建一个
-S sockname 命名当前 session
-t title 设置窗口名称
-U 设置 UTF-8 编码
-x 切换到一个 session,如果这个新的 session 有其他用户在,不要踢除他们,保持大家同时在线(大家看到的东西是一样的,适合一起敲命令double check)
-X 以指定的命令运行 session
常用操作
[root@liqiang.io]# screen -S <session-name> -> 创建一个名为 <session-name> 的 session
[root@liqiang.io]# screen -ls -> 查看当前所有的 session
[root@liqiang.io]# screen -r <session-id> -> 切换到 <session-id> 这个 session
[root@liqiang.io]# screen -d <session-id> -> 离开某个 session(不关闭)
[root@liqiang.io]# screen -d -r <session-id> -> 离开当前 session 并切换到到 session-id 这个 session