CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
  • Week 1
    • 1.운영체제와 커널: 리눅스가 하는 일
    • 2.리눅스의 탄생: 유닉스에서 리누스까지
    • 3.자유 소프트웨어와 오픈소스: 라이선스가 정하는 것
    • 4.배포판: 커널과 도구를 하나로 묶어 파는 단위
    • 5.Week 1 종합 복습: 리눅스라는 이름의 정체
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
    • 1.vi 편집기의 세 가지 모드
    • 2.vi 검색·치환과 다른 편집기
    • 3.프로세스의 개념과 유형
    • 4.프로세스 명령과 작업 예약
    • 5.Week 6 종합 복습: 에디터와 프로세스
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
리눅스마스터 1급 · 1급리눅스마스터 1급
합격 후기

© CertNote · 주간랩스

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

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

리눅스마스터 2급· AssociateWeek 6 · Day 1읽기 약 10분
핵심 정리
  • 에디터는 줄 단위로 다루는 라인 에디터(ed, ex) 와 화면 전체를 다루는 스크린 에디터(vi, emacs) 로 나뉜다.
  • vi는 Bill Joy가 만들었다. C 셸(csh)을 만든 사람과 같다.
  • vi에는 명령 모드 · 입력 모드 · ex 모드 세 가지가 있다. 시작하면 명령 모드다.
  • 모드 전환은 i(입력으로) · ESC(명령으로) · :(ex로) 세 키로 한다.
  • 저장은 :w, 종료는 :q, 저장 후 종료는 :wq, 강제 종료는 :q! 다.

Day 1 - vi 편집기의 세 가지 모드

에디터의 갈래

구분다루는 단위예
라인 에디터한 줄씩ed, ex, sed
스크린 에디터화면 전체vi, vim, emacs, nano, pico
에디터특징
viBill Joy가 개발. 거의 모든 유닉스에 기본 탑재
vimVi IMproved — vi의 개선판. 현재 리눅스의 표준
emacsRichard Stallman이 개발. 매우 확장성이 크다
pico초보자용. 단순하다
nanopico의 개선판(GNU). 화면 아래에 단축키가 보인다
geditGNOME 데스크톱의 그래픽 편집기

누가 만들었는지를 그대로 묻는다. vi는 Bill Joy, emacs는 Richard Stallman이다. Bill Joy는 C 셸(csh)도 만들었다는 점을 함께 기억하면 좋다.

어떻게 이어져 왔나

   ed (라인 에디터)  →  ex (라인 에디터, Bill Joy)  →  vi (ex 의 화면 모드, 1976)  →  vim (Bram Moolenaar, 1991)
 
   pico (메일 프로그램 Pine 의 편집기)  →  nano (GNU)
  • vi는 ex에 "화면을 보며 편집하는(visual) 모드"를 붙인 것이다. 이름도 visual에서 왔다. vi 안에서 :로 부르는 명령이 바로 ex 명령이며, 세 번째 모드를 ex 모드라 부르는 이유다.
  • sed는 대화형이 아닌 스트림 편집기다. 파일을 열어 놓고 고치는 것이 아니라 명령으로 지시한 편집을 흘려보내며 처리한다. 줄 단위로 동작하므로 분류할 때는 라인 에디터 쪽에 둔다.
  • 요즘 리눅스에서 vi를 실행하면 실제로는 vim이 뜨는 경우가 대부분이다. 배포판에 따라 기능을 줄인 판이 설치되어 있기도 하다.
실행 환경편집기
콘솔(터미널)vi, vim, emacs, nano, pico
그래픽(X 윈도)gedit(GNOME), kate·kwrite(KDE), emacs
  • "종류가 다른 것"을 고르는 문제는 라인/스크린 또는 콘솔/그래픽 둘 중 한 기준으로 나온다.

세 가지 모드

              ┌──────────────────┐
              │    명령 모드      │  ← 시작하면 여기
              │  (command mode)  │     이동 · 삭제 · 복사
              └──────────────────┘
            i a o  │        ▲  │  :
                   ▼   ESC  │  ▼
      ┌──────────────┐   ┌──────────────┐
      │   입력 모드   │   │    ex 모드    │
      │ (insert mode)│   │ (last line)  │
      │   글자 입력   │   │  저장 · 종료  │
      └──────────────┘   └──────────────┘
