---
title: "리눅스 CLI 에서 텍스트 파일을 편집하는 3가지 방법 (Feat. cat)"
description: "웹서버 설정처럼 리눅스 CLI 환경에서 텍스트 파일을 편집해야 할 때 쓸 수 있는 nano, Vim, cat 세 가지 도구의 기본 사용법을 정리합니다."
created_at: 2023-02-26
category: tutorial
tags: ["Linux", "CLI", "텍스트 편집기", "nano", "vim", "cat"]
published: true
---
웹서버를 구성할 때에는 각종 설정 텍스트 파일을 편집할 일이 빈번합니다. 대부분의 웹서버가 리눅스로 구성되어 있기 때문에, 이러한 작업은 주로 CLI(Command line interface)에서 이루어집니다. 하지만, GUI(Graphical user interface) 위주로 텍스트 파일을 편집하는 우리들에게는 CLI에서의 텍스트 파일 편집은 생소하고 어렵게 느껴질 수 있습니다. 이 글에서는 리눅스 CLI에서의 텍스트 파일 편집을 위한 3가지 방법을 살펴보겠습니다.

> 📦 **원본 아카이브**: 이 글은 과거 [pyhub.kr](https://pyhub.kr)에서 운영하던 Recipe 시리즈의 글을 복원한 것입니다. 원본 URL(`/recipe/725XEkoa6Jgne/`)로 접근하더라도 이 페이지로 자동 연결됩니다.

## nano (쉬움)

nano는 리눅스에 기본 설치되어 있으며, 가장 간단하고 쉬운 텍스트 편집기입니다. 초보자들에게 추천하는 편집기입니다. 파일을 편집하려면 `nano` 뒤에 파일 경로를 붙여 실행합니다.

```bash
nano /etc/nginx/nginx.conf
```

에디터가 열리면 아래 방법으로 조작합니다.

- 커서 이동: 키보드의 화살표나 `PageUp`/`PageDown` 키를 사용
- 파일 저장: `Ctrl+O`
- 편집기 종료: `Ctrl+X`

## Vim (어렵지만, 강력!!!)

Vim은 많은 기능을 가진 텍스트 편집기로, CLI에서 가장 많이 사용되는 편집기 중 하나입니다. Vim 만의 독특한 단축키가 처음에는 익히기 어렵지만, 익숙해지면 높은 생산성을 얻을 수 있습니다. 파일을 편집하려면 `vim` 뒤에 파일 경로를 붙여 실행합니다.

```bash
vim hello.py
```

Vim에서 처음 시작할 때 `print` 같은 글자를 바로 입력하려고 하면 에디터에 글자가 들어가지 않아 당황하는 경우가 많습니다. Vim은 크게 3가지 모드가 있으며, Insert 모드로 전환해야만 글자 입력이 가능합니다.

간단한 첫 편집 흐름은 다음과 같습니다:

1. `i` 키를 눌러 Insert 모드로 전환
2. `print("hello world")` 입력
3. `ESC` 키를 눌러 Normal 모드로 전환
4. `:wq` 입력 후 엔터로 저장(`w`)하고 편집기를 빠져(`q`, quit)나오기

### 1. Normal 모드 (명령 모드)

Vim에서 기본으로 실행되는 모드이며, 텍스트를 편집하지 않는 상태입니다. Normal 모드에서는 삽입, 복사, 붙여넣기 등의 다양한 명령을 지원합니다.

커서 이동:

- `h` : 커서 좌로 글자 단위 이동
- `l` : 커서 우로 글자 단위 이동
- `j` : 커서 아래로 이동
- `k` : 커서 위로 이동
- `w` : 커서 우로 단어 단위 이동

Insert 모드로 전환:

- `i` : 현재 위치에서 Insert 모드로 전환
- `I` : 현재 줄 처음 칸에서 Insert 모드로 전환
- `a` : 바로 다음 칸에서 Insert 모드로 전환
- `A` : 현재 줄 마지막 칸에서 Insert 모드로 전환
- `o` : 바로 아래 줄에서 Insert 모드로 전환
- `O` : 바로 윗 줄에서 Insert 모드로 전환

편집·저장 명령:

- `dd` : 한 줄 잘라내기
- `:w` : 저장하기
- `:wq` : 저장하고 편집기 종료하기
- `:q!` : 저장 없이 강제로 편집기 종료하기

### 2. Insert 모드

일반적인 편집 모드입니다. 키를 타이핑하는 대로 파일 내용으로 입력됩니다. Normal 모드로 전환하려면 `ESC` 키를 누릅니다.

### 3. Visual 모드

영역을 선택하여 복사, 붙여넣기 등을 할 수 있는 모드입니다. Normal 모드에서 `v` 혹은 `V` 혹은 `Ctrl-v`를 입력하여 전환합니다.

- `v` : 글자 단위 영역 선택
- `V` : 줄 단위 영역 선택
- `Ctrl-v` : 컬럼 단위 영역 선택

영역 선택 후에 `y` 키를 입력하면 복사가 되고, `p` 키를 입력하면 붙여넣기가 됩니다.

Vim을 더 깊이 공부하고 싶다면 [(도서) 손이 먼저 반응하는 Practical Vim](http://www.yes24.com/Product/Goods/36686205) 책을 참고하세요.

### Tip

리눅스 CLI 명령행에서 아래 명령을 입력하면 명령 입력을 vi 모드로 수행할 수 있습니다.

```bash
set -o vi
```

이 설정을 쉘 설정파일에 넣어두면 새 쉘을 열 때마다 자동으로 적용됩니다.

- bash 쉘: `~/.bash_profile`
- zsh 쉘: `~/.zshrc`

예를 들어 zsh 를 쓴다면 아래처럼 추가합니다.

```bash
echo 'set -o vi' >> ~/.zshrc
```

사용 중인 쉘은 아래 명령으로 파악할 수 있습니다.

```bash
echo $SHELL
```

## cat

cat은 리눅스에서 파일 내용을 출력하는 명령어 중 하나로, 파일을 합치거나, 새로운 파일을 만들거나, 파일의 내용을 확인하는 등의 다양한 용도로 사용됩니다.

### 파일 내용 출력하기

가장 일반적으로 사용되는 cat 명령은 파일 내용을 출력하는 것입니다. `cat` 뒤에 파일 경로를 붙여 실행합니다.

```bash
cat /etc/hosts
```

여러 파일의 내용을 한 번에 출력하려면 경로를 공백으로 나열합니다.

```bash
cat part1.txt part2.txt part3.txt
```

### 파일 합치기

`cat` 명령과 `>` 연산자를 섞어 쓰면, 출력 문자열을 다른 파일에 저장할 수 있습니다.

```bash
cat part1.txt part2.txt part3.txt > merged.txt
```

`>`는 리다이렉션(redirection)이라 부르며, 앞선 명령의 표준출력을 뒷 경로에 **덮어쓰기**(overwrite)합니다. 대부분의 운영체제에서 지원합니다.

### 파일 추가하기

`cat` 명령과 `>>` 연산자를 섞어 쓰면 출력 문자열을 다른 파일 **끝에 추가**(append)할 수 있습니다.

```bash
cat footer.txt >> merged.txt
```

`>`는 덮어쓰기로 동작하기에 여러 번 수행해도 파일의 내용은 그대로이지만, `>>`는 끝에 추가되기에 수행한 만큼 파일 내용이 길어집니다.

### 표준입력을 통해 파일에 저장하기

`cat` 명령에서 파일 경로 지정 없이 `>>` 와 저장할 경로만 적으면 표준입력의 문자열을 지정 경로에 저장할 수 있습니다.

```bash
cat >> notes.txt
여기에 여러 줄을
자유롭게 입력할 수 있습니다.
```

여러 줄을 입력한 뒤, 입력을 종료하려면 빈 줄에서 `Ctrl-d`를 입력합니다.