> ## Documentation Index
> Fetch the complete documentation index at: https://support.labex.io/llms.txt
> Use this file to discover all available pages before exploring further.

# LabEx VM 终端界面

> LabEx 终端界面提供了一个轻量级的、基于浏览器的命令行环境，由 TTYD 提供支持。它基于 Ubuntu 22.04 构建，提供了一个简化的命令行操作和基于文本的任务界面。

## 终端预览

<img src="https://mintcdn.com/huhuhang/q4ekfuwM7mDVAiiH/images/terminal.png?fit=max&auto=format&n=q4ekfuwM7mDVAiiH&q=85&s=2ec4396dab3d6df8b4adce3498c1ad59" alt="Terminal Preview" width="1112" height="404" data-path="images/terminal.png" />

终端环境特别适用于：

1. 以命令行操作为重点的任务
2. 服务器管理和系统配置
3. 基于文本的编程和调试
4. 在不需要 GUI 时，高效利用资源的远程访问

## 访问终端

1. 如果讲师建议默认使用终端环境进行 Lab，您将在启动时看到终端环境。
2. 您可以通过点击界面顶部的 + 按钮来创建额外的终端会话。

<img src="https://mintcdn.com/huhuhang/lbTGZZG7azHYkwfT/images/screenshot-20241022-CsiJ0RAS@2x.png?fit=max&auto=format&n=lbTGZZG7azHYkwfT&q=85&s=58d906aab3488a173fc84b234470f348" alt="Terminal Tabs" width="1408" height="392" data-path="images/screenshot-20241022-CsiJ0RAS@2x.png" />

## 环境特性

终端界面提供了几个关键特性：

1. 多个终端会话：
   * 使用 + 按钮创建新会话
   * 使用标签在会话之间切换
   * 根据需要单独关闭会话

2. 完整的 Ubuntu 环境：
   * 基于 Ubuntu 22.04 LTS
   * 访问标准的 Ubuntu 存储库
   * 支持常见的命令行工具和实用程序

3. 基于文本的工具：
   * Vim/Nano 文本编辑器
   * 命令行编译器和解释器
   * 通过 apt 进行包管理
   * Git 用于版本控制

## TTYD 特性