모드하는 일들어가는 법
명령 모드이동·삭제·복사·붙여넣기시작 상태, ESC
입력 모드실제 글자 입력i, a, o, I, A, O
ex 모드저장·종료·검색치환: (콜론)
  • vi를 열면 명령 모드다. 바로 타자를 치면 글자가 입력되지 않고 명령으로 해석된다. 초보자가 가장 당황하는 지점이다.
  • 어느 모드에 있든 ESC를 누르면 명령 모드로 돌아온다. 헷갈리면 일단 ESC다.
  • ex 모드는 명령 모드에서만 들어갈 수 있다. 입력 모드에서 :를 치면 그냥 콜론 글자가 입력된다.

같은 모드, 다른 이름

교재와 문제마다 모드를 부르는 말이 다르다. 같은 것을 가리킨다는 것만 알면 된다.

이 문서의 이름다르게 부르는 말
명령 모드command mode, 일반(normal) 모드
입력 모드insert mode, 편집 모드, 삽입 모드
ex 모드라스트 라인(last line) 모드, 콜론 모드, 실행 모드
  • 입력 모드와 ex 모드 사이에는 직행이 없다. 반드시 ESC로 명령 모드를 거친다. 그림에서 두 상자 사이에 화살표가 없는 이유다.
  • ex 모드의 명령은 엔터를 누르면 실행되고 저절로 명령 모드로 돌아온다. 취소하려면 ESC다.

화면 맨 아랫줄 읽기

   ~
   ~
   "test.txt" [New File]              ← 없는 파일을 열었을 때
   -- INSERT --                       ← i 를 누른 뒤 (vim)
   :wq                                ← ESC 다음 : 를 누르면 여기에 입력된다
   "test.txt" 3L, 42C written         ← 저장 결과 — 3줄 42글자
  • 맨 아랫줄이 지금 상태를 알려 준다. vim에서 -- INSERT -- 가 보이면 입력 모드, 아무것도 없으면 명령 모드다.
  • 줄 앞의 ~는 파일 내용이 아니다. 파일이 끝난 뒤의 빈 화면이라는 표시다.
  • ex 모드가 "라스트 라인 모드"라고 불리는 것도 명령이 화면 마지막 줄에 입력되기 때문이다.

입력 모드로 들어가는 키

키커서 기준 위치
i커서 앞에 삽입 (insert)
a커서 뒤에 삽입 (append)
I줄 맨 앞에 삽입
A줄 맨 끝에 삽입
o아래에 새 줄을 만들고 삽입 (open)
O위에 새 줄을 만들고 삽입
  • 소문자와 대문자가 짝이다. 소문자는 커서 근처, 대문자는 줄 전체 기준이다.
  • i와 a의 차이 — 앞이냐 뒤냐가 갈림길이다.
   원래 줄    Linux        (커서가 n 위에 있다)
 
   i 후 X  →  LiXnux       커서 앞
   a 후 X  →  LinXux       커서 뒤
   I 후 X  →  XLinux       줄 맨 앞
   A 후 X  →  LinuxX       줄 맨 끝

고치면서 입력 모드로 들어가는 키도 있다.

키하는 일끝난 뒤 모드
r커서의 한 글자만 다른 글자로 교체 (replace)명령 모드 그대로
R누른 자리부터 덮어쓰기ESC를 누를 때까지 덮어쓴다
s커서의 한 글자를 지우고 입력입력 모드
cw커서부터 단어 끝까지 지우고 입력 (change word)입력 모드
cc줄 전체를 지우고 입력입력 모드
  • r은 입력 모드로 가지 않는다. 한 글자만 바꾸고 바로 명령 모드에 남는다. "입력 모드로 전환하는 키가 아닌 것"으로 r이나 x가 보기에 나온다.

명령 모드에서 하는 일

이동

키방향
h j k l왼쪽 · 아래 · 위 · 오른쪽
0줄의 맨 앞
$줄의 맨 끝
gg파일의 첫 줄
G파일의 마지막 줄
숫자G그 줄 번호로
w / b다음 / 이전 단어
  • h j k l의 순서를 묻는 문제가 나온다. 키보드 배열 그대로 왼·아래·위·오른쪽이다. 가운데 두 개가 헷갈리기 쉽다.
