> ## 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. 현재 랩에 필요한 패키지만 설치하십시오.
  </Accordion>

  <Accordion title="터미널 인터페이스를 선택하는 이유는 무엇입니까?" icon="circle-question-mark">
    터미널 인터페이스는 다음과 같은 경우에 적합합니다.

    1. 빠르게 로드되는 가벼운 환경이 필요한 경우
    2. 작업이 주로 명령줄 기반인 경우
    3. GUI 방해 없이 터미널 명령에 집중하고 싶은 경우
    4. 대역폭이 낮은 연결로 작업하는 경우
    5. 그래픽 인터페이스가 필요하지 않은 랩을 완료하는 경우

    GUI 응용 프로그램 또는 고급 IDE 기능이 필요한 경우 데스크톱 또는 WebIDE 인터페이스를 사용하는 것을 고려하십시오.
  </Accordion>

  <Accordion title="터미널 세션이 멈추면 어떻게 됩니까?" icon="wind">
    터미널이 응답하지 않는 경우:

    1. Ctrl+C 를 눌러 현재 프로세스를 중단해 보십시오.
    2. * 버튼을 사용하여 새 터미널 세션을 만듭니다.
    3. 필요한 경우 브라우저 페이지를 새로 고쳐 모든 세션을 재설정합니다.

    새로 고침하면 현재 모든 터미널 세션이 닫히고 새 세션이 시작됩니다.
  </Accordion>
</AccordionGroup>
