Step 22. 에디터 — nano와 vim, 터미널에서 살아남기

Step 22. 에디터 — nano와 vim, 터미널에서 살아남기

Level 0 — 컴퓨터 조작과 구조의 이해 | 난이도 ★★☆☆☆ | 예상 소요 시간 3시간

전제: Step 18~21의 리눅스 기본 명령(ls, cd, cat, grep, apt)을 쓸 수 있어야 합니다. 우분투 가상머신(또는 WSL)이 켜져 있어야 합니다.

  • 준비물: 우분투 터미널 하나. 인터넷 연결도 필요 없습니다.
  • 주의: 오늘 실습은 100% 안전합니다. 내 홈 폴더에 연습용 파일을 만들고 고치는 것이 전부입니다.
  • 안내: 에디터는 터미널 전체를 쓰는 대화형 프로그램이라 화면을 텍스트로 옮길 수 없습니다. 에디터 안의 장면은 "화면 묘사(출력 예시)"로 전하고, 에디터 밖에서 확인 가능한 명령은 실측했습니다.

지금까지 우리는 명령어로 파일을 "보기"만 했습니다. cat으로 읽고, grep으로 찾고, find로 검색했지요. 그런데 실제 현장에서는 파일을 "고쳐야" 하는 순간이 훨씬 많습니다. 설정 파일의 값을 바꾸고, 스크립트를 작성하고, 로그에 메모를 남기는 일 전부가 편집입니다. 오늘은 터미널 안에서 파일을 편집하는 도구 — 터미널 에디터를 배웁니다.

솔직히 말하면, 오늘의 주인공 중 하나인 vim은 처음 만나는 사람 누구에게나 벽입니다. "vim을 열었다가 못 나가서 터미널을 껐다"는 이야기는 전 세계 개발자들의 공통 경험이자 유머 소재입니다. 오늘 우리는 그 벽을 일부러 한 번 부딪혀 보고, 탈출구를 몸에 새깁니다.


1. 학습 목표

이 챕터를 끝내면 다음을 할 수 있습니다:

  • 터미널 에디터가 왜 필요한지, cat이나 >로는 안 되는 이유를 설명한다
  • nano로 파일을 만들어 수정·저장·종료한다(Ctrl+O → Enter → Ctrl+X)
  • vim의 모드(mode) 개념을 설명하고, 생존 순환 i → 글쓰기 → Esc → :wq를 수행한다
  • vim에 갇혔을 때 Esc:q! → Enter로 스스로 탈출한다
  • "저장하는 종료(:wq)"와 "버리는 종료(:q!)"의 차이를 실험으로 확인한다

2. 배경 지식 — 오늘의 도구와 개념

오늘의 도구 한눈에 보기

구분 내용
언어·환경 우분투 터미널(배시 셸), 인터넷 불필요
오늘의 명령어 nano 파일명, vim 파일명, nano 단축키(Ctrl+O/Ctrl+X), vim 키(i, Esc, :wq, :q!, dd, yy, p, u, gg, G)
필요한 개념 터미널 에디터, 모드(명령/입력/명령행), 편집의 기본 순환

2-1. 에디터가 왜 따로 필요한가

cat은 파일을 "출력"할 뿐 "수정"은 못 합니다. > 리다이렉션으로 파일 내용을 통째로 덮어쓸 수는 있지만, 기존 내용의 한 줄만 고치는 작업은 불가능합니다. 에디터는 파일을 화면에 펼쳐 놓고 커서를 옮겨 가며 글자 단위로 고치게 해 주는 도구입니다.

윈도우라면 메모장을 열면 됩니다. 그런데 보안 전문가가 일하는 환경 — 예를 들어 침해 사고가 난 서버에 원격으로 접속한 상황 — 은 화면에 검은 터미널뿐입니다. 더블클릭할 아이콘도, 메모장도 없습니다. 이때 필요한 것이 터미널 에디터입니다.

리눅스 세계의 터미널 에디터는 크게 둘로 나뉩니다. 쉽지만 기능이 적은 nano, 그리고 어렵지만 강력하고 어디에나 있는 vim입니다.

2-2. nano — 화면에 도움말이 있는 에디터

nano는 화면 아래쪽에 단축키 목록을 항상 보여 줍니다. ^O 같은 표기가 보이는데, ^는 Ctrl 키를 뜻합니다. 즉 ^O는 "Ctrl+O를 눌러라"입니다.

