[Linux]텍스트 편집 기초 — vim과 nano

2026. 5. 22. 22:16·Linux
SMALL
시나리오

입사 첫 달, 선배가 Nginx 설정을 바꾸라고 했습니다. SSH로 서버에 접속해 vim /etc/nginx/nginx.conf를 쳤습니다. 파일이 열렸습니다. 그런데 커서는 움직이는데 글자를 치면 알 수 없는 동작이 실행됩니다. 15분 동안 파일을 망가뜨리다가 결국 터미널을 강제 종료했습니다. 나중에 알고 보니 vim의 Normal 모드였습니다.

"vim을 못 나가서"가 검색어 밈이 된 데는 이유가 있습니다. vim은 직관에 반하지만, 어떤 서버에도 설치되어 있는 유일한 편집기입니다. 열고 → 수정하고 → 저장하고 → 나오는 4단계만 익히면 더 이상 겁낼 필요 없습니다.

텍스트 편집 기초 — vim과 nano

이번 챕터에서 배울 것
1nano를 열고 파일을 수정하고 저장·종료할 수 있다
2vim의 모드 시스템(Normal / Insert / Command)을 이해하고 텍스트를 입력할 수 있다
3vim에서 저장(:wq), 강제 종료(:q!), 실행 취소(u)를 사용할 수 있다
4자주 쓰는 vim 단축키(검색, 줄 삭제, 복사/붙여넣기)를 활용할 수 있다
5root 소유 설정 파일을 sudo로 안전하게 편집할 수 있다
실습 환경 준비
vim 설치 확인
vim --version | head -1
VIM - Vi IMproved 버전 정보가 출력되면 준비 완료
nano 설치 확인
nano --version
GNU nano 버전이 출력되면 준비 완료 (없으면 sudo apt install nano)
실습 파일 생성
echo 'Hello Linux' > ~/practice.txt
편집 실습에 사용할 파일입니다
개념
nano — 처음이라면 nano부터
nano 인터페이스 — 화면 하단 단축키 가이드, 필수 단축키 6개

vim을 처음 접하면 열자마자 나가는 방법을 몰라서 강제 종료하는 경험을 한 번씩 합니다. 설정 파일을 빨리 수정해야 하는 상황에서 편집기 조작법에 시간을 쓰는 건 비효율적입니다. nano는 학습 비용 없이 바로 쓸 수 있는 편집기입니다. 화면 하단에 단축키가 항상 표시되어 외울 필요가 없고, 일반 텍스트 편집기처럼 바로 입력할 수 있습니다.

bash# 파일 열기 (없으면 새 파일 생성)
nano ~/practice.txt

# root 권한 필요한 파일
sudo nano /etc/hosts

nano 필수 단축키 (^는 Ctrl):

단축키 기능
Ctrl+O 저장 (Write Out)
Ctrl+X 종료 (저장 여부 확인)
Ctrl+K 현재 줄 잘라내기
Ctrl+U 붙여넣기
Ctrl+W 검색
Ctrl+\ 검색 후 치환

저장 후 종료 흐름: Ctrl+O → Enter → Ctrl+X

개념
vim 모드 시스템 — 이것만 이해하면 됩니다

vim이 갑자기 서버에서 유일한 편집기일 때가 있습니다. Alpine 기반 Docker 컨테이너, 최소 설치 이미지, 구형 서버 — 이런 환경엔 nano가 없습니다. vim을 못 쓰면 파일을 열고 나서 종료도 못 하는 상황이 됩니다. vim이 다른 편집기와 가장 다른 점은 '모드'입니다. 이 개념만 이해하면 vim이 왜 그렇게 동작하는지 납득이 가고, 처음 보는 키 입력에도 당황하지 않게 됩니다.

vim 모드 시스템 — Normal/Insert/Command/Visual 전환 흐름

vim은 Normal 모드로 시작합니다. 텍스트 입력 전에 반드시 Insert 모드로 전환해야 합니다.

시작
  │
  ▼
