서버/Linux I 2015. 12. 23. 20:15
Linux I - 08. vi 편집기 사용 방법
[root@CentOS ~]# echo $PS1
[\u@\h \W]\$
[root@CentOS ~]# PS1="[\u@\h \$PWD]# "
[root@CentOS /root]# cd ..
[root@CentOS /]# mkdir test
[root@CentOS /]# cd test
[root@CentOS /test]#
vi 편집기는 유닉스 계열에서 가장 많이 사용되고 있는 편집기이다.
- 명령 모드 : vi 편집기 기본 모드, 입력을 명령어로 처리함
- 입력 모드 : i, I, a, A, o, O 를 입력하면 텍스트 입력이 가능한 모드, 입력을 파일에 입력함
- 확장 모드 : 왼쪽 하단에서 명령어를 수행하는 모드
1. vi 편집기 (오리지널 vi 편집기, root 계정은 기본적으로 이것을 사용함)
[root@CentOS /test]# ls -l /bin/vi
-rwxr-xr-x. 1 root root 770248 2012-04-05 18:18 /bin/vi
[root@CentOS /test]# whereis vi
vi: /bin/vi /usr/share/man/man1/vi.1.gz /usr/share/man/man1p/vi.1p.gz
[root@CentOS /test]# alias vi
-bash: alias: vi: not found
2. vim 편집기 (업그레이드판 vi 편집기, 방향키 사용 가능, 다른 계정은 이것을 사용함)
[root@CentOS /test]# ls -l /usr/bin/vim
-rwxr-xr-x. 1 root root 1967072 2012-04-05 18:18 /usr/bin/vim
[root@CentOS /test]# whereis vim
vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
[root@CentOS /test]# su - user1
[user1@CentOS ~]$ alias vi
alias vi='vim'
[user1@CentOS ~]$ exit
[root@CentOS /test]#
[vi 명령어 형식]
vi |
새 파일을 편집할 수 있다. 작업이 완료되었다면 이름을 지정하여 저장해야 한다. |
vi 파일이름 |
파일이름을 가진 파일이 있는 경우, 해당 파일을 편집한다. 만약, 없다면 새 파일을 편 집할 수 있는 상태로 시작한다. |
vi -R 파일이름 |
파일을 읽기 전용으로 오픈한다. |
vi -r 파일이름 |
이전 편집 파일을 복구시킨다. |
vi -L |
편집 파일이 비정상적으로 종료됬을 경우, 복구할 이전 파일 전체 목록을 확인할 수 있다. |
vi +13파일이름 |
파일의 13번째 라인부터 오픈한다. |
vi -c 13 파일이름 |
파일의 13번째 라인부터 오픈한다. |
vi +/"abcd" 파일이름 |
'abcd' 단어가 들어간 라인부터 오픈한다. |
[root@CentOS /test]# alias vi="vim"
[root@CentOS /test]# vi test
i -> Hell Test 입력 -> ESC -> : -> wq! 엔터
Hello Test
|
[root@CentOS /test]# cat test
Hello Test
[vi 편집기 자주 사용하는 키 모음]
커서 이동 |
명령어 삽입 | ||
h |
왼쪽 |
a |
커서 오른쪽 문자삽입 |
l |
오른쪽 |
A |
커서 오른쪽, 행 끝에 문자 삽입 |
k |
위 |
i |
커서 왼쪽 문자삽입 |
j |
아래 |
I |
커서 왼쪽, 행 처음에 문자 삽입 |
$ |
행 맨 뒤으로 이동 |
o |
커서 아래 행 삽입 |
0 |
행 맨 앞으로 이동 |
O |
커서 위에 행 삽입 |
w |
한단어 오른쪽 |
ESC |
명령어 삽입 키 사용 시작 |
b |
한단어 왼쪽 |
|
|
Return |
한행 아래 |
|
|
Backspace |
한문자 왼쪽 |
텍스트 삭제 | |
Spacebar |
한문자 오른쪽 |
x, 3x |
글자 삭제, 3글자 삭제 |
H |
화면 맨 위 |
dw, 3dw |
단어 삭제, 3단어 삭제 |
M |
화면 중간 |
dd, 3dd |
행 삭제, 3행 삭제 |
L |
화면 맨 아래 |
D |
커서 오른쪽 행 삭제 |
^F |
한화면 앞 |
:1,2 d |
1~2번째 라인 삭제 |
^D |
반화면 앞 |
행 번호 출력 | |
^B |
한화면 뒤 |
: set nu |
라인 번호 출력 O |
^U |
반화면 뒤 |
: set nonu |
라인 번호 출력 X |
텍스트 복사 및 이동 |
파일 저장 및 종료 | ||
yy, 3yy |
행 복사, 3행 복사 |
:w |
저장 |
Y |
행 복사 |
:w 파일이름 |
파일 이름으로 저장 |
p |
복사된 행을 현재 행 위에 삽입 |
:wq |
변경사항 저장하고 vi 종료 |
P |
복사된 행을 현재 행 아래 삽입 |
:q! |
변셩 사항 저장 않하고 vi 종료 |
:1,2 c 10 |
1~2행을 10행 다음으로 복사 |
|
|
:3,5 m 12 |
3~6행을 11행 다음으로 이동 |
|
|
행 찾기 |
|
| |
G |
파일의 마지막 행 이동 |
|
|
4G |
4번째 행 이동 (= :4) |
|
|
[참고] 글자 검색
명령어 |
내용 |
/찾을 내용 |
커서 아래로 원하는 내용 검색 |
?/찾을 내용 |
커서 위로 원하는 내용 검색 |
n |
다음 위치 검색 |
N |
이전 위치 검색 |
[root@CentOS /test]# cp /etc/group g.txt
[root@CentOS /test]# cp /etc/services s.txt
[root@CentOS /test]# ls
g.txt s.txt test
Ex1) 커서 이동 및 라인 번호 설정
[user1 /tmp/edit]$ vi s.txt
:set nu
:set nonu
:set nu
h - 좌
l - 우
j - 아래
k - 위
0 - 라인 맨 앞으로
$ - 라인 맨 끝으로
Ctrl+f - 다음 페이지
Ctrl+b - 이전 페이지
G - 맨 마지막 라인 이동
gg - 맨 첫번째 라인 이동
nG - n 번째 라인 이동
:q
Ex2) 문자 입력
[root@CentOS /test]# vi g.txt
:set nu
i - 커서 앞에서부터 입력
a - 커서 뒤에서부터 입력 ("l + i")
A - 라인 맨 뒤에서부터 입력 ("$ + a")
I - 라인 맨 앞에서부터 입력 ("0 + i")
o - 커서 아래쪽에 빈줄 생성 및 입력
O - 커서 위쪽에 빈줄 생성 및 입력
u - 취소 기능
Ctrl + r - 'u'로 취소한 내용을 다시 취소
:q!
Ex3) 문자 복사 & 붙여넣기
[root@CentOS /test]# vi g.txt
x - 지우기
nx - 커서 뒤쪽 n글자 삭제
dd - 현재 커서에서 라인 삭제
ndd - 현재 커서에서 n번째 라인까지 삭제
dw - 커서 단어 삭제
d$ - 커서 라인 삭제 및 라인 유지
dG - 커서 라인 포함해서 끝 라인까지 삭제
yy - 라인 복사
p - 커서 아래쪽 붙여넣기
P - 커서 위로 붙여넣기
nyy - n번째 라인까지 복사
3p - 커서 아래쪽 3번 붙여넣기
:13,21 co 37 <- 13~21라인을 37번째 아래에 복사&붙여넣기
:q!
Ex4) 치환 및 기타 명령어
[root@CentOS /test]# vi g.txt
cc - 삭제 후 바로 입력 가능 (치환 명령어)
J - 현 위치에서 아래 라인 올리기
. - 방금 전에 했던 명령어 및 입력 내용을 실행해줌
Ex5) vi 편집기 화면 정리 기능
[root@CentOS /test]# vi g.txt
Ctrl + l - vi 편집기 화면 정리 해줌
- Putty를 이용하여 root 계정으로 또 로그인 실시
login as: root
root@192.168.1.2's password:
Last login: Wed Jan 20 10:18:25 2016 from 192.168.1.1
[root@CentOS ~]# shutdown -h +50
Broadcast message from root@CentOS
(/dev/pts/1) at 11:23 ...
The system is going down for halt in 50 minutes!
- 기존 root 계정 Putty에서 vi 편집기 화면에 'shutdown' 관련 메세지 출력 확인 -> Ctrl + l 실시 -> 화면 정리 확인
:q!
- 새로 접속한 root 계정에서는 Ctrl + c를 이용하여 shutdown 실행 취소 실시
Ex6) 확장 모드 명령어 I
[root@CentOS /test]# vi g.txt
: ! - 쉘 명령어 실행 가능
: ! bash - 잠시 나가기 (Ctrl+z 동일, 다시 들어갈땐 fg 실시)
:!ls -d
[root@CentOS /test]# vi g.txt
합계 636
-rw-r--r--. 1 root root 804 2016-01-20 10:59 g.txt
-rw-r--r--. 1 root root 641020 2016-01-20 10:59 s.txt
-rw-r--r--. 1 root root 11 2016-01-20 10:21 test
Press ENTER or type command to continue
:!bash
[root@CentOS test]# ps
PID TTY TIME CMD
2602 pts/0 00:00:00 bash
23175 pts/0 00:00:00 vi
23180 pts/0 00:00:00 bash
23190 pts/0 00:00:00 ps
[root@CentOS test]# exit
: / <- 위에서 아래로 검색
: ? <- 아래에서 위로 검색
n - 검색 정방향 이동
N - 검석 역방향 이동
:noh - 검색된 내용에 색깔 표시를 초기화하는 기능
: 1,3s/daemon/DAEMON - 1~3라인의 daemon를 DAEMON로 변경
: 1,$s/daemon/DAEMON- 1~끝라인의 daemon를 DAEMON로 변경
: %s/daemon/DAEMON - 1~끝라인의 daemon를 DAEMON로 변경
: %s/daemon/DAEMON/g - 1~끝라인의 daemon를 DAEMON로 변경
(g : 같은 라인에 daemon가 2개 이상 있으면 한개만 변경됨. g를 이용하면 다 변경됨)
:q!
Ex7) 확장 모드 명령어 II
[root@CentOS /test]# vi test.c
/* test c program */ int main()
:wq! |
[root@CentOS /test]# vi test.c
- 다시 실행하면, 기존 set 내용 초기화됨, 그렇기 때문에 다음과 같이 set 내용을 '.vimrc'에 설정을 저장함
- 이 구성은 user1, user2 계정에도 동일하게 구성한다.
[root@CentOS /test]# cd
[root@CentOS /root]# vi .vimrc
set nu colo delek // SecureCRT를 사용할 경우, 설정함 syntax on // SecureCRT를 사용할 경우, 설정함
:wq!
|
[root@CentOS /root]# cat .vimrc
set nu
set ts=4
set title
set vb
colo delek
syntax on
[root@CentOS /root]# cd /test
[root@CentOS /test]# vi test.c
1 /* test c program */ 4 5 int main() :q! |
Ex8) root 계정에서 로그인할때, 'alias' 설정 없이 'vim'으로 사용하는 설정 및 PS1 변수 자동 설정
[root@CentOS /root]# cd /test
[root@CentOS /test]# cd
[root@CentOS /root]# ls .bash*
.bash_history .bash_logout .bash_profile .bashrc
[root@CentOS /root]# vi .bashrc
1 # .bashrc :wq! |
[root@CentOS /root]# source .bashrc
Ex9) user1 계정에서 로그인할때, PS1 변수 자동 설정 (user2에서 동일하게 구성 실시)
[root@CentOS /root]# su - user1
[user1@CentOS ~]$ pwd
/home/user1
[user1@CentOS ~]$ ls .bash*
.bash_history .bash_logout .bash_profile .bashrc
[user1@CentOS ~]$ vi .bashrc
# .bashrc # Source global definitions # User specific aliases and functions :wq! |
[user1@CentOS ~]$ source .bashrc
[user1@CentOS /home/user1]$ exit
logout
[root@CentOS /root]#
[root@CentOS /root]# cd ..
[root@CentOS /]# rm -rf test
Ex10) 두개 이상 계정이 동일한 파일을 vi 편집기로 오픈할 경우, 주의 사항
login as: user1
user1@192.168.1.2's password:
Last login: Wed Jan 20 13:19:37 2016 from 192.168.1.1
[user1@CentOS /home/user1]$
[user1@CentOS /home/user1]$ cd /tmp
[user1@CentOS /tmp]$ mkdir test
[user1@CentOS /tmp]$ cd test
[user1@CentOS /tmp/test]$
[user1@CentOS /tmp/test]$ vi test.c
1 /* test c program */ 4 5 int main()
:wq! |
[user1@CentOS /tmp/test]$ vi test.c
- user1에서 'test.c'를 vi 편집기로 오픈한 상태에서, 새로운 putty 창을 열어 root로 접속하여 다음과 같은 swp 파일을 확인한다.
login as: root
root@192.168.1.2's password:
Last login: Wed Jan 20 13:16:19 2016 from 192.168.1.1
[root@CentOS /root]#
[root@CentOS /root]# cd /tmp/test
[root@CentOS /tmp/test]# ls -a
. .. .test.c.swp test.c
- '.test.c.swp' 파일은 이미 다른 사용자가 vi 편집기로 오픈하고 있을 경우, 메모리에 올라가있는 swp 파일
- 만약, root에서 'test.c'를 vi 편집기로 오픈할 경우, 다음과 같은 경고 메세지가 출력된다.
[root@CentOS /tmp/test]# vi test.c
E325: 주목 (1) 다른 프로그램이 같은 파일을 고치고 있는중일 수 있습니다.
(2) 파일을 고치다가 죽었었습니다. 스왑 파일 ".test.c.swp"이 이미 존재합니다!
1 /* test c program */ 4 5 int main()
:q |
- root 및 user1에서 vi 편집기를 종료한다.
Ex11) vi 편집기 작업 중 시스템 오류 또는 재부팅/정전시 vi 편집기 작업 내용 복구
[user1@CentOS /tmp/test]$ vi test.c
1 /* test c program */ 4 5 int main() 9 puts("Hello CCIE"); // 설정 추가
|
- root에서 강제로 user1 vim 프로세스 종료 실시
[root@CentOS /tmp/test]# ps -ef | grep vim
user1 24349 24076 0 13:49 pts/1 00:00:00 vim test.c
root 24353 24203 0 13:49 pts/0 00:00:00 grep vim
[root@CentOS /tmp/test]# kill -KILL 24349
- user1 Putty 창 확인
1 /* test c program */ 4 5 int main() 9 puts("Hello CCIE"); 죽었음 |
[user1@CentOS /tmp/test]$ cat test.c
/* test c program */
// this is a comment too.
#include <stido.h>
int main()
{
puts("Hello CCNA");
puts("Hello CCNP");
return 0;
}
[user1@CentOS /tmp/test]$ ls -a
. .. .test.c.swp test.c
---------- vi 편집기가 비정상적으로 종료되면, swp 파일이 남아있기때문에 복구가 가능하다.
[user1@CentOS /tmp/test]$ cat .test.c.swp
U3210#"! Ut X`user1CentOS/tmp/test/test.cutf-8
ade
▒▒▒▒▒▒▒▒rge} return 0; puts("Hello CCIE"); puts("Hello CCNP"); puts("Hello CCNA");{int main()#include <stdio.h>//this is a comment too./* test c program */[user1@CentOS /tmp/test]$
[user1@CentOS /tmp/test]$
[user1@CentOS /tmp/test]$ vi test.c
E325: 주목 (1) 다른 프로그램이 같은 파일을 고치고 있는중일 수 있습니다. (2) 파일을 고치다가 죽었었습니다. 스왑 파일 ".test.c.swp"이 이미 존재합니다!
1 /* test c program */ 4 5 int main() 9 puts("Hello CCIE");
:wq! |
[user1@CentOS /tmp/test]$ cat test.c
/* test c program */
// this is a comment too.
#include <stido.h>
int main()
{
puts("Hello CCNA");
puts("Hello CCNP");
puts("Hello CCIE");
return 0;
}
[user1@CentOS /tmp/test]$ ls -a
. .. .test.c.swp test.c
- 복구가 되어도, 파일이 남아있기 때문에 삭제를 해야한다.
- 만약, 삭제를 하지 않으면, 'test.c' 파일을 오픈할때 마다 경고 메세지가 나온다.
[user1@CentOS /tmp/test]$ rm .test.c.swp
[user1@CentOS /tmp/test]$ ls -a
. .. test.c
[root@CentOS /tmp/test]# cd ..
[root@CentOS /tmp]# rm -rf test
[root@CentOS /tmp/test]# cd ..
[root@CentOS /tmp]# rm -rf test
[root@CentOS /tmp]# cd
- ' vimtutor'를 실시하여 vi 편집기 연습을 실시하도록 한다.
[root@CentOS /root]# vimtutor
VMware Snapshot을 실시한다.
VMware -> VM -> Shapshot -> Take Snapshot -> Snapshot 이름 '기본 명령어 학습 완료'
'서버 > Linux I' 카테고리의 다른 글
Linux I - 10. 계정 생성 및 관리 (0) | 2016.01.20 |
---|---|
Linux I - 09. 파일 속성 관리 (퍼미션) (0) | 2015.12.24 |
Linux I - 07. 리눅스 기본 명령어 (메타 케릭터/리다이렉션/파이프) (0) | 2015.12.23 |
Linux I - 06. 리눅스 기본 명령어 (기타 관리 및 검색 명령어) (0) | 2015.12.23 |
Linux I - 05. 리눅스 기본 명령어 (파일 내용 확인 명령어) (0) | 2015.12.23 |