CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
리눅스마스터 1급 · 1급리눅스마스터 1급
  • Week 1
    • 1.운영체제와 리눅스: 커널이 하는 일
    • 2.자유 소프트웨어와 배포판: 라이선스가 만든 생태계
    • 3.설치와 부팅: 전원을 켜는 순간부터
    • 4.파일시스템 구조와 파일의 종류: 모든 것은 파일이다
    • 5.Week 1 종합 복습: 개념을 꿰뚫는 시간
  • Week 2
    • 1.파일과 디렉터리 명령: 리눅스 파일 시스템을 손끝으로 다루기
    • 2.텍스트 처리: 유닉스의 진짜 힘, 파이프라인으로 데이터를 다듬다
    • 3.vi/vim 정밀 정복: 손을 떼지 않고 편집하는 에디터의 미학
    • 4.압축과 아카이브, 그리고 도움말: 파일을 묶고 줄이고, 스스로 배우는 법
    • 5.Week 2 종합 복습: 명령행에서 살아남기 위한 모든 것
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
  • Week 12
  • Week 13
  • Week 14
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 1급/Week 2/Day 3

기준: 리눅스마스터 1급 출제 기준·오류 제보

리눅스마스터 1급· AssociateWeek 2 · Day 3읽기 약 9분
핵심 정리
  • vi는 모드 기반이다. 명령 모드(기본) ↔ 입력 모드(i·a·o) ↔ 마지막 행 모드(:).
  • 입력 진입 키는 위치가 다르다 — i 커서 앞, a 커서 뒤, I 행 맨 앞, A 행 맨 끝, o 아래 행, O 위 행.
  • 편집 3종 세트: dd(행 삭제=잘라내기) · yy(행 복사) · p/P(붙여넣기). 취소는 u.
  • 저장·종료: :wq는 항상 다시 쓰고, :x와 ZZ는 변경됐을 때만 저장한다.
  • 전체 치환은 :%s/old/new/g. %가 "파일 전체 행"을 뜻하며 문법은 sed와 한 뿌리다.

Day 3 - vi/vim 정밀 정복: 손을 떼지 않고 편집하는 에디터의 미학

vi의 핵심: 세 가지 모드

그래픽 환경 없는 원격 서버에도, 최소 설치 시스템에도 vi는 거의 예외 없이 존재한다. 그래서 관리자에게는 선택이 아니라 필수이다.

vi에서 vim으로. vi(visual editor)는 1976년 빌 조이(Bill Joy)가 만든 에디터이다. vim(Vi IMproved)은 1991년 브람 무레나르(Bram Moolenaar)가 vi를 개선해 만든 현대적 버전으로, 구문 강조, 다중 실행 취소, 분할 화면 등을 추가했다. 오늘날 대부분의 리눅스에서 vi를 입력하면 실제로는 vim이 실행된다.

  • vi를 이해하는 열쇠는 모드이다. 같은 키를 눌러도 어떤 모드에 있느냐에 따라 전혀 다르게 동작한다.
모드역할진입 방법
명령(Command) 모드커서 이동, 복사/삭제, 명령 실행시작 시 기본, Esc로 복귀
입력(Insert) 모드실제 텍스트 입력i, a, o 등
마지막 행(ex/Last-line) 모드저장, 종료, 검색/치환명령 모드에서 :
  • vi를 켜면 명령 모드에서 시작한다.
  • 글자를 입력하려면 i 등을 눌러 입력 모드로 들어가고, 입력이 끝나면 Esc로 명령 모드로 돌아온다.
  • 저장하거나 종료하려면 명령 모드에서 :를 눌러 마지막 행 모드로 들어간다.

왜 모드를 나누었을까? 일반 에디터는 글자 키가 곧 입력이고, 기능은 Ctrl이나 Alt 조합으로 처리한다. vi는 발상을 뒤집어, 명령 모드에서는 모든 글자 키가 편집 명령으로 작동한다. 덕분에 dd(행 삭제), yy(행 복사)처럼 손을 움직이지 않고 한두 타로 강력한 편집을 할 수 있다. 이 효율이 수십 년간 vi가 사랑받는 이유이다.

입력 모드로 들어가기

같은 입력 모드라도 진입하는 키에 따라 커서 위치가 달라진다. 헷갈리기 쉬운 부분이다.