Normal 모드  ←──── ESC ─────  Insert 모드
  │                                │
  │  i / a / o 누름                │  텍스트 입력
  └────────────────────────────────►
  │
  │  : 누름
  ▼
Command 모드  (:wq, :q!, :/)

처음에는 이 4가지만 기억하면 충분합니다:

상황 누를 키
텍스트 입력하고 싶다 i (insert)
입력 그만하고 명령 쓰고 싶다 ESC
저장하고 나가고 싶다 ESC → :wq → Enter
저장 없이 나가고 싶다 ESC → :q! → Enter
개념
vim 자주 쓰는 단축키 — Normal 모드
vim Normal 모드 단축키 빠른 참조 — 이동·편집·검색·치환

처음에는 이동(hjkl)과 삭제(dd), 취소(u)만 알면 설정 파일 수정 수준은 문제없습니다. 검색과 치환은 반복 작업이 생길 때 익혀도 늦지 않습니다.

기본 이동
  h j k l      ← ↓ ↑ →
  0 / $        줄 맨 앞 / 맨 끝
  gg / G       파일 맨 위 / 맨 아래
  :42          42번 줄로 이동

편집
  dd           현재 줄 삭제 (잘라내기)
  yy           현재 줄 복사
  p            붙여넣기 (커서 아래)
  u            실행 취소 (undo)
  Ctrl+R       다시 실행 (redo)

검색 & 치환
  /단어         아래 방향으로 검색 (n으로 다음)
  :%s/old/new/g  파일 전체 치환

— — —

Step 1. nano로 파일 편집 후 저장

nano를 열고 텍스트를 추가한 뒤 저장하고 종료하는 전체 흐름을 연습합니다.

bash# 실습 파일 열기
nano ~/practice.txt

파일이 열리면:

  1. 커서가 있는 위치에서 바로 타이핑합니다
  2. 새 줄에 Server: ubuntu-lab 을 추가합니다
  3. Ctrl+O → Enter 로 저장합니다
  4. Ctrl+X 로 종료합니다
bash# 저장됐는지 확인
cat ~/practice.txt
outputHello Linux
Server: ubuntu-lab
bashnano ~/practice.txt
관찰 포인트
Step 2. vim으로 파일 수정 — 4단계 흐름

vim을 열고 → Insert 모드 진입 → 텍스트 입력 → Normal 모드 복귀 → 저장 종료 흐름을 직접 경험합니다.

bashvim ~/practice.txt

파일이 열리면 (Normal 모드 상태):

  1. G 를 눌러 파일 맨 아래로 이동합니다
  2. o 를 눌러 새 줄을 만들고 Insert 모드로 진입합니다
  3. Edited by vim 을 입력합니다
  4. ESC 를 눌러 Normal 모드로 복귀합니다
  5. :wq 를 입력하고 Enter 를 눌러 저장 종료합니다
bash# 결과 확인
cat ~/practice.txt
outputHello Linux
Server: ubuntu-lab
Edited by vim
bashvim ~/practice.txt
관찰 포인트
Step 3. /etc/hosts 에 호스트 항목 추가

실무에서 가장 자주 편집하는 설정 파일 중 하나인 /etc/hosts에 항목을 추가합니다.

bash# 현재 내용 먼저 확인
cat /etc/hosts
output127.0.0.1   localhost
127.0.1.1   myserver
::1         localhost ip6-localhost
bash# nano로 열기 (sudo 필수 — root 소유 파일)
sudo nano /etc/hosts

파일 맨 아래에 다음 줄을 추가합니다:

192.168.1.10  db-server

Ctrl+O → Enter → Ctrl+X 로 저장 후 종료합니다.

bash# 추가됐는지 확인
grep db-server /etc/hosts
output192.168.1.10  db-server
bashsudo nano /etc/hosts
관찰 포인트
트러블슈팅
E45: 'readonly' option is set (add ! to override)

상황: vim /etc/nginx/nginx.conf 로 파일을 열고 수정한 뒤 :wq 로 저장하려는데 위 오류가 납니다. 분명히 수정이 됐는데 저장이 안 됩니다.