终端界面由 [TTYD](https://github.com/tsl0922/ttyd) (Terminal Over HTTP) 提供支持，并提供了一些高级特性：

**使用 tmux 命令：**

```bash theme={null}
# 创建分割
tmux split-window -h     # 水平分割
tmux split-window -v     # 垂直分割
tmux split-window -hf    # 全高垂直分割
tmux split-window -vf    # 全宽水平分割

# 在窗格之间导航
tmux select-pane -L      # 移动到左侧窗格
tmux select-pane -R      # 移动到右侧窗格
tmux select-pane -U      # 移动到上方窗格
tmux select-pane -D      # 移动到下方窗格

# 调整窗格大小
tmux resize-pane -L 10   # 向左调整 10 个单元格
tmux resize-pane -R 10   # 向右调整 10 个单元格
tmux resize-pane -U 5    # 向上调整 5 个单元格
tmux resize-pane -D 5    # 向下调整 5 个单元格

# 其他操作
tmux kill-pane          # 关闭当前窗格
tmux select-layout tiled # 平衡窗格大小
```

<img src="https://mintcdn.com/huhuhang/q4ekfuwM7mDVAiiH/images/screenshot-20241022-Re5eBNxa@2x.png?fit=max&auto=format&n=q4ekfuwM7mDVAiiH&q=85&s=2f701d9d389320407a15249bcd6a0010" alt="Terminal Split Screen" width="688" height="342" data-path="images/screenshot-20241022-Re5eBNxa@2x.png" />

### 在 tmux 中滚动

在 tmux 中，**鼠标滚轮滚动与常规的拖选复制无法在同一模式下并存**。终端要么把滚轮交给 tmux（用于滚动历史缓冲），要么把鼠标事件留给浏览器（用于高亮与复制），同一种手势不能同时兼得两种体验。

LabEx 默认关闭鼠标支持，以便您在浏览器里按习惯选择并复制。若开启鼠标模式，滚轮会在 tmux 内滚动，但常规的拖选复制将不可用，直到您再次更改设置。

**仅当前会话临时启用鼠标滚动：**

```bash theme={null}
tmux set -g mouse on
```

**为之后所有会话永久启用鼠标滚动：**

```bash theme={null}
echo 'set -g mouse on' >> ~/.tmux.conf && tmux source-file ~/.tmux.conf
```

**需要再次复制时：**

* 关闭鼠标模式：执行 `tmux set -g mouse off`，或在 `~/.tmux.conf` 中删除或注释 `set -g mouse on` 后执行 `tmux source-file ~/.tmux.conf`。
* 部分客户端可在按住 **Shift** 的同时进行选择以绕过 tmux 的鼠标处理；具体取决于浏览器与 TTYD。要恢复简单的复制方式，关闭鼠标模式最为可靠。

## 使用场景

<AccordionGroup>
  <Accordion title="基本命令行操作" icon="terminal">
    您将使用的常用终端命令：

    ```bash theme={null}
    # 文件和目录操作
    ls -la           # 列出所有文件及其详细信息
    cd /path/to/dir  # 更改目录
    mkdir new-dir    # 创建目录
    rm -rf dir       # 删除目录

    # 系统信息
    uname -a         # 系统信息
    df -h            # 磁盘使用情况
    top              # 进程监视器
    ```
  </Accordion>

  <Accordion title="文本编辑" icon="square-pen">
    您可以使用各种文本编辑器：

    1. Vim:

    ```bash theme={null}
    vim filename.txt  # 在 Vim 中打开/创建文件
    ```

    2. Nano:

    ```bash theme={null}
    nano filename.txt # 在 Nano 中打开/创建文件
    ```

    两个编辑器都已预先安装并可以使用。
  </Accordion>

  <Accordion title="包管理" icon="box">
    安装和管理软件包：

    ```bash theme={null}
    # 更新包列表
    sudo apt update

    # 安装新软件包
    sudo apt install package-name

    # 删除软件包
    sudo apt remove package-name

    # 搜索软件包
    apt search keyword
    ```
  </Accordion>
</AccordionGroup>

## 常见问题解答

<AccordionGroup>
  <Accordion title="如何复制和粘贴文本？" icon="clipboard">
    TTYD 支持几种复制/粘贴方法：

    1. 使用鼠标：
       * 选择要复制的文本
       * 右键单击以粘贴

    2. 使用键盘：
       * 复制：Ctrl+Insert 或 Ctrl+Shift+C
       * 粘贴：Shift+Insert 或 Ctrl+Shift+V

    注意：实际快捷键可能因您的浏览器和操作系统而异。
  </Accordion>

  <Accordion title="我可以从我的本地机器访问文件吗？" icon="upload">
    是的，您可以使用命令行工具传输文件：

    1. 对于文本内容：
       * 直接复制并粘贴到终端中
       * 使用文本编辑器创建和修改文件

    2. 对于二进制文件：
       * 使用 WebIDE 界面进行文件上传/下载
       * 切换到 WebIDE 选项卡进行文件管理操作
             <img src="https://mintcdn.com/huhuhang/q4ekfuwM7mDVAiiH/images/screenshot-20241022-j7Pl3YZQ@2x.png?fit=max&auto=format&n=q4ekfuwM7mDVAiiH&q=85&s=ab2b59536671cb0184c1f57d3a981fec" alt="Upload Files" width="1412" height="1250" data-path="images/screenshot-20241022-j7Pl3YZQ@2x.png" />

    请记住，所有文件都是临时的，将在您的会话结束时丢失。
  </Accordion>

  <Accordion title="如何安装其他软件？" icon="wrench">
    您可以使用 apt 安装软件：

    ```bash theme={null}
    # 更新包列表
    sudo apt update

    # 安装软件
    sudo apt install package-name
    ```

    请注意：

    1. 安装是临时的，将在您的会话结束时重置
    2. 您拥有用于包管理的完整 sudo 权限
    3. 仅安装当前 lab 所需的包
  </Accordion>

  <Accordion title="为什么选择终端界面？" icon="circle-question-mark">
    当以下情况时，终端界面是理想选择：

    1. 您需要一个快速加载的轻量级环境
    2. 您的任务主要基于命令行
    3. 您希望专注于终端命令，而没有 GUI 的干扰
    4. 您正在使用低带宽连接
    5. 您正在完成不需要图形界面的 lab

    如果您需要 GUI 应用程序或高级 IDE 功能，请考虑使用桌面或 WebIDE 界面。
  </Accordion>

  <Accordion title="如果我的终端会话冻结了会发生什么？" icon="wind">
    如果您的终端无响应：

    1. 尝试按 Ctrl+C 中断当前进程
    2. 使用 + 按钮创建一个新的终端会话
    3. 如果需要，刷新浏览器页面以重置所有会话

    请注意，刷新将关闭所有当前的终端会话并重新启动新的会话。
  </Accordion>
</AccordionGroup>
