기본 콘텐츠로 건너뛰기

Linux Command 6

square72_blue.gif vi 에디터 사용법

1. vi 시작하기: vi filename

2. vi 끝내기: :w (save하기, 끝나지는 않는다.)

:q (빠져나옴,고치지 않았을때)

:wq (또는 ZZ) (save하고 빠져나옴)

:q! (고친 것을 포기하고 빠져나옴)

3. vi의 두 모드(mode)

1) 편집모드

- 화면 맨 아랫쪽 첫째 column에 ":"가 없는 경우를 말함. (vi를 시작했을 때 상태 그대로가 편집모드이다.)

- 대부분의 명령은 알파벳 글자 하나를 누름으로써 수행된다.

- 편집모드에는 string의 수정(R, replace), 삽입( i 또는 a, insert), 대치(s, substitution)모드 등이 별개로 존재하고 각 모드는 Esc키를 누름으로써 끝난다.

2) Command모드

- 편집모드에서 사용자가 ":"(콜론)을 쳐서 화면 맨 아랫쪽 첫째 column에 ":"가 있는 경우를 말함.

- command모드는 ":"를 쳐서 시작하고 엔터를 침으로써 끝이 난다.

- 이후 ":"로 시작되는 명령어는 모두 command모드를 의미한다.

4, cursor의 이동

    명 령

    설 명

h

l

k

j

0

$

w

b

:n 엔터

G 또는 :$ 엔터

'←'와 같다. *되도록 화살표키를 사용하지 말고 "h,l,k,j"를 사용하도록 !

'→'와 같다. ( 키보드에서 손을 떼지않고 cursor를 이동시킬 수 있고

'↑'와 같다. 터미날 Type에 구애받지 않는 vi 장점 중의 장점 )

'↓'와 같다.

cursor가 있는 현재 line의 첫 column으로

cursor가 있는 현재 line의 맨끝으로

다음 단어로(forward)

이전 단어로(backward)

파일의 n번 line으로

파일의 마지막 line으로

* Command모드에서 "."는 현재 line을, "$"는 마지막 line을 뜻한다.

5. 화면의 이동

명 령

설 명

CTRL-f

CTRL-b

CTRL-d

CTRL-u

화면을 한 페이지씩 앞으로(forward) 이동

화면을 한 페이지씩 뒤로(backward) 이동

화면을 앞으로(downward) scroll 이동

화면을 뒤로(upward) scroll 이동

6. 수정 & 삽입 & 삭제

    명 령

    설 명

r

R

현재 cursor 위치의 한 글자를 뒤이어 치는 한 글자로 바꿈.(그런다음 자동으로 편집모드로 복귀)

수정모드 시작 (현재 cursor 위치부터 Esc키를 누를 때까지 입력하는 글자들로 계속 덮어 씀)

i

a

삽입모드 시작 (현재 cursor 위치에 Esc키를 누를 때까지 입력되는 글자들을 삽입)

삽입모드 시작 (현재 cursor 뒤로 Esc키를 누를 때까지 입력되는 글자들을 삽입)

s

대치모드 시작 (현재 cursor 위치의 한 글자를 Esc키를 누를 때까지 입력되는 글자들로 대치)

x

D

dd

ndd

:n,m d 엔터

:.,m d 엔터

현재 cursor 위치의 한 글자를 지운다.

현재 line의 cursor 이후의 글자들을 지운다

현재 cursor가 있는 line을 지운다.

현재 line부터 n개의 line을 지운다.

n번 line에서 m번 line까지 지움.

현재 line에서 m번 line까지 지움.

* vi에서는 지워진 내용을 임시기억장소(buffer)에 저장하므로 지운 내용을 "p" 또는 "P"로 다른 곳에 복사할 수 있다. (7. 복사 & 이동 참조)

7. 검색 및 치환 (Search & Replace)

    명 령

    설 명

/string 또는 :s/string 엔터

string을 찾는다

- 다음 occurrence는 "n"(forward) 또는 "N"(backward)으로 찾는다.

:n,m s/string1/string2 엔터

:n,m s/string1/string2/g 엔터