모드라는 개념이 없어서 키보드로 치면 바로 글자가 입력됩니다. 우분투에 기본 설치되어 있고, 오늘 이걸로 "편집-저장-종료"의 기본 흐름을 익힙니다.

2-3. vim — 모드가 있는 에디터

vim은 모드(mode)라는 독특한 개념을 씁니다. 같은 키보드 자판이 상황에 따라 완전히 다른 일을 합니다.

  • 명령 모드(Normal mode): vim을 열면 처음에 있는 상태. 자판의 글자들이 "글자 입력"이 아니라 "명령"으로 작동합니다. 예를 들어 dd는 ‘d’ 두 글자가 아니라 "한 줄 삭제" 명령입니다.
  • 입력 모드(Insert mode): 명령 모드에서 i를 눌러 진입. 이제야 자판이 글자를 입력합니다. 화면 아래에 -- INSERT --라고 표시됩니다. Esc로 명령 모드에 돌아갑니다.
  • 명령행 모드: 명령 모드에서 :을 눌러 진입. 화면 맨 아래에 :이 뜨고, 저장·종료 같은 명령을 글자로 쳐서 Enter로 실행합니다.

왜 이렇게 불편하게 만들었을까요? vim의 전신인 vi가 만들어진 1970년대에는 마우스도, 화살표 키도 없는 키보드가 흔했습니다. 손을 자판 홈 위치에서 떼지 않고 모든 편집을 하려면 자판 글자 자체가 명령이어야 했습니다. 그리고 일단 익히면 마우스 없이 글자를 다루는 속도가 상상을 초월하게 빨라집니다.

또 하나 중요한 사실: vim(또는 원조 vi)은 사실상 모든 유닉스·리눅스에 설치되어 있습니다. 최소 설치 환경, 오래된 서버, 임베디드 장비 어디를 가도 vi는 있습니다. nano는 없을 수 있지만 vi는 있습니다. 그래서 생존을 위해 vim의 최소 사용법은 반드시 알아야 합니다.


3. 따라 하기

3-1. 두 에디터가 있는지 확인

본격 실습 전에, 조회 명령으로 두 에디터의 존재와 버전을 확인해 봅시다:

which nano vim
/usr/bin/nano
/usr/bin/vim

(2026-09-09 우분투 24.04 실측.)

nano --version | head -1
vim --version | head -1
 GNU nano, version 7.2
VIM - Vi IMproved 9.1 (2024 Jan 02, compiled Sep 05 2025 19:44:46)

(2026-09-09 실측. 버전은 환경마다 다를 수 있습니다.)

읽는 법: which는 "이 명령의 실체 파일이 어디 있나"를 보여 줍니다. 둘 다 /usr/bin 아래 — Step 21에서 배운 "시스템 공용 구역에 설치된 프로그램"입니다. 버전이 다르면 화면 구성이 조금 다를 수 있지만, 오늘 배우는 핵심 키는 반세기째 동일합니다.

3-2. nano로 첫 편집

nano note.txt

(화면 묘사, 출력 예시) 터미널 전체가 nano 화면으로 바뀝니다. 위쪽은 빈 편집 공간, 아래쪽 두 줄에 ^G 도움말 ^O 저장 ^X 종료 같은 단축키 안내가 보입니다.

읽는 법: 이제 여러분은 nano라는 프로그램 "안"에 있습니다. 쉘 프롬프트(lee@ubuntu:~$)가 사라진 게 정상입니다. 명령을 치는 공간이 아니라 문서를 쓰는 공간입니다. 존재하지 않는 파일 이름을 주면 nano는 새 파일로 간주하고 빈 문서를 엽니다.

아무 글이나 세 줄 써 봅시다:

오늘 nano를 배웠다.
터미널에서도 글을 쓸 수 있다.
의외로 간단하다.

저장하기: Ctrl+O를 누릅니다. (화면 묘사, 출력 예시) 아래에 File Name to Write: note.txt라고 뜹니다 — 저장할 이름을 확인하는 겁니다. 그대로 Enter를 누르면 Wrote 3 lines 메시지가 잠깐 뜨며 저장 완료입니다.

종료하기: Ctrl+X를 누릅니다. nano가 닫히고 익숙한 쉘 프롬프트로 돌아옵니다.

확인:

cat note.txt
오늘 nano를 배웠다.
터미널에서도 글을 쓸 수 있다.
의외로 간단하다.

(여기까지가 편집의 기본 순환입니다 — 만들고, 쓰고, 저장하고, 나와서, 확인하기.)