키동작
i커서 앞(현재 위치)에서 입력 시작 (insert)
a커서 뒤에서 입력 시작 (append)
I행의 맨 앞에서 입력 시작
A행의 맨 끝에서 입력 시작
o현재 행 아래에 새 행을 열고 입력 (open)
O현재 행 위에 새 행을 열고 입력

⚠️ 함정: i와 a, o와 O의 차이 시험에서 "커서 위치 다음부터 입력하는 키는?"이라고 물으면 답은 a(append)이지 i(insert)가 아니다. 또 o는 아래 행, O(대문자)는 위 행을 연다는 점, I는 행 맨 앞, A는 행 맨 끝이라는 점을 정확히 구분해야 한다. 대소문자 한 글자가 결과를 완전히 바꾼다.

명령 모드에서의 커서 이동

vi의 진가는 손을 홈 포지션에 둔 채 이동하는 데 있다.

h  ←  왼쪽 한 칸
l  →  오른쪽 한 칸
j  ↓  아래 한 행
k  ↑  위 한 행
w     다음 단어의 시작으로
b     이전 단어의 시작으로
e     단어의 끝으로
0     행의 맨 앞(0번 컬럼)으로
^     행의 첫 글자(공백 제외)로
$     행의 맨 끝으로
gg    파일의 첫 행으로
G     파일의 마지막 행으로
5G    5번째 행으로 (또는 :5)
Ctrl+f  한 화면 아래로(forward)
Ctrl+b  한 화면 위로(backward)

hjkl이 화살표가 된 이유. vi를 만든 빌 조이가 사용하던 ADM-3A 단말기에는 화살표 키가 없었고, h/j/k/l 키에 화살표가 그려져 있었다. 그래서 이 네 키가 이동 키가 되었다. 오늘날까지 이어진 이 관습 덕분에, vim 사용자는 손을 홈 포지션에서 떼지 않고도 빠르게 이동할 수 있다.

삭제, 복사, 붙여넣기

명령 모드에서 이루어지는 편집 명령들이다.

명령동작
x커서 위치의 한 글자 삭제
dd현재 행 삭제(잘라내기)
3dd현재 행부터 3개 행 삭제
dw커서부터 단어 끝까지 삭제
D커서부터 행 끝까지 삭제
yy현재 행 복사(yank)
3yy3개 행 복사
p복사/삭제한 내용을 커서 뒤(아래)에 붙여넣기
P커서 앞(위)에 붙여넣기
u실행 취소(undo)
Ctrl+r다시 실행(redo)
.직전 명령 반복(repeat)

vi의 "잘라내기"는 곧 복사다. vi에는 별도의 클립보드가 없는 대신 레지스터(register)라는 임시 저장 공간이 있다. dd로 행을 삭제하면 그 내용이 레지스터에 저장되므로, p로 다른 곳에 붙여넣을 수 있다. 즉 dd는 "삭제"이자 동시에 "잘라내기"이다. 그래서 행 순서를 바꿀 때 dd 후 원하는 위치에서 p를 누르는 패턴을 자주 쓴다.

검색

  • 명령 모드에서 검색은 /(아래 방향)와 ?(위 방향)로 시작한다.
  • 검색에는 정규표현식을 쓸 수 있다. 예를 들어 /^root는 root로 시작하는 행을 찾는다.
/error      아래 방향으로 error 검색
?error      위 방향으로 error 검색
n           다음 일치로 이동(같은 방향)
N           이전 일치로 이동(반대 방향)

마지막 행(ex) 모드: 저장과 종료

명령 모드에서 :를 누르면 화면 맨 아래에 명령을 입력하는 ex 모드로 들어간다.

명령동작
:w저장(write)
:w 파일명다른 이름으로 저장
:q종료(quit)
:q!저장하지 않고 강제 종료
:wq저장 후 종료
:x변경된 경우에만 저장 후 종료
ZZ(명령 모드) 저장 후 종료 — :wq와 동등
:wq!강제로 저장 후 종료
:55번째 행으로 이동
:set nu행 번호 표시(number)
:set nonu행 번호 숨기기