:n,m s/string1/string2/gc 엔터

n번 line에서 m번 line까지의 "string1" 중 각 line에서 첫 번째로 나오는 "string1"만을 "string2"로 바꿈.

n번 line에서 m번 line까지의 "string1" 모두를 "string2"로 바꿈.

n번 line에서 m번 line까지의 "string1" 모두를 "string2"로 바꾸되

각각에 대해서 confirm을 한다.(y/n 물어봄.)

8. 복사 & 이동

    모드

    명령

    설 명

편집

모드

yy 또는 Y

nyy 또는 nY

dd

ndd

p

P

현재 line을 버퍼에 저장.

현재 line부터 n개의 line을 버퍼에 저장

현재 line을 지우고 그 내용을 버퍼에 저장.

현재 line부터 n개의 line을 지우고 내용을 버퍼에 저장

버퍼의 내용을 현재 line뒤에 붙인다.(paste)

버퍼의 내용을 현재 line앞에 붙인다.

* vi에서는 임시기억장소(buffer,버퍼)를 사용하므로 어느 한 부분을

버퍼에 넣어 "p" 또는 "P"로 이동하거나 복사할 수 있다.

( 버퍼는 다른 내용이 들어가면 그 이전 내용은 지워진다. )

command

모드

:n1,n2 y

:n1,n2 t n3

:n1,n2 m n3

n1번 line에서 n2번 line까지를 버퍼에 저장.(버퍼내용을 쓸때는 "p 또는 P")

n1번 line에서 n2번 line까지를 n3번째 line 뒤에 복사

n1번 line에서 n2번 line까지를 n3번째 line 뒤로 이동(move)

9. 꼭 알아두어야 할 것들

1) vi에서의 모든 명령은 소문자,대문자를 구별한다.

2) 수정(R), 삽입(i 또는 a), 대치(s) 등의 "string을 입력"하는 작업이 끝나면 반드시 Esc키를 눌러서 각 모드(수정,삽입,대치모드)가 끝났으며, 그 다음에 치는 글자는 '편집모드의 명령어'임을 vi에게 알려주는 것을 잊지말도록 !

3) 편집모드의 명령 앞에 숫자가 입력되면 그 숫자만큼 명령을 반복하라는 뜻이 된다. (예)글자"a"를 삽입하는 경우 명령은 "ia Esc"이지만, 만약에 "13ia Esc"라고 치면 "a"가 13개 삽입된다.

4) 그밖의 중요한 명령들.....

이전 명령의 반복

(편집모드에서) "."를 친다.

- vi 최대의 장점, vi-Editng실력은 "."활용에서부터 !

이전 명령의 취소(undo)

(편집모드에서) "u"를 친다.

n번째 column으로 가고싶을때

n| ( n값이 현재 line 끝의 column을 초과하면 cursor는

line 끝에 머문다. )

현재 line과 다음 line을 합할 때(join)

J

현재 line을 분리할 때

분리하고자 하는 위치에 "엔터"를 삽입(insert)한다.("i"명령이용)

line번호를 보면서 작업할려면? auto-indent를 하고 싶을 때

right margin을 주고 싶을 때

현재가 어떤 모드인지 display

괄호가 잘 match되는지?

( command모드에서 setting을 한다. ":set all 엔터"하면 모든 option이 출력된다.)

:set nu 엔터 (없앨때는 :set nonu 엔터)

:set ai 엔터 (없앨때는 :set noai 엔터)

:set wm=8 엔터 (right margin 8 column)

:set showmode 엔터

:set showmatch 엔터

* c-shell을 사용하는 system이라면 아래와 같이 "EXINIT"이라는

environment변수를 설정하여 미리 vi를 setting 할 수 있다.

% setenv EXINIT 'set nu ai wm=8 showmode' 엔터

현재 편집 중인 파일이름이 무엇이며 총 line수는 얼마인지?

: f 엔터 또는 CTRL-g

n번째 line에서 m번째 line까지를 다른 이름의 파일로 저장하고 싶을때

:n,m w filename 엔터 ( 이미 filename이 있는 경우에 덮어쓰는 경우라면 :n,m w! filename 엔터 )