3-3. vim 입문 — 열고, 쓰고, 저장하고, 나가기

vim note.txt

(화면 묘사, 출력 예시) 화면이 vim으로 바뀌고 아까 쓴 세 줄이 보입니다. 커서는 첫 글자 위에 있습니다. 아무 키도 누르지 마세요. 지금 여러분은 명령 모드에 있습니다. 화면 맨 아래에 파일 이름과 줄 수가 표시되고, -- INSERT --가 없다면 명령 모드라는 뜻입니다.

예측해 보기: 지금 상태에서 자판으로 hello라고 치면 화면에 hello가 입력될까요? 예측을 종이에 적고 직접 해 보세요. (정답: h는 왼쪽 이동, e는 단어 끝으로 이동 같은 "명령"으로 해석되어 글자가 입력되지 않습니다. 커서만 이리저리 움직입니다.)

입력 모드 진입: i를 한 번 누릅니다. 화면 맨 아래 왼쪽에 -- INSERT --가 뜹니다. 이제 자판이 글자를 입력합니다. 네 번째 줄에 vim도 써 봤다.라고 써 봅시다.

명령 모드 복귀: Esc를 누릅니다. -- INSERT -- 표시가 사라집니다.

저장하고 종료: :wq를 치고 Enter를 누릅니다. vim이 닫히고 쉘로 돌아옵니다. :은 명령행 모드 진입, w는 write(저장), q는 quit(종료) — "저장하고 나가라"입니다.

: vim 편집의 최소 생존 순환은 i → 글쓰기 → Esc → :wq입니다. 이 다섯 동작만 기억하면 어떤 서버에 떨어져도 설정 파일을 고칠 수 있습니다.

3-4. vim 명령 모드 연습

다시 vim note.txt로 엽니다. 이번에는 입력 모드에 들어가지 말고 명령 모드에서만 놀아 봅시다:

하는 일
h j k l 커서 좌·하·상·우 이동 (화살표 키도 됩니다)
dd 커서가 있는 줄 삭제
yy 커서가 있는 줄 복사(yank)
p 커서 아래/뒤에 붙여넣기(paste)
u 방금 한 작업 되돌리기(undo)
gg 파일 맨 앞으로 이동
G 파일 맨 끝으로 이동

실험 1: 두 번째 줄로 커서를 옮긴 뒤 dd를 누릅니다. (화면 묘사, 출력 예시) "터미널에서도 글을 쓸 수 있다." 줄이 사라집니다. 곧바로 u를 누르면 되살아납니다.

읽는 법: vim은 되돌리기가 되니 실험을 두려워할 필요가 없습니다. 망가지면 u, 저장하지 않고 나가면 원본은 그대로입니다.

실험 2: 아무 줄에서 yy를 누른 뒤 p를 두 번 누릅니다. 같은 줄이 아래에 두 번 복사됩니다. 복사-붙여넣기조차 마우스 없이 세 번의 키 입력으로 끝납니다 — 이것이 vim 사용자들이 말하는 "속도"의 맛보기입니다.

실험이 끝났으면 저장하지 않고 나갑니다: Esc:q! → Enter(바로 다음 절에서 자세히).

3-5. 일부러 갇혀 보고 탈출하기 — 오늘의 핵심 훈련

가장 중요한 훈련입니다. vim 안에서 이것저것 마구 눌러 보세요. 이상한 모드에 들어가고, 뭐가 뭔지 모르는 상태가 되는 것 — 그게 목표입니다.

탈출: Esc를 두세 번 누른 뒤 :q!를 치고 Enter.

(화면 묘사, 출력 예시) 어떤 상태였든 vim이 닫히고 쉘로 돌아옵니다. 수정 내용은 저장되지 않습니다.

읽는 법: q!!는 "경고 무시하고 강제로"라는 뜻입니다. "저장 안 했는데 정말 나갈 거냐"는 vim의 경고를 무시하고 나가는 명령입니다.

: Esc:q! → Enter는 vim의 만능 탈출구입니다. 어떤 이상한 모드에 있든 이 조합이면 나갈 수 있습니다. 이 한 줄 때문에 전 세계 수많은 초보가 터미널을 강제 종료하지 않아도 됐습니다.


4. 미션과 연습문제

미션 — 서버 설정 계획서 편집하기