⚠️ 함정: :wq, :x, ZZ의 미묘한 차이 :wq는 변경 여부와 관계없이 항상 파일을 다시 쓴다(타임스탬프가 갱신됨). :x와 ZZ는 변경된 경우에만 저장하므로, 내용을 안 바꿨다면 파일을 건드리지 않아 타임스탬프가 보존된다. 미세한 차이지만 시험에 출제되고, 빌드 시스템처럼 타임스탬프가 중요한 환경에서는 실무적으로도 의미가 있다.

치환: ex 모드의 강력한 기능

  • ex 모드에서 s(substitute) 명령으로 텍스트를 치환한다. 문법은 sed와 매우 비슷하다.
  • %는 "파일 전체 행"을 의미하는 범위 지정자이다. :%s/.../.../g가 대표적인 패턴이다.
:s/old/new/          현재 행의 첫 번째 old를 new로
:s/old/new/g         현재 행의 모든 old를 new로
:%s/old/new/g        파일 전체의 모든 old를 new로
:%s/old/new/gc       파일 전체 치환하되 매번 확인(confirm)
:1,10s/old/new/g     1~10행 범위에서 치환
:%s/old/new/gi       대소문자 무시하고 전체 치환

vi의 치환과 sed의 뿌리. vi의 ex 모드 치환 :%s/old/new/g와 sed의 s/old/new/g가 닮은 것은 우연이 아니다. 둘 다 행 단위 에디터 ed에서 비롯된 한 가족이기 때문이다. ed → ex → vi로 이어지는 계보를 알면, ex 모드 명령들이 왜 이런 문법인지 자연스럽게 이해된다.

환경 설정: .vimrc

  • vim의 동작은 홈 디렉터리의 .vimrc 파일로 영구 설정할 수 있다.
  • ex 모드에서 :set 명령으로 임시 설정한 것을 이 파일에 적으면 매번 적용된다.
set number          " 행 번호 표시
set autoindent      " 자동 들여쓰기
set tabstop=4       " 탭 너비 4칸
set expandtab       " 탭을 공백으로 변환
set hlsearch        " 검색 결과 강조(highlight)
set ignorecase      " 검색 시 대소문자 무시
syntax on           " 구문 강조 켜기

점(.) 으로 시작하는 설정 파일. .vimrc, .bashrc처럼 점으로 시작하는 파일은 ls에 기본적으로 표시되지 않는 숨김 파일이다. 끝의 rc는 "run commands"의 약자로, 프로그램이 시작할 때 자동으로 실행하는 명령 모음이라는 뜻이다. 유닉스 초기 CTSS 시스템의 "runcom"에서 유래한 오래된 관습이다.

nano 개요: 초보자 친화적 에디터

  • nano는 vi와 정반대 철학의 에디터이다.
  • 모드가 없고, 켜자마자 바로 글자를 입력할 수 있으며, 화면 아래에 단축키 안내가 항상 표시된다.
nano file.txt       # nano로 파일 열기

주요 단축키(^는 Ctrl 키):

단축키동작
Ctrl+O저장(write Out)
Ctrl+X종료
Ctrl+W검색(Where is)
Ctrl+K행 잘라내기
Ctrl+U붙여넣기
Ctrl+G도움말
  • nano는 간단한 설정 수정에는 편하지만, vi처럼 강력한 편집 명령이나 어디서나 보장되는 가용성은 없다.

emacs 개요: 또 하나의 거인

  • emacs는 vi와 함께 유닉스 양대 에디터로 꼽힌다. 리처드 스톨먼이 만들었으며, 사실상 운영체제에 가까울 만큼 확장성이 높다.
  • vi가 모드 기반이라면, emacs는 모든 기능을 Ctrl/Meta(Alt) 조합 키로 호출한다.
단축키동작
Ctrl+X Ctrl+S저장
Ctrl+X Ctrl+C종료
Ctrl+K행 끝까지 잘라내기
Ctrl+Y붙여넣기
Ctrl+S검색

vi vs emacs 논쟁. 수십 년간 이어진 "에디터 전쟁"에서 vi는 가볍고 어디에나 있다는 점, emacs는 무한히 확장 가능하다는 점으로 각각의 진영을 형성했다. 시험과 실무 관점에서는 어떤 최소 시스템에도 설치되어 있는 vi를 다룰 줄 아는 것이 가장 안전한 선택이다.

직접 쳐보기

vi는 손으로 익혀야 한다. 다음을 직접 따라 해 본다.