다른 파일을 불러올 때

:re filename 엔터 (현재 line 뒤에 붙는다)

댓글

익명님의 메시지…
yeah... attractive style :))
익명님의 메시지…
좋은자료 감사합니다..

이 블로그의 인기 게시물

VIDEO_DXGKRNL_FATAL_ERROR on Windows 8.1

Windows 8.1 로 업데이트 이후, Booting 시 Blue Screen 이 뜨면서, VIDEO_DXGKRNL_FATAL_ERROR 또는 SYSTEM_SERVICE_EXCEPTION (atikmpag.sys)  가 발생하는 문제점이 있을 때, 아래와 같이 조치해 보십시오. 제어판 -> 전원 옵션 -> 설정 변경 덮개를 닫으면 수행되는 작업 선택 -> 현재 사용할 수 없는 설정 변경 -> 종료 설정 -> 빠른 시작 켜기(권장)의 Check Box 를 해제함.

Ubuntu (Kubuntu) 에 desktop 파일 만들기

Package 관리자등을 통해 직접 Repository 에 있는 Application 을 설치하는 경우에는 필요한 경로와 파일, Category 로 분류된 Icon 등록 등이 자동적으로 이루어지나 firefox, eclipse 등 새로운 버전을 새로 설치할 경우, 다음과 같은 절차를 통해 시작메뉴에 등록시킬 수 있다. 다음은 eclipse-SDK-3.6-linuxx-gtk.tar.gz 을 받아 설치 등록하는 것을 예로 든다. 1. 다운받은 파일을 /usr/lib에 압축해제한다. (물론, super user 계정으로 실행해야 한다.) 2. 보통의 경우, /usr/bin Directory 는 PATH 에 물려 있으므로 다음과 같은 실행 파일을 만들어 놓는다. # cd /usr/lib # chmod +x eclipse # cd /usr/bin # sudo nano eclipse eclipse 파일에는 아래의 내용을 입력하여 넣는다. export ECLIPSE_HOME="/usr/lib/eclipse" $ECLIPSE_HOME/eclipse $ * # sudo chmod 755 eclipse 3. Desktop Menu 에 추가하려면 # cd /usr/share/applications # sudo nano eclipse.desktop [Desktop Entry] Encoding=UTF-8 Name=Eclipse Comment=Eclipse IDE Exec=eclipse Icon=/usr/lib/eclipse/icon.xpm Terminal=false Type=Application Categories=GNOME;Application;Development' StartupNotify=true 이렇게 입력한 파일을 저장하면, 시작메뉴 > 개발 > Eclipse 아이콘이 생성되어 메뉴에서 직접 실행할 수 있게된다.

네트워크 상의 IP 주소로 MAC 주소를 추출하는 방법

Subject :  How can I get a list of MAC to IP addresses on the network? An easy way to get a list of MAC to IP addresses on the local subnet is to ping every host on the subnet and then check you ARP cache, however pinging every individual node would take ages and the entries only stay in the ARP cache for 2 minutes. 로컬 서브넷 상의 IP 주소에 대한 MAC 주소 목록을 획득하는 쉬운 방법은 서브넷 상의 모든 호스트에게 Ping 을 하고 ARP(Address Resolution Protocol) 캐쉬를 확인하는 것이다.  그러나, 모든 개별 노드에 Ping 하는 것은 많은 시간이 걸릴 것이고 2분동안만 ARP 캐쉬에 체재하면서 들어갈 수 있다. (참고) ARP 캐쉬는 Linux 의 경우 20분, Windows Server 의 경우 2분이 기본적인 Life Time  이다. 그 이후에는 그 데이타가 지워진다. An alternative is to ping the broadcast mask of your subnet which will ping every host on the local subnet (you can't ping the entire network as you only communicate directly with nodes on the same subnet, all other requests are via the gateway so you would just get a ARP entry for the gateway). 로컬 서브넷상의 모든 호스트를 Ping 하게 될 사용자의 서브넷 브로드캐스트 마스크를 Ping 하는 것이 또 다른 방법이다.(동일 서브넷 상의 노드와 직접적으로