키방향
^줄에서 공백이 아닌 첫 글자
e단어의 끝
H / M / L화면의 맨 위 / 가운데 / 맨 아래 줄
Ctrl+f / Ctrl+b한 화면 아래로(forward) / 위로(backward)
Ctrl+d / Ctrl+u반 화면 아래로(down) / 위로(up)
:숫자그 줄 번호로 (:10)
:$파일의 마지막 줄로
  • 숫자를 앞에 붙이면 그만큼 반복한다. 5j는 다섯 줄 아래, 3w는 세 단어 뒤다.
  • $의 뜻이 자리에 따라 다르다. 명령 모드의 $는 줄의 끝, ex 모드의 :$는 파일의 마지막 줄이다.
  • 같은 곳으로 가는 길이 여럿이다 — 첫 줄은 gg·1G·:1, 마지막 줄은 G·:$.
  • G는 대문자, gg는 소문자 두 번이다. 방향키로도 움직이지만 시험은 h j k l을 묻는다.

삭제 · 복사 · 붙여넣기

키하는 일
x커서 위치 한 글자 삭제
dd한 줄 삭제(잘라내기)
숫자dd그 줄 수만큼 삭제 — 3dd는 세 줄
dw한 단어 삭제
yy한 줄 복사 (yank)
숫자yy그 줄 수만큼 복사
p커서 아래에 붙여넣기 (paste)
P커서 위에 붙여넣기
u실행 취소 (undo)
Ctrl+r다시 실행 (redo)
  • dd는 삭제이면서 잘라내기다. 지운 내용이 버퍼에 남아 p로 붙일 수 있다.
  • yy(복사)와 dd(잘라내기), 그리고 p(붙여넣기) 가 한 묶음이다.
키하는 일
X커서 앞 한 글자 삭제
D커서부터 줄 끝까지 삭제 (d$와 같다)
d0커서 앞부터 줄 처음까지 삭제
dG현재 줄부터 파일 끝까지 삭제
yw한 단어 복사
J아래 줄을 현재 줄 끝에 이어 붙이기 (join)
U그 줄에서 한 변경을 전부 취소
.직전 명령 반복
  • 규칙은 하나다 — 동작(d 삭제 · y 복사 · c 바꾸기) + 범위(w 단어 · $ 줄 끝 · G 파일 끝). 같은 글자를 두 번 치면(dd, yy, cc) 줄 전체가 대상이다.
  • 3dd는 커서가 있는 줄부터 아래로 세 줄이다. 위쪽 줄은 건드리지 않는다.
  • p가 붙이는 자리는 버퍼에 든 것에 따라 다르다. 줄 단위(dd, yy)면 아래 줄에, 글자 단위(x, dw)면 커서 뒤에 붙는다.
하고 싶은 일키 순서
줄을 다른 곳으로 옮기기dd → 옮길 곳으로 이동 → p
줄을 복제하기yy → p
다섯 줄을 복사해 파일 끝에 붙이기5yy → G → p
방금 한 삭제를 되돌리기u

ex 모드 — 저장과 종료

명령하는 일
:w저장(write)
:q종료(quit)
:wq저장 후 종료
:q!저장하지 않고 강제 종료
:w!강제 저장 (읽기 전용 파일 등)
:w 파일명다른 이름으로 저장
:set nu줄 번호 표시
ZZ저장 후 종료 (:wq와 같다, 명령 모드에서)

!는 강제를 뜻한다. 고쳐 놓고 :q를 하면 "저장하지 않았다"는 경고가 뜬다. 변경을 버리고 나가려면 :q! 다. 이 명령을 묻는 문제는 오답 보기와 구분이 필요하다.

vi test.txt        # 파일 열기 (없으면 새로 만든다)
vi +10 test.txt    # 10번째 줄에서 열기
vi -R test.txt     # 읽기 전용으로 열기

경고 메시지와 느낌표

   E37: No write since last change (add ! to override)     ← 고친 뒤 :q 를 했을 때
   E45: 'readonly' option is set (add ! to override)       ← 읽기 전용으로 연 파일에서 :w 를 했을 때
  • 두 메시지 모두 "강제로 하려면 !를 붙여라" 고 알려 준다. 앞의 경우는 :q! 또는 :wq, 뒤의 경우는 :w! 다.
  • 단 :w!도 권한까지 넘지는 못한다. 일반 사용자가 /etc/passwd 처럼 쓸 권한이 없는 파일을 열었다면 :w! 로도 저장되지 않는다. 그때는 :q! 로 나와 root 권한으로 다시 연다.