다음 임무를 순서대로 수행하세요:

  1. nano로 server-setup.txt를 만들어 다음 세 줄을 쓰고 저장하세요:
    [웹서버 설정 계획]
    1. nginx 설치
    2. 방화벽 80번 포트 열기
    
  2. vim으로 server-setup.txt를 열어, 입력 모드로 네 번째 줄에 3. TLS 인증서 적용을 추가하고 저장 후 종료하세요
  3. vim으로 다시 열어서, 명령 모드만 사용해 두 번째 줄("1. nginx 설치")을 복사(yy)해 맨 아래에 붙여 넣고(p), 저장하지 않고(:q!) 종료하세요. 그다음 cat으로 파일을 확인해, 방금 붙여 넣은 줄이 저장되지 않았음을 확인하세요
  4. vim으로 다시 열어 G로 파일 끝으로 갔다가 gg로 처음으로 돌아온 뒤 :q로 종료하세요
  5. 최종 파일을 cat으로 출력해 눈으로 검수하세요

답은 여기 쓰지 않습니다 — 5절에서 검증합니다.

연습문제

문제 1. nano와 vim의 가장 큰 성격 차이 한 가지(모드의 유무)를 설명하고, 그 차이가 초보에게 각각 어떤 의미인지 말해 보세요.

문제 2. vim을 열자마자 hello를 쳤는데 글자가 입력되지 않았습니다. 무슨 상태이며, 글자를 입력하려면 어떤 키를 눌러야 할까요?

문제 3. :wq:q!의 차이를 설명하고, 각각을 써야 하는 상황을 하나씩 들어 보세요.

문제 4. "nano는 없을 수 있지만 vi는 있다"는 말이 왜 보안 현장에서 중요한지 — 원격 서버 상황을 예로 설명해 보세요.


5. 모범 답안과 완료 기준

미션 모범 답안

nano server-setup.txt        # 세 줄 작성, Ctrl+O → Enter → Ctrl+X
vim server-setup.txt         # i → 넷째 줄 추가 → Esc → :wq
vim server-setup.txt         # 둘째 줄에서 yy → G → p → :q!  (저장 안 함!)
cat server-setup.txt         # 붙여 넣은 줄이 없어야 정상
vim server-setup.txt         # G → gg → :q
cat server-setup.txt         # 최종 검수: 네 줄만 있어야 함

검증하는 법: 3번이 이 미션의 핵심입니다. :q!로 나갔기 때문에 붙여 넣기는 파일에 남지 않습니다. 최종 cat 결과가 다음 네 줄이면 완료입니다:

[웹서버 설정 계획]
1. nginx 설치
2. 방화벽 80번 포트 열기
3. TLS 인증서 적용

만약 다섯 줄(복사한 줄까지) 보인다면 :q! 대신 :wq로 나간 것 — "저장하는 종료"와 "버리는 종료"의 차이를 몸으로 다시 확인해 보세요.

연습문제 해답

문제 1 해답. nano는 모드가 없어 키보드로 치면 바로 글자가 입력되고, 화면 아래에 단축키 도움말이 항상 보입니다 — 초보가 헤맬 일이 거의 없습니다. vim은 명령 모드와 입력 모드가 분리되어, 열자마자 글자를 치면 입력이 아니라 명령으로 해석됩니다 — 초보에게는 벽이지만, 익히면 마우스 없이 매우 빠릅니다.

문제 2 해답. 명령 모드(Normal mode) 상태입니다 — vim은 열자마자 명령 모드입니다. i를 눌러 입력 모드로 들어가야 글자가 입력됩니다. 화면 아래 -- INSERT -- 표시를 확인하는 습관을 들이세요.

문제 3 해답. :wq는 "저장하고 종료"(write + quit), :q!는 "저장하지 않고 강제 종료"(수정 내용 폐기)입니다. 편집을 완료해 파일에 남기고 싶을 때 :wq, 실험하다 망가졌거나 원본을 유지하고 싶을 때 :q!를 씁니다.

문제 4 해답. 사고가 난 서버에 원격 접속한 현장에는 그래픽 환경이 없고, 친숙한 에디터가 설치되어 있다는 보장도 없습니다. 최소 설치 환경·오래된 서버·임베디드 장비에도 vi 계열은 있으므로, vim 생존 순환을 아는 사람은 어떤 서버에서든 파일을 읽고 고칠 수 있습니다. 반대로 nano만 아는 사람은 nano가 없는 서버에서 아무것도 못 합니다.

