들어가기
텍스트 에디터는 리눅스 환경에서 매우 중요한 비중을 차지합니다.
대부분의 시스템 설정 파일이 텍스트 기반으로 관리되기 때문에,
에디터를 능숙하게 사용할 수 있어야 설정을 수정하거나 새로 작성할 수 있습니다.
리눅스에는 vi, vim, nano 등 여러 텍스트 편집기가 존재하지만,
본 내용에서는 가장 범용적으로 사용되는 vim을 기준으로 정리합니다.
TIP : vimtutor 명령어
vim을 설치 후 vimtutor 명령어를 입력하면
vim을 사용하기 위한 튜토리얼이 실행됩니다.
튜토리얼을 완료하기만 해도 기본기는 익숙해져 있을겁니다.
(요즘은 한국어로도 지원이 됩니다…!)

VI AND VIM
- vi : Visual Display Editor 입니다.
- vim : Vi IMproved 입니다.
vim은 기존 vi 에디터를 개선한 확장 버전입니다.
현재 대부분의 리눅스 배포판에서는 vim 또는 vi 호환 버전이 기본 제공됩니다.
VI 에디터
3가지 모드로 동작합니다.
- 명령 모드 : 커서 이동, 삭제, 복사 등의 작업을 수행합니다.
- 입력 모드 : 실제 텍스트를 입력하는 모드입니다.
- 콜론 모드 : 저장, 종료, 검색, 치환 등의 명령을 실행합니다.
모드 개념을 이해하지 못하면 vi 사용이 매우 어렵게 느껴질 수 있습니다.
VIM 명령모드 & 콜론모드
- :set number (set nu) : 왼쪽에 줄 번호를 표시합니다.
- :wq : 저장 후 종료합니다.
- :q : 종료합니다. 변경 사항이 있으면 종료되지 않습니다.
- :q! : 변경 사항을 무시하고 강제로 종료합니다.
커서 이동
-
h : 왼쪽으로 이동합니다.
-
j : 아래로 이동합니다.
-
k : 위로 이동합니다.
-
l : 오른쪽으로 이동합니다.
-
숫자G : 해당 행 번호로 이동합니다.
-
G : 마지막 행으로 이동합니다.
-
$ : 현재 행의 끝으로 이동합니다.
-
^ : 현재 행의 처음으로 이동합니다.
이동 단위
- w : 단어 단위로 앞으로 이동합니다.
- b : 단어 단위로 뒤로 이동합니다.
- 숫자 + 명령어 : 명령을 숫자만큼 반복 실행합니다.
삭제
- x : 커서 위치의 문자를 삭제합니다.
- dw : 한 단어를 삭제합니다.
- dd : 한 행을 삭제합니다.
- d$, d^ : 커서부터 행의 끝 또는 처음까지 삭제합니다.
- dG : 커서부터 파일 끝까지 삭제합니다.
복사 및 붙여넣기
- yw : 한 단어를 복사합니다.
- yy : 한 행을 복사합니다.
- p : 커서 아래에 붙여넣습니다.
- P : 커서 위에 붙여넣습니다.
삭제된 내용은 버퍼에 저장되며, 바로 붙여넣기가 가능합니다.
실행 취소
- u : 이전 작업을 취소합니다.
VIM 입력모드 진입 방법
- a : 커서 다음 위치에서 입력을 시작합니다.
- i : 커서 현재 위치에서 입력을 시작합니다.
- o : 다음 줄을 생성하고 입력을 시작합니다.
- esc : 입력 모드를 종료하고 명령 모드로 돌아갑니다.
입력 모드에서는 명령어가 동작하지 않으므로 주의가 필요합니다.
VIM 콜론모드
-
/검색어 : 검색을 수행합니다.
- n : 다음 검색 결과로 이동합니다.
- N : 이전 검색 결과로 이동합니다.
-
:시작행,끝행s/검색어/변경어/g : 범위 지정 치환을 수행합니다.
- 예 : :23,27s/old/new/g
- 예 : :%s/tcp/breaktime/g
-
:2,20d : 2행부터 20행까지 삭제합니다.
-
:w [경로] : 지정한 경로에 다른 이름으로 저장합니다.
VI 에디터 커스터마이징
- 홈 디렉터리에
.vimrc파일을 생성하여 기본 설정을 정의할 수 있습니다. - 자주 사용하는 옵션을 미리 설정해두면 작업 효율이 크게 향상됩니다.
예를 들어 줄 번호 표시, 탭 설정 등을 등록할 수 있습니다.
Communication Channels
리눅스에는 기본적으로 3가지 표준 채널이 존재합니다.
- STDIN : 표준 입력입니다.
- STDOUT : 표준 출력입니다.
- STDERR : 표준 에러 출력입니다.
파일 디스크립터 번호는 각각 0, 1, 2로 할당되어 있습니다.
File Redirection
입력 리다이렉션
- 기호 :
< - 파일 내용을 표준 입력으로 전달합니다.
bashtr a-z A-Z < test2.txt
출력 리다이렉션
>: 덮어쓰기 출력입니다.>>: 이어서 출력입니다.
| 파일 상태 | > | >> |
|---|---|---|
| 존재함 | 덮어씀 | 추가 |
| 없음 | 생성 | 생성 |
에러 리다이렉션
2>,2>>: 표준 에러를 파일로 저장합니다.
bashfind / 2>> errors
널 디바이스
/dev/null: 출력 결과를 버립니다.
bashfind /etc -name test 2> /dev/null
출력 병합
bashls -R /proc > output 2>&1
표준 출력과 에러 출력을 하나의 파일로 합칩니다.
파이프
- 앞 명령어의 표준 출력을 뒤 명령어의 입력으로 전달합니다.
bashcat /etc/passwd | grep bash | cut -d: -f1,3,6- | sort
에러 출력은 파이프로 전달되지 않습니다.
Tar 파일
- tar는 여러 파일을 하나로 묶는 아카이브 도구입니다.
기본 옵션
- cvf : 생성합니다.
- tvf : 목록을 확인합니다.
- xvf : 해제합니다.
압축 옵션
- z : gzip
- j : bzip2
- J : xz
압축 여부와 관계없이 tar 파일은 아카이브 개념입니다.
SED 명령어
bashsed 's/coffee/milk/g' sed.txt
sed '/2003/d' sed.txt
스트림 편집기로, 파일을 직접 수정하지 않고 결과를 출력합니다.
AWK 명령어
bashawk '/monday/ {print $1,$4}' awk.txt
필드 기반 데이터 처리에 특화된 도구입니다.
WC 명령어
bashwc awk.txt
who | wc -l
줄, 단어, 문자 개수를 확인할 수 있습니다.
TR 명령어
bashdate | tr i3K a
문자 단위 치환에 사용됩니다.
SORT 명령어
bashsort -n -t: -k3 /etc/passwd
정렬 기준과 구분자를 명확히 지정하는 것이 중요합니다.
CUT 명령어
bashcut -d: -f1,3,6 /etc/passwd
열 기반 데이터 추출에 사용됩니다.
마치면서
이번 내용에서는 vi/vim 사용법과 함께,
리눅스에서 자주 사용되는 표준 입출력과 텍스트 처리 명령어를 정리했습니다.
처음에는 익숙하지 않더라도,
반복적으로 사용하다 보면 자연스럽게 손에 익게 되니 자주 사용해 보시기 바랍니다!