概述

在 Linux 下,一个常见的问题就是因为网络或者关闭客户端(比如笔记本合上盖子)等原因导致我们 SSH 到远程机器的会话被中断,尤其是跑一个要运行很久的重要命令时,这个感受尤其难受,本文就介绍一个解决这个痛点的命令:screen。

有同学就问了,Tmux 不香吗?大多数情况挺香的,我之前简单写过一个介绍:命令行工具推荐 —— tmux (screen),说了一下 Tmux 比 screen 多了哪些东西,现在我不清楚有没有更强,但是之前至少是多了:

所以我也用了一段时间,但是事情并不总是完美的,我也遇到了问题,那就是在使用某些 IDE 的 Terminal 的时候,或者使用某些 Terminal 工具的时候,Tmux 和 Terminal 的快捷键冲突了,导致操作很尴尬,这也不是最难受的问题;一个更难受的问题是忘记哪个 Terminal 了,和 Tmux 是不兼容的,你分是分不了屏的,所以后面我就没用了。不过确实,分屏这个 feature 大多数 Terminal 也能承载,不过就是 Tmux 自带会话保持分屏这个比较好,但是在大多数情况下,简单的 screen 也够用了,所以这里还是介绍 screen。

语法

screen 没啥复杂的语法,查看参数列表即可了解大体功能,分别是:

  1. [root@liqiang.io]# screen -h
  2. Use: screen [-opts] [cmd [args]]
  3. or: screen -r [host.tty]
  4. Options:
  5. -4 只解析 hostname ipv4 地址
  6. -6 只解析 hostname ipv6 地址
  7. -a 将每个窗口的宽高调整为对应窗口的大小
  8. -A -[r|R] 将所有的窗口都调整到当前展示窗口的宽和高(session 自带宽高管理?)
  9. -c file 使用自定义配置文件(默认的是 .screenrc
  10. -d (-r) 脱离当前 session 并且进入另外一个 session(当前的 session 不退出)
  11. -dmS name 在后台运行一个指定名称的 screen
  12. -D (-r) 关闭当前 session 并且进入另外一个 session(当前的 session 退出)
  13. -D -RR 关闭当前 session 并且切换到一个新的 session,如果新 session 不存在,创建一个
  14. -e xy 修改命令字符(这个没试过)
  15. -h lines 设置历史记录滚动 buff 的大小
  16. -i Interrupt output sooner when flow control is on.
  17. -l Login mode on (update /var/run/utmp), -ln = off.
  18. -ls [match] or
  19. -list 查看当前系统中有哪些 session(常用)
  20. -r [session] 回到之前推出的 session 中(常用)
  21. -R 回到之前推出的 session 中,如果指定 session 不存在就创建一个
  22. -S sockname 命名当前 session
  23. -t title 设置窗口名称
  24. -U 设置 UTF-8 编码
  25. -x 切换到一个 session,如果这个新的 session 有其他用户在,不要踢除他们,保持大家同时在线(大家看到的东西是一样的,适合一起敲命令double check
  26. -X 以指定的命令运行 session

常用操作

  1. [root@liqiang.io]# screen -S <session-name> -> 创建一个名为 <session-name> session
  2. [root@liqiang.io]# screen -ls -> 查看当前所有的 session
  3. [root@liqiang.io]# screen -r <session-id> -> 切换到 <session-id> 这个 session
  4. [root@liqiang.io]# screen -d <session-id> -> 离开某个 session(不关闭)
  5. [root@liqiang.io]# screen -d -r <session-id> -> 离开当前 session 并切换到到 session-id 这个 session