원인: sudo 없이 root 소유 파일을 열었기 때문입니다. vim은 파일을 열 수는 있지만 쓰기 권한이 없어 저장을 거부합니다.

진단:

bash# 파일 소유자 확인
ls -la /etc/nginx/nginx.conf
output-rw-r--r-- 1 root root 1490 Sep 15 10:23 /etc/nginx/nginx.conf

소유자가 root 이고 현재 사용자가 일반 사용자이면 쓰기 권한이 없습니다.

해결:

bash# 방법 1: 이미 수정한 내용 그대로 sudo로 저장 (닫지 않아도 됨)
# Normal 모드에서 실행:
:w !sudo tee %
# 비밀번호 입력 후 저장 완료 → :q! 로 종료

# 방법 2 (권장): 처음부터 sudo로 열기
# 현재 vim을 :q! 로 닫고 재실행
sudo vim /etc/nginx/nginx.conf
트러블슈팅
Vim: Warning: Output is not to a terminal / 화면이 깨지거나 입력이 안 됨

상황: vim을 열었는데 화면이 이상하거나, 키를 눌러도 반응이 없거나, ^M 같은 이상한 문자가 입력됩니다. 또는 vim 세션 안에서 완전히 멈춘 것 같습니다.

원인: 가장 흔한 원인 두 가지입니다. 첫째, Ctrl+S 를 눌러 터미널 출력이 일시 정지된 상태. 둘째, 현재 모드를 모르는 채로 키를 눌러 예상치 못한 동작이 실행된 상태.

진단:

bash# 터미널 입력이 아예 안 된다면 먼저 Ctrl+Q 시도
# (Ctrl+S = 터미널 출력 정지, Ctrl+Q = 재개)

# vim 화면에서 현재 모드 확인
# 하단에 -- INSERT -- 가 보이면 Insert 모드
# 아무 표시 없으면 Normal 모드
# : 로 시작하는 입력창이 보이면 Command 모드

해결:

bash# 1. ESC 를 2~3번 눌러 Normal 모드로 확실히 복귀

# 2. 수정 내용을 살리고 싶으면:
:wq

# 3. 수정 내용을 포기하고 나가고 싶으면:
:q!

# 4. 아무것도 안 된다면 터미널 자체를 새로 열고
#    kill $(pgrep vim)  또는  killall vim

다음 모듈에서는 사용자와 그룹 관리 — useradd, usermod, sudo 권한 설정으로 서버 접근 제어를 다룹니다.

반응형
LIST

'Linux' 카테고리의 다른 글

[Linux]파일 권한 (File Permissions)  (0) 2026.05.22
[Linux] 사용자와 그룹 관리  (0) 2026.05.22
[Linux] 파일시스템 탐색  (0) 2026.05.22
터미널 접속 & 기본 조작  (0) 2026.05.22
Linux 소개 & 왜 배워야 하나  (0) 2026.05.21
'Linux' 카테고리의 다른 글
  • [Linux]파일 권한 (File Permissions)
  • [Linux] 사용자와 그룹 관리
  • [Linux] 파일시스템 탐색
  • 터미널 접속 & 기본 조작
cumo
cumo
  • cumo
    이것저것
    cumo
    • 분류 전체보기 (147) N
      • 이것저것 (1)
      • 보안뉴스 (15)
      • Project (12)
      • wargame (1)
      • Cloud (25)
      • DevOps (21)
      • Linux (43)
      • 네트워크 (23)
      • AWS Developer BootCamp (1)
      • WEB&WAS (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 도구모음 사이트
    • 참고 기술 블로그
  • 공지사항

  • 인기 글

  • 태그

    서버편집
    부팅서비스
    Linux
    Volume Group
    디렉토리구조
    데몬
    텍스트편집기
    논리볼륨
    nano
    bash입문
    스토리지확장
    vi
    리눅스
    터미널멀티플렉서
    ubuntu
    눅스네트워킹
    포트진단
    vim
    인프라
    서버관리
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
cumo
[Linux]텍스트 편집 기초 — vim과 nano
상단으로

티스토리툴바