终端复用


Linux 启明道场.

你是否遇到过 SSH 连接中断,导致所有工作都丢失? 你是否想同时使用多个终端,却又不想打开十几个窗口? 欢迎来到终端复用的世界!


直接开始吧!

screen 是一个能在现有终端中创建虚拟终端的程序。 它有点像浏览器的多个标签页,只不过用在命令行中!

启动 screen 非常简单:

hacker@dojo:~$ screen

就是这么简单! 你现在已经进入了一个 screen 会话。 它看起来和普通终端完全一样,但还藏着许多新功能,等着你去发现。

本挑战已经设置好了:只要启动 screen,就能拿到 flag。 轻松吧!


注意: 使用完命令行后,输入 exit 或按 Ctrl-D 即可退出 screen 会话。 随后 screen 会结束运行,让你回到原来的 shell。

接下来,我们来探索分离会话的妙用!

假设你正通过远程连接处理重要工作,连接却突然断了。 使用普通终端时(在这个好用的道场环境之外),一切都会随之丢失。 有了 screen,你的任务会继续运行,稍后还可以重新连接到会话!

你也可以主动分离会话,本挑战就要这样做。 先按 Ctrl-A,再按 d(取自 detach,即“分离”)。 这样,会话会继续在后台运行,而你会回到普通终端。

hacker@dojo:~$ screen
[正在处理一些工作……]
[先按 Ctrl-A,再按 d]
[detached from 12345.pts-0.hostname]
hacker@dojo:~$ 

要重新连接(reattach),可以使用 -r 参数调用 screen:

hacker@dojo:~$ screen -r

本挑战需要你完成以下步骤:

  1. 启动 screen。
  2. 分离会话。
  3. 运行 /challenge/run(它会悄悄把 flag 发送到已分离的会话中!)
  4. 重新连接会话,领取你的奖励。

小知识: Ctrl-A 是 screen 在默认配置下所有快捷键的前缀键。 所有 screen 功能都通过以 Ctrl-A 开头的按键组合来触发。

提示: 记住:按住 Ctrl,再按 A,然后松开这两个键,再按 d。

提示: 如果看到 [detached from...],就说明你成功了!

来做一回 screen 侦探吧!

如果你经常使用 screen,迟早会同时运行多个会话。 怎样找到你想重新连接的那个会话呢?

我们可以先列出所有会话:

hacker@dojo:~$ screen -ls
There are screens on:
        23847.mysession   (Detached)
        23851.goodwork    (Detached)
        23855.morework    (Detached)
3 Sockets in /run/screen/S-hacker.

会话标识由对应 screen 进程的 PID、一个点和会话名称组成。 要连接到某个特定会话,把它的名称或 PID 作为参数传给 screen -r 即可。

hacker@dojo:~$ screen -r goodwork

本挑战为你创建了三个 screen 会话。 其中一个藏着 flag,另外两个只是诱饵!

你需要逐个查看,直到找到 flag。 尝试下一个会话之前,别忘了先分离当前会话(Ctrl-A d)!

到目前为止,screen 看起来只是一个有点奇怪的“终端里的终端”。 但它能做的远不止这些!

一个 screen 会话中可以包含多个窗口,就像浏览器有多个标签页一样。 用它来组织不同任务非常方便!

这些窗口通过不同快捷键来操作,所有快捷键都以 Ctrl-A 开头:

  • Ctrl-A c - 创建新窗口
  • Ctrl-A n - 下一个窗口
  • Ctrl-A p - 上一个窗口
  • Ctrl-A 0 到 Ctrl-A 9 - 直接跳转到窗口 0–9
  • Ctrl-A " - 打开包含所有窗口的选择菜单

本挑战设置了一个包含两个窗口的 screen 会话:

  • 窗口 0 中有……你得自己切过去看看!
  • 窗口 1 中有一条欢迎消息。

使用 screen -r 连接会话,然后用上面的某个按键组合切换到窗口 1。 去拿 flag 吧!

我们再用 tmux 试试同样的操作吧!

tmux(终端复用器)可以看作 screen 更年轻、更现代的近亲。 它能做同样的事,只是部分按键绑定不同。 最大的区别是什么? tmux 不使用 Ctrl-A,而是使用 Ctrl-B 作为命令前缀键。

因此,要分离 tmux 会话,先按 Ctrl-B,再按 d。

hacker@dojo:~$ tmux
[正在处理一些工作……]
[先按 Ctrl-B,再按 d]
[detached (from session 0)]
hacker@dojo:~$ 

命令也有所不同:

  • tmux ls - 列出会话
  • tmux attach 或 tmux a - 重新连接会话

本挑战需要你:

  1. 启动 tmux。
  2. 分离会话。
  3. 运行 /challenge/run(它会把 flag 发送到已分离的会话中!)
  4. 重新连接会话,领取你的奖励。

来学习如何在 tmux 中切换窗口吧!

和 screen 一样,tmux 也有窗口。 虽然按键组合不同,但概念是一样的:

  • Ctrl-B c - 创建新窗口
  • Ctrl-B n - 下一个窗口
  • Ctrl-B p - 上一个窗口
  • Ctrl-B 0 到 Ctrl-B 9 - 跳转到窗口 0–9
  • Ctrl-B w - 打开直观的窗口选择界面

tmux 会在底部的状态栏中显示窗口,例如:

[0] 0:bash* 1:bash

其中,* 表示当前窗口,每个条目还会显示该窗口创建时要运行的进程。

我们创建了一个包含两个窗口的 tmux 会话:

  • 窗口 0 中有 flag!
  • 窗口 1 中有一条热情的欢迎消息。

去拿 flag 吧!


30天排行榜:

此排行榜反映本模块在道场上线后各挑战的解出情况。

排名 黑客 徽章 得分
暂无解题排行数据 —— 注册账号并完成挑战即可登上榜单!