완료 기준 체크리스트

  • [ ] nano로 파일을 만들어 저장하고 종료할 수 있다
  • [ ] vim에서 i/Esc/:wq 순환으로 파일을 수정할 수 있다
  • [ ] vim에 갇혔을 때 Esc:q! → Enter로 스스로 탈출할 수 있다
  • [ ] dd, yy, p, u, gg, G가 각각 무엇인지 설명할 수 있다
  • [ ] :wq:q!의 차이를 설명할 수 있다
  • [ ] 미션: server-setup.txt 편집 5개 임무를 완수했다

6. 흔한 실수와 해결

벽 1. "vim을 열었는데 아무것도 입력이 안 돼요!"

증상: 글자를 쳐도 화면에 안 쓰이고 커서만 움직이거나 이상한 일이 벌어집니다.
원인: 명령 모드에서 글자를 치고 있습니다. vim은 열자마자 명령 모드입니다.
해결: i를 눌러 입력 모드로 들어가세요. 화면 아래 -- INSERT --를 확인하는 습관이 답입니다.

벽 2. "분명 저장했는데 파일이 안 바뀌었어요."

증상: vim을 나와서 cat으로 보니 수정 내용이 없습니다.
원인: :q!로 나왔거나, 읽기 전용 파일을 열었는데 경고를 무시했을 수 있습니다.
해결: 나갈 때 항상 :wq였는지 돌아보세요. 읽기 전용 파일이면 vim이 아래에 [readonly]라고 표시합니다 — 그 경우 관리자 권한으로 다시 열어야 하는데, 그게 Step 24의 sudo입니다.

벽 3. "Ctrl+C로 못 나가나요?"

증상: 습관적으로 Ctrl+C를 누르지만 vim이 안 닫힙니다.
원인: vim에서 Ctrl+C는 "현재 입력 취소"이지 종료가 아닙니다.
해결: 탈출은 오직 명령행 명령으로만 — :q, :q!, :wq 셋 중 하나입니다.

벽 4. "nano에서 저장하다가 자꾸 새 파일이 생겨요."

증상: Ctrl+O 후 파일 이름을 물을 때 다른 이름을 쳐 버려서 원본이 아닌 새 파일로 저장됩니다.
원인: File Name to Write: 프롬프트의 의미를 모르고 이름을 고쳐 씁니다.
해결: 그 프롬프트에서는 그냥 Enter만 누르세요. 이미 올바른 이름이 적혀 있습니다.


7. 정리

오늘의 개념

개념 한 줄 설명
터미널 에디터 터미널 안에서 파일을 편집하는 프로그램 — 서버 현장의 유일한 편집 도구
nano 모드 없는 쉬운 에디터 — 도움말이 화면에 항상 표시
vim 모드 있는 강력한 에디터 — 거의 모든 리눅스에 존재
모드(mode) 같은 자판이 상황(명령/입력/명령행)에 따라 다른 일을 하는 구조
생존 순환 i → 글쓰기 → Esc → :wq / 만능 탈출구 Esc → :q! → Enter

오늘의 명령어·키

명령·키 하는 일
nano 파일명 nano로 열기 (없으면 새 파일)
Ctrl+O → Enter / Ctrl+X nano 저장 / 종료
vim 파일명 vim으로 열기 (명령 모드로 시작)
i / Esc 입력 모드 진입 / 명령 모드 복귀
:wq / :q! 저장하고 종료 / 버리고 종료
dd yy p u gg G 명령 모드: 삭제·복사·붙여넣기·되돌리기·처음·끝

명령어보다 중요한 감각

에디터 실력은 보안 실력의 척도가 아닙니다. vim을 화려하게 다루는 사람이 반드시 좋은 분석가는 아니고, nano만 쓰는 훌륭한 전문가도 많습니다. 중요한 것은 "어떤 서버에 접속해도 파일을 읽고 고칠 수 있는가"라는 생존 능력 단 하나입니다. 오늘 배운 것은 정확히 그것입니다.

두 가지를 더 기억해 두세요. 첫째, 침해 사고 대응 현장에서 에디터는 생명줄입니다 — 공격자가 남긴 스크립트를 vim이나 nano로 "열어 읽는" 것은 안전한 분석이지만, "실행"하는 것은 다른 이야기입니다. 둘째, 더 배우고 싶어지면 터미널에 vimtutor를 쳐 보세요 — 30분짜리 대화형 vim 강좌가 내장되어 있습니다. 필수가 아니라 취미의 영역이지만, 오늘 익힌 생존 순환은 필수입니다. 손가락이 먼저 기억할 때까지 두세 번만 더 반복해 두세요.


전부 체크되면 Step 22 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.