# 1. vi로 새 파일 만들기
vi practice.txt
 
# vi 안에서 차례대로:
# i 를 눌러 입력 모드 진입
# 아래 내용 입력:
#   Hello Linux
#   This is vi practice
#   Line three
# Esc 를 눌러 명령 모드 복귀
 
# 2. 커서 이동 연습 (명령 모드에서)
# gg → 첫 행으로, G → 마지막 행으로
# w → 단어 이동, $ → 행 끝, 0 → 행 처음
 
# 3. 편집 연습
# dd → 한 행 삭제, u → 실행 취소
# yy 후 p → 행 복사 붙여넣기
 
# 4. 검색과 치환
# /vi 입력 후 Enter → vi 검색, n으로 다음
# :%s/Line/행/g 입력 → Line을 행으로 전체 치환
 
# 5. 저장하고 종료
# :wq 입력 후 Enter
 
# 6. 결과 확인
cat practice.txt
rm practice.txt
  • 처음에는 모드 전환이 헷갈리지만, "글자가 안 들어가면 일단 Esc 후 i"라는 리듬을 익히면 금세 편해진다.
  • dd, yy, p, :wq만 손에 익혀도 서버 작업의 90%는 해결된다.

📖 용어

  • 모드(mode) : 같은 키가 다르게 동작하도록 나눈 vi의 상태. 명령·입력·마지막 행(ex) 세 가지.
  • 명령 모드 : vi를 켜면 처음 들어가는 상태. 글자 키가 전부 편집 명령으로 동작한다.
  • ex 모드(마지막 행 모드) : :를 눌러 들어가는 화면 하단 명령줄. 저장·종료·치환을 여기서 한다.
  • 레지스터(register) : vi의 클립보드에 해당하는 임시 저장 공간. dd한 내용이 여기 담겨 p로 살아난다.
  • yank : vi에서 "복사"를 뜻하는 말. 행 복사가 yy인 이유다.
  • :x / ZZ : 내용이 바뀐 경우에만 저장하고 나가는 명령. :wq와 달리 타임스탬프를 보존한다.
  • % (범위 지정자) : ex 명령에서 "파일 전체 행"을 뜻한다. :%s/old/new/g가 전체 치환인 이유.
  • .vimrc : vim이 시작할 때 읽는 개인 설정 파일. 끝의 rc는 "run commands"다.
  • hjkl : vi의 좌·하·상·우 이동 키. 화살표 키가 없던 ADM-3A 단말기에서 유래했다.
  • nano : 모드가 없고 하단에 단축키가 표시되는 초보자용 에디터. Ctrl+O 저장, Ctrl+X 종료.
  • emacs : Ctrl/Meta 조합으로 모든 기능을 호출하는 확장형 에디터. vi와 양대 산맥이다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

vi에서 현재 커서 위치의 다음(뒤)부터 텍스트를 입력하는 키는?

문제 2

vi의 명령 모드에서 현재 행을 삭제하는 명령은?

문제 3

vi에서 저장하지 않고 강제로 종료하는 명령은?

문제 4

vi의 ex 모드에서 파일 전체의 모든 apple을 orange로 치환하는 명령은?

문제 5

vi에서 복사(yank)한 내용을 붙여넣는 명령은?

문제 6

vim에서 행 번호를 표시하도록 영구 설정하려면 .vimrc에 추가할 항목은?

문제 7

nano 에디터에서 파일을 저장(write out)하는 단축키는?

이전텍스트 처리: 유닉스의 진짜 힘, 파이프라인으로 데이터를 다듬다Week 2 · Day 2다음 압축과 아카이브, 그리고 도움말: 파일을 묶고 줄이고, 스스로 배우는 법Week 2 · Day 4

참고 공식 자료

  • 리눅스마스터 1급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • vi의 핵심: 세 가지 모드
  • 입력 모드로 들어가기
  • 명령 모드에서의 커서 이동
  • 삭제, 복사, 붙여넣기
  • 검색
  • 마지막 행(ex) 모드: 저장과 종료
  • 치환: ex 모드의 강력한 기능
  • 환경 설정: .vimrc
  • nano 개요: 초보자 친화적 에디터
  • emacs 개요: 또 하나의 거인
  • 직접 쳐보기
  • 용어
  • 연습 문제