명령하는 일
:x저장 후 종료 — :wq와 같지만 바뀐 것이 있을 때만 저장한다
:wq!강제로 저장한 뒤 종료
:e 파일명다른 파일 열기
:e!고친 것을 버리고 마지막으로 저장한 상태로 되돌리기
:r 파일명그 파일의 내용을 커서 아래에 끼워 넣기 (read)
:!명령vi를 나가지 않고 셸 명령 실행 — :!ls
:sh셸로 잠시 나가기. exit 하면 vi로 돌아온다
:1,5d1~5번째 줄 삭제
  • :w는 쓰기, :r은 읽어 넣기다. 방향이 반대다.
  • ZZ에는 콜론이 없다. 명령 모드에서 대문자 Z를 두 번 누른다. ex 명령이 아니다.
  • 변경을 버리는 방법이 둘이다 — :q!는 버리고 나가기, :e!는 버리고 계속 편집하기.

열 때 주는 옵션

실행하는 일
vi + 파일마지막 줄에서 열기
vi +숫자 파일그 줄 번호에서 열기
vi +/패턴 파일그 패턴이 처음 나오는 줄에서 열기
vi -R 파일읽기 전용으로 열기 (view 파일과 같다)
vi -r 파일비정상 종료된 편집 내용을 스왑 파일에서 복구
  • -R(대문자)은 읽기 전용, -r(소문자)은 복구다. 대소문자 하나로 뜻이 갈린다.
  • vim은 편집하는 동안 .test.txt.swp 같은 숨김 스왑 파일을 만든다. 터미널이 끊겨 저장하지 못했을 때 이 파일로 되살린다.

내일은 vi의 검색·치환과 설정, 그리고 다른 에디터들을 다룬다.

📖 용어

  • 라인 에디터 : 한 줄 단위로 편집하는 편집기. ed, ex가 여기 속한다.
  • 스크린 에디터 : 화면 전체를 보며 편집하는 편집기. vi, emacs, nano가 여기 속한다.
  • 명령 모드 : vi를 실행하면 처음 놓이는 모드. 이동과 삭제·복사를 한다.
  • 입력 모드 : 실제로 글자를 입력하는 모드. i, a, o 등으로 들어간다.
  • ex 모드 : 콜론으로 들어가는 모드. 저장·종료·치환을 수행한다.
  • dd : 한 줄을 잘라내는 명령. 버퍼에 남아 p로 붙여 넣을 수 있다.
  • yy : 한 줄을 복사하는 명령(yank).
  • :q! : 변경 내용을 저장하지 않고 강제로 종료하는 명령.

📝 연습 문제

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

문제 1

다음 중 vi 편집기를 처음 실행했을 때 놓이는 모드로 알맞은 것은?

문제 2

다음 중 vi 편집기에서 변경 내용을 저장하지 않고 강제로 종료하는 명령으로 알맞은 것은?

문제 3

다음 중 vi 편집기에서 커서가 있는 줄 전체를 삭제하는 명령으로 알맞은 것은?

문제 4

다음 중 vi 편집기를 개발한 사람으로 알맞은 것은?

문제 5

다음 중 vi 편집기에서 커서 아래에 새로운 줄을 만들면서 입력 모드로 전환하는 키로 알맞은 것은?

이전Week 5 종합 복습: 셸 한 장 정리Week 5 · Day 5다음 vi 검색·치환과 다른 편집기Week 6 · Day 2

참고 공식 자료

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

이 페이지

  • 에디터의 갈래
  • 어떻게 이어져 왔나
  • 세 가지 모드
  • 같은 모드, 다른 이름
  • 화면 맨 아랫줄 읽기
  • 입력 모드로 들어가는 키
  • 명령 모드에서 하는 일
  • 이동
  • 삭제 · 복사 · 붙여넣기
  • ex 모드 — 저장과 종료
  • 경고 메시지와 느낌표
  • 열 때 주는 옵션
  • 용어
  • 연습 문제