반응형


이전에 Vim 에디터로 편집을 할 때, 굉장히 알고 싶었던 내용이 많았는데 '손에 잡히는 Vim' 서적을 보다보니 알고 싶었던 내용이 제법 있다.
이런 기능만 알아도 엄청나게 빠르게 편집을 할 수 있었는데 예전에 그걸 몰랐다는 사실이 조금 아쉽게 느껴진다.
그렇게 어려운 내용은 아니지만 조금 더 부지런히 찾아보고 공부할 껄 하는 후회가 밀려온다.

하지만 시작이 반이고 가장 늦었다고 할때가 가장 빠르다고 누가 말했던가.
지금이라도 열심히 익혀보자.

------------------------------------------------------------------------------------------------------------------------------------

이번에는 문자열 교체하기에 대해서 알아보자.
크게 내용이 어렵지는 않고 간단하다.

 명령어  설명   모드 
 (범위)s,바뀌어야할 단어,바꿀내용,옵션

ex) 1,$s,man,boy,g
총 4개의 부분을 나뉘어져 있다.
가장 처음에는 문서에서 교체할 범위를 지정하고 s를 그 다음에는 구분자로 ,를 써주고 바꿀단어를 쓴 뒤 구분자를 써준다. 또 바꿀내용 뒤에도 구분자를 쓰고 옵션을 준다.
 
 명령행 모드
 
위의 예시에서 지정된 범위인 1,$ 는 첫 번째 줄에서 마지막행까지 즉 문서 전체인 %를 말한다.
s는 교체 명령어이다. s 다음에 나올 문자는 교체에 사용할 문자로 사용된다.
현재는 s 다음에 ,(콤마)를 사용하겠다고 표시했으며 다른 문자를 사용해도 무방하다.   
저번에 "Vim 에디터에 대해 알아보자 - 1 (기본 입력키2)"에서 간단히 포스핑 했었는데
Vim 에디터에서 사용하는 범위 지정에 쓰이는 특수기호(메타기호)에 대해서 복습해보자.

 .  현재 행을 의미.  메타기호
 $  마지막 행을 의미.  메타기호
 +#  현재 위치에서 #만큼 아래 행을 의미.  메타기호
 -#  현재 위치에서 #만큼 위 행을 으미.  메타기호
 %  문서(파일) 전체를 의미.  메타기호

즉 위의 1,$s,man,boy,g 는 %s,man,boy,g 와 같은 역할을 하게 된다.
매우 직관적으로 판단할 수 있다. 문제는 까먹지 않는게 .... ㅡㅡ

그럼 마지막에 붙는 옵션에 대해서 알아보자.
 옵션  설명   메타기호
 g  범위 내에 검색된 모든(global) 문자열을 교체.   메타기호
 i  대소문자를 무시함.  메타기호
 c  문자열을 교체하기 전 교체 여부를 확인.

y/n/a/q/l/^E/^Y 등의 답변을 해야 한다.
y:yes, n:no, a:all, q:quit, l:line 정도 알아두자.
 메타기호
 e  교체 과정 중 에러를 무시. 에러 표시도 안함.  메타기호

그럼 마지막으로 확인해보자.
%s,man,boy,gcie 이렇게 하면 모든 옵션을 붙여서 문서 전체에 man 문자를 교체하는데 교체할때마다 다 물어봐라 이 뜻이 된다.

------------------------------------------------------------------------------------------------------------------------------------

재미있는 팁

1. 어떠한 문자의 ASCII 코드 값을 알고 싶을 때 굳이 인터넷이나 표를 찾아보지 말고 원하는 문자에 커서를 위치시키고 명령행 모드로 :as를 입력해보자. 10진수 8진수 16진수로 표시할 때의 ASCII 코드 값을 알려준다.

2. 특수문자를 입력하고자 할때 입력모드에서 ctrl-v, V 를 입력하게 되면 특수문자 ^E, ^M ^Y 등을 입력할 수 있다.

반응형
반응형


Vim 에디터에는 문자열 검색기능을 지원한다.
아직은 잘 모르지만 Ctag라는 플러그 인을 사용하면 테크를 검색할 수 있다고 알고 있는데 예전에 선배가 사용하는 것을 보고 뭔가 멋지다라고 생각했던 기억이 난다. 하지만 우선 Vim에 내장되어 있는 간단한 문자열 검색 기능에 대해서 알아보자.


 명령어 설명  모드 
 f#  현재 행에서 문자열 #을 전방으로 검색할때 사용한다. 일반모드 
 F#  현재 행에서 문자열 #을 후방으로 검색할때 사용한다.  일반모드
 t#  현재 행에서 문자열 #을 전방으로 검색한 뒤, 검색어의 한 칸 앞으로 이동한다.  일반모드
 T#  현재 행에서 문자열 #을 후방으로 검색한 뒤, 검색어의 한 칸 뒤로 이동한다.  일반모드
 ;  가장 최근에 검색한 명령을 재 검색한다.  일반모드
 ,  가장 최근에 검색한 명령을 반대 방향으로
재검색한다.
 일반모드
 *  현재 커서가 위치한 곳에 단어를 검색하고 하이라이트 해준다.  일반모드 
/#  # 단어를 검색하고 하이라이트 해준다.  명령행 모드 
n  검색된 단어에서 다음 하이라이트 위치로 이동한다.  일반모드
 검색된 단어에서 반대방향의 하이라이트 된 단어로 이동한다.  일반모드
 /화살표  이전에 검색한 단어내역을 본다.  명령행 모드
 :set hls  검색하는 단어에 하이라이트를 지정한다.
nohls를 하게 되면 하이라이트가 해제된다.
 명령행 모드

------------------------------------------------------------------------------------------------------------------------------------

아래 그림 내용은 명령행 모드에서 /int 로 int 문자열을 가진 모든 부분을 검색해본 경우이다.
원래는 하이라이트가 꺼져 있어서 :set hls 를 사용하여 하이라이트를 줬더니 해당 내용 내에 int 내용은 모두 노란색으로 하이라이트가 표시되어 해당 내용이 어디에 있는지 확인할 수 있다. 이 상태에서 일반모드라면 n 이나 N 을 주면 다음 혹은 이전에 어디에 검색한 문자열이 있는지 커서를 이동시켜줘서 좀 더 편리하게 디버깅 혹은 코드 내용을 검색 할 수 있겠다.






반응형
반응형


Vim 에디터를 사용할 때 기본적으로 사용하는 옵션에 대해서 알아보자.

1. 편집기 좌측에 라인숫자 표시.
2. 편집기 사용시 기본적인 문법 검사.
3. 자동으로 들여쓰기
4. Tab의 크기, 블록 이동시 열의 넓이

 명령어  설명  모드
 :set  현재 에디터에 셋팅된 옵션 목록을 볼 수 있다.
:set all 라고 명령하게 될 때 vim에서 셋팅할 수 있는 모든 옵션의 종류를 볼 수 있다.
 명령행 모드
 :set #  # 써있는 속성을 on 할수 있다. no# 라고 할 경우 해당 속성을 off 시킬 수 있다.
 #! 이라고 할 경우 해당 값이 반전 된다(on/off)
 명령행 모드
 :set #=값  속성중에 특정 값을 갖는 속성들이 있다. #속성들의 특정한 value 값을 대입하기 위해서 사용한다.  명령행 모드

해당 옵션 값을 설정할 때 앞에 :set을 붙여야 한다.
ex) :set nu

 nu 또는 number  화면에 라인의 숫자를 표시한다.   명령행 모드
 ai 또는 autoindent  자동 들여쓰기를 쓴다. (sw로 설정한 값으로)   명령행 모드
 cindent  C언어 스타일의 들여쓰기를 사용.
(sw로 설정한 값으로)
  명령행 모드
 ts=값 또는 tablestop=값  탭(Tab) 크기를 지정하는 값으로 지정한다.   명령행 모드
 sw=값 또는 shiftwidth=값  블록 이동시 지정하는 열의 너비.   명령행 모드

해당 옵션을 셋팅할 때는 :set을 붙이지 않는다.
 :syntax enable  문법검사를 실시한다. (지정된 색깔테마로)  명령행 모드
 :syntax clear  문법검사를 해제한다.  명령행 모드
 :colorscheme  에디터에 색깔 테마를 지정한다.  명령행 모드

------------------------------------------------------------------------------------------------------------------------------------


아래의 그림 파일은 색깔 테마와 문법 검사 그리고 행 표시를 하지 않은 경우이다.




:set nu     (라인 표시)
:syntax enable     (문법 검사 on)
:colorscheme default      (색깔 테마 on)
(참고로 색깔 테마는 16가지 정도가 더 있으므로 colorscheme라고 친 뒤 한 칸을 띄고 ctrl+D를 치면 셋팅 가능한 다른내역을 확인할 수 있다)

를 한 뒤 확인해 보면 아래 문법이 틀린 부분은 색깔이 다르게 표시되거나 강조가 되어 있어서 편집과 동시에 확인할 수 있다.
또한 화면 좌측에 라인에 행별로 라인의 숫자가 표시 된 것을 확인 할 수 있다. 우분투의 경우 syntax와 colorscheme가 기본적으로 셋팅되어 있으니 별도로 셋팅해주지 않아도 괜찮다. 하지만 만약에 꺼져 있을 때 아래의 옵션 셋팅 내용을 기억해 두자.



또한 편집하다가 대괄호를 치고 Enter 키를 치면 행의 처음으로 돌아가게 때문에 자동으로 들여쓰기 등을 옵션으로 셋팅해놓으면 좀 더 편리하게 편집할 수 있다. 또한 그 값도 적당하게 조절해 놓으면 좀 더 손쉽고 편리하게 자신에게 최적화 하여 편집할 수 있게 된다.
이번에는 tablestop(ts) 값과 shiftwidth(sw) 값을 조정하면 어떻게 변화하는지 확인해보면

:set sw=20       (들여쓰기 값 20)
:set ts=2         (탭 크기 2)
:set cindent    (C언어 스타일의 들여쓰기)

일부로 printf 문만 들여쓰기로 하고 나머지는 tab으로 진행해 보았다. int나 for의 경우는 왼쪽 끝과 2칸 정도 밖에 차이나지 않지만 printf문 이후로는 엔터를 쳐서 들여쓰기를 했더니 중괄호로 부터 20의 넓이만큼 벌어져 있는 것을 확인할 수 있다.




:set 을 치면 현재 편집기에 셋팅된 옵션 내용을 확인 할 수 있는데
현재 확인해보면
cindent
tabstop=2
syntax=c
shiftwidth=20
등이 셋팅 되어 있는 것을 확인 할 수 있겠다.



------------------------------------------------------------------------------------------------------------------------------------
그럼 이렇게 편집기를 열때마다 해당 내역을 저장해야 하는가?
다행이 vim 에디터는 처음 실행될때 자신의 홈디렉토리에 .vimrc 파일을 로드하여 기록되어 있는 내용을 먼저 로드한다.
따라서 내가 항상 위의 내역을 저장해 놓고 사용하고 싶다면. 자신의 홈디렉토리로 가서 .vimrc 파일을 생성(혹은 수정)하여 위의 내용을 기록해서 사용하면 된다.

주의할 사항은 콜론은 사용하면 안됀다. 아래와 같이 셋팅하여 사용하면 되겠다.
파일명은 .vimrc 이다.   . 을 빼먹으면 안됀다.


 

반응형
반응형

------------------

알아두면 더욱 편리한 Vim 에디터 기본 입력키 2번째.
Advanced.


 명령어  설명 모드 
 ^  행의 맨 처음으로 이동 하지만 공백은 제외.  일반모드
 Home키  행의 맨 처음으로 이동.  일반모드
 $  행의 맨 끝으로 이동 (End 키와 같음).  일반모드
 ctrl + B  위로 한 화면 스크롤(PageUP키와 같음).  일반모드
 ctrl + F  아래로 한 화면 스크롤(PageDown키와 같음).  일반모드
 ctrl + U  위로 1/2 화면 스크롤.  일반모드
 ctrl + D  아래로 1/2 화면 스크롤.  일반모드
 #gg  #행으로 이동. 없을 시 맨 처음으로 이동.  일반모드
 #G  #행으로 이동. 맨 마지막으로 이동.  일반모드
 :#  #행으로 이동.  명령행 모드
 ctrl - G, g  현재 문서의 위치정보를 하단에 표시.  일반모드
 :d  현재 행을 잘라내기.  명령행 모드 
 D  현재 위치에서 현 행의 끝부분까지 잘라내기  일반모드
 J  아래 행을 현재 행의 끝에 붙임.
(아래행의 공백은 무시)
 일반모드
 :pu  p와 같은 기능. 현재 행에 붙여넣기.  명령행 모드
 P  현재 행 위에 붙여넣기.  일반모드
 :y  현재 행을 레지스터에 복사.  명령행 모드
 Y  현재 행을 레지스터에 복사.  일반모드
     


범위 지정에 사용하는 특수 기호와 사용법
 .  현재 행.  메타 문자
 $  마지막 행.  메타 문자
 %  문서 전체.  메타 문자
 +#  현재 위치에서 #만큼 아래 행을 의미.  메타 문자
 -#  현재 위치에서 #만큰 위의 행을 의미.  메타 문자
 :10, 25d  10행에서 25행까지 잘라내기.  명령행 모드
 :%y  문서 전체 복사. (%는 1,$와 동일하다)  명령행 모드
 :.,+20y  현재 행부터 아래로 20행을 복사.  명령행 모드
 :-10,+5d  현재 행부터 위로 10행, 아래로 5행 삭제.   명령행 모드
 :40pu  40번 행에서 레지스터의 내용을 붙여넣기.   명령행 모드

 v  일반 비주얼 모드로 현재 커서 위치에서 블록을 지정.  일반 모드
 V  비주얼 라인 모드. 현재 커서가 위치한 행에서 행 단위로 블록을 지정.  일반 모드
 ctrl-V  비주얼 블록 모드로, 열(Column) 단위로 블록을 지정. ctrl-Q로 대신 할 수 있음.  일반 모드



반응형
반응형


Vim 에디터는 크게 3가지 모드로 나늬어 진다.

일반모드(Normal Mode)
명령행모드(Command Line Mode) or 콜론모드 (Colon Mode)
입력모드(Insert Mode)

여기에서 비주얼 모드(Visual Mode) 라는 것 까지 추가로 존재하긴 하지만 주류는 아니기 때문에 크게 3가지 모드에 집중하여서 기본 입력키 모드를 설명하도록 하겠다. 우선 각각의 모드에 대해 간단히 설명을 하자면

일반모드 : 명령행 모드와 입력모드 중간의 교량역할을 하는 모드로써 좀 더 편하게 편집을 할 수 있도록 여러 기능을 제공한다.
명령행모드 : 일반모드에서  : (콜론)을 누르게 되면 명령행 모드로 진입하게 된다.
                  편집을 편하게 하는 일반모드의 기능과 중복되는 기능들이 존재하며 편집하는 파일을 직접적으로 컨트롤(저장, 종료 등)하는
                  명령들을 내린다. ESC를 누르면 일반모드로 전환된다.
편집모드 : 일반모드에서 i, I, a, A, o, O, R 등의 키를 눌러서 진입이 되며 실제 텍스트에 대한 편집을 하게 되는 모드이다. 
               ESC를 누르면 일반모드로 전환된다.
비주얼 모드 : 블록단위로 처리할 때 사용된다.

------------------------------------------------------------------------------------------------------------------------------------

Vim 에디터는 기본적으로 GUI모드가 아닌 CUI 모드이기 때문에 키보드의 입력으로 모든 것을 처리해야 한다.
따라서 사용자가 익숙해지기 전까지 처음 사용시에는 많이 불편할 수 있지만
해당 모드들의 단축키를 이해하고 편하게 사용할 수 있게 된다면
마우스로 손을 움직여야 하는 시간과 불편함은 떨쳐버릴 수 있을 것이다. 또한 GUI로 된 여타 툴 보다 처리 속도 또한 월등히 빠르고 가볍고
실행하는 PC나 서버에 부담을 주지 않기 때문에 여러개가 실행되더라도 부담 없는 가볍지만 매우 강력한 툴이다.

------------------------------------------------------------------------------------------------------------------------------------

 명령어 설명  모드 
 :w  현재 편집하던 내용을 저장한다.  명령행 모드
 :q  현재 편집내용을 끝내고 에디터를 종료한다.
변경 내용이 있을 때는 :q로 종료할 수 없고 저장하지 않고 끝내기인 :q!로 종료해야 한다.
 명령행 모드
 :wq  편집하던 내용을 저장하고 에디터를 종료한다.  명령행 모드
 명령어 뒤에 붙이는 옵션으로 강제로 해당명령어를 수행한다는 뜻이다.
:q! -> 저장하지 않고 강제종료
:w! -> 강제로 덮어쓰기
:wq! -> 강제로 덮어쓰고 종료.
 명령행 모드 (옵션)
 a, A  a : 현재 커서위치에서 한 칸 뒤로 이동 후 입력모드로 전환
 A : 현재 형에서 끝으로 이동한 후 입력 모드로 전환
 일반 모드 (에서 입력모드로 전환시)
 i, I  i : 현재 커서위치에서 입력모드로 전환
 I : 현재 행 맨 앞으로 이동 후, 입력모드로 전환
 일반 모드 (에서 입력모드로 전환시)
 o, O  o : 현재 행에서 아래 새로운 행 삽입 후 입력모드로 전환
 O : 현재 행에서 위로 새로운 행 삽입 후 입력모드로 전환
 일반 모드 (에서 입력모드로 전환시)
 R  수정 모드로 글자가 덮어 씌어짐.  일반 모드 (에서 입력모드로 전환시)
 x  현재 커서의 문자를 삭제한다.
Delete키와 동일한 기능
 일반 모드
 dd  현재의 행을 잘라내기한다.
잘라낸 행은 vim이 가진 고유한 저장소에 저장된다. dd 앞에 숫자를 붙이면 현재행에서 n의 숫자 만큼 잘라내기한다.
 일반 모드
 yy  현재 행을 복사한다.
복사한 행은 vim이 가진 고유한 저장소에 저장된다. yy 앞에 숫자를 붙이면 현재행에서 n의 숫자 만큼 복사한다.
 일반 모드
 p  가장 마지막에 복사 혹은 잘라내기한 내용을 해당 위치에서 부터 붙여넣기 한다.  일반 모드
 u  undo 기능. Vim의 undo 기능은 매우 강력하여 편집기가 열린순간부터 편집한 모든 내용을 되돌리기 할 수 있다.  일반 모드
 ctrl - R  redo 기능.  일반 모드
 h  왼쪽 방향키와 같은 기능. 앞에 n의 숫자를 붙인 만큼 이동이 가능.  일반 모드
 j  아래쪽 방향키와 같은 기능. 앞에 n의 숫자를 붙인 만큼 이동이 가능.  일반 모드
 k  위쪽 방향키와 같은 기능. 앞에 n의 숫자를 붙인 만큼 이동이 가능.  일반 모드
 l  오른쪽 방향키와 같은 기능. 앞에 n의 숫자를 붙인 만큼 이동이 가능.  일반 모드


반응형
반응형

 

Vim(Vi IMproved)은 Bram Moolenaar가 만든 vi 호환 텍스트 편집기이다. 본래 아미가 컴퓨터 용 프로그램이었으나 현재는 마이크로소프트 윈도, 리눅스, 맥 오에스 텐을 비롯한 여러 환경을 지원한다.

Vim은 vi와 호환되면서도 독자적으로 다양한 기능을 추가하여 사용자의 편의를 돕고 있다. 특히 Vim 스크립트 등을 사용해서 자유롭게 편집 환경을 변경하거나, 확장된 정규 표현식 문법, 강력한 문법 강조 기능, 다중 되돌리기, 유니코드를 비롯한 다국어 지원, 문법 검사 등을 쓸 수 있다는 점이 강점으로 꼽힌다. 한편으로는 vi와 마찬가지로 처음에 배우기 어렵다는 점이 단점으로 지적되는데, 이를 극복하기 위해 쉬운 Vim 모드를 지원한다.

- 위키피디아 -
-----------------------------------------------------------------------------------------------------------------------------

학생 때나 지금이나 Vim 에디터를 많이 사용하지만 너무 서투르게 사용하고 단순한 단축키나 기능을 잘 몰라서 여러가지 사용해 보며 이 vim 에디터에 대해 정리해보기로 했다.

스타크래프트할때 마우스를 빨리 움직이거나 한글 문서편집할때 단축키로 파파팍 하는 사람들이 많듯이 Vim 에디터를 사용하여 손가락이 보이지 않을 정도로 빠르게 편집하는 사람들을 보면 뭔가 간지난다고 생각했었다. 실제로 편집속도도 빠르고 편해보였다.
뭐... 내가 연습을 많이해도 그렇게 할 것 같지는 않지만 ㅡㅡ....

우선 Emacs는 다음에 사용해 보기로 하고 우선 가장 범용적인 툴인 Vim 에디터에 대해서 자세히 공부해 보기로 했다.

Vim 에디터는 Vi 에디터와 크게 다르지 않지만 어드벤스드로 넘어갈 수록 vi에 비해 강력한 기능이 추가되었다고 알고 있다.
아직 해보지는 않았지만.. 뭐 실제로 해보면 어떠한 기능이 달라졌는지 알 수 있을 것 같다. Vim 에디터를 다루고 C로 코딩한지 어엿 10년이 가까이 되가지만 이제서야 내가 가장 많이 사용하는 한가지 툴에 대해 본격적으로 공부를 해보려 한다는게 조금 부끄럽기도 하다 ㅡㅡ.... 아아...앙대

이제 이걸로 밥 먹고 살아야 되니 한번 제대로 공부해봅시다.



------------------------------------------------------------------

출판사 : 인사이트
저 : 김선영
발행일 : 2011년 4월 10일

------------------------------------------------------------------------------------------------------------------
해당 카테고리는 "손에 잡히는 Vim" 의 내용을 본인이 공부하기 위해 요약한 것 밖에 되지 않으므로.
자세한 내용을 원하거나 Vim과 조금이라도 더 친해지고 싶다면 구입해서 보는 것을 추천해 드립니다!
- 장피디 왈 -
------------------------------------------------------------------------------------------------------------------

더이상 검은색 창을 두려워할 필요가 없다!

Vim은 유닉스 환경에서 전통적인 에디터인 Vi의 진보된 형태다. 특히 개발자라면 수많은 플러그인이 제공하는 다양한 기능과, 운영체제에 관계없이 일관된 환경을 구성할 수 있다는 점 때문에라도 반드시 익혀야 할 도구다.
[손에 잡히는 Vim]은 Vim의 필수 기능들을 친절한 그림과 함께 차근차근 설명하여, ‘배우기 어려운 에디터’라는 고정관념을 깨뜨린다.
리눅스를 공부하는 학생이나 터미널 창에서 작업하는 서버 관리자, 키보드에서 손을 떠나기 싫은 개발자 모두에게 유용한 안내서가 될 것이다.

이 책에서 다루는 내용
- 기본 조작법
- 색상 테마 등 옵션 설정하기
- 문자열 정렬, 검색, 교체하기
- 창 분할과 탭
- 키 매핑과 매크로를 사용한 자동화
- 프로그래머에게 유용한 기능들
- 플러그인
- 주요 명령어와 단축키

이 책에 수록된 소스코드는 저자의 블로그(http://sunyzero.tistory.com)와 출판사 스프링노트(http://insightbook.springnote.com/pages/7353373)에서 다운받을 수 있습니다.

반응형
반응형

우선 우분투에 SSH 패키지가 깔려있는지 알아보는 것이 우선.
sudo dpkg -l | grep ssh

혹은 ssh 리스너가 떠 있는지 알아봐야 한다.
sudo netstat -lntp


아래의 경우는 ssh 패키지도 안 깔려 있고 ssh가 안깔려 있어서 22포트에 리스너가 없는 상태이다.

 



sudo apt-get install ssh
로 ssh를 설치하자.




openssh-server
ssh
ssh-import-id

세개의 패키지가 추가로 설치되어 있는 것을 확인할 수 있다.



리스너를 확인해본 결과 : : : 22 로 sshd가 리스너 가 동작중인 것을 확인 할 수 있다.





이제 Putty등의 터미널을 통해서 ssh로 우분투에 접속이 가능하다.
ifconfig 를 통해 우분투의 ip 주소를 확인한 다음에 접속해보자.




잘 접속이 되는 것을 확인할 수 있다.

반응형
반응형

우선 컴터 초짜인 내가 대충 이해하기로는 Libxml2는 기존의 XML 파서들보다 다양한 인터페이스를 가지고 다양한 언어그룹에서 사용할 수 있는 기능을 포함하고 있는 최신형 XML Parser 인듯 하다. 사용법 또한 간단하여 이번 기회에 공부할 겸 사용해보게 되었다.
설치부터 사용까지 포스팅을 해보아요

-----------------------------------------------------------------------------------------------
설치 환경 - Linux Ubuntu 10.10

libxml2 설치 (명령문 실행 순서대로)

# wget ftp://xmlsoft.org/libxml2/libxml2-2.7.7.tar.gz
# tar xvzf libxml2-2.7.3.tar.gz
# cd libxml2-2.7.3
# ./configure --prefix=/usr/local/xml
# make
# make install
---------------------------------------------------

1. 터미널에서 wget을 통해서 다운을 받아도 되고 직접 FireFox등의 익스플로어를 사용하여 ftp://xmlsoft.org/libxml2/ 에 들어가면
최신버전을 확인하여 다운 받을 수 있다. 참고하자. (해당폴더에 압축파일을 다운 받을 수 있다)



2. 다운 받은 압축파일의 압축을 풀자.
tar 명령어에서 xvzf는 옵션인데 각 옵션의 의미는 아래와 같다.
-------------------------------------------------------- 압축풀때
-x, --extract, --get : 저장된 것에서 풀어낸다.
-v, --verbose : 처리중인 파일을 자세하게 보여준다. (압축푸는 과정 보여줌)
-f, --file [HOSTNAME:]F : 저장 파일 혹은 장치 파일 F에 저장한다.
-z,--gzip, --unzip : gzip으로 압축하거나 푼다.
-j, bzip2 : bzip2 필터를 사용하여 .bz2 파일을 푼다.
-p : 퍼미션을 유지시켜준다.

------------------------------------------------------- 압축할때
-c, --create : 새 저장파일을 만든다.

압축풀기의 예)
1. tar -zvxf (압축대상파일).tar.gz -C (목적폴더위치),
(삭제 명령어 rm -f -R (목적폴더위치)
[출처] 리눅스 tar 명령어 관련 | alan100님 글

3. 어쨋든 압축을 푼 뒤 해당 폴더에 들어간다.
4. ./configure --prefix=/usr/local/xml (여기서 configure는 환경설정, --prefix는 설치시킬 위치를 의미한다)
5. 컴파일 한뒤에 설치까지 끝마친다.

6. 끝 이제 Libxml의 설치를 마쳤다.



libxml2 설치 참고 usr - http://www.ubuntu.or.kr/viewtopic.php?p=73454
libxml2 코드(튜토리얼) 참고 usr - http://kylesoft.springnote.com/pages/5620523
libxml2 라이브러리 참고 usr - http://myweb.bcpark.net/~hosuck/gnu3/?doc=bbs/gnuboard.php&bo_table=PG_JAVASCRIPT&page=1&wr_id=29

gcc -o (dest) (source) -L/usr/local/xml/lib(prefix 한 링크주소) -lxml2(libxml2.so 혹은 a가 있는 주소)

어렵다 -ㅂ-
반응형
반응형


이 모든 것은 VM이 네트워크가 가능하다는 전재하에 진행해야 합니다.





초기에 영어로 되어 있는 우분투를 사용하겠다면 크게 상관은 없지만 만약 아래와 같은 한글로 된 우분투를 사용하고 싶다면 몇 가지 설치와 설정을 해줘야 하는 부분이 있다.

 

 


-----------------------------------------------------------------------------------------------------------------------------------

우선 System -> Administration -> Language Support로 가보자





이후 왼쪽 상단의 Language Support 부분 에서 install/Remove Language 을 클릭해서 Korean을 찾은 뒤 install(apply Change) 하자



그러면 비밀번호를 치라고 나오는데 로그인한 해당 아이디의 비밀번호를 치면 되겠다.
아래 화면은 설치중인 화면이다.



그렇게 되면 아래와 같이 한국어가 새롭게 생기게 되는데 비활성화 되어 있다. 이 한국어를 잡고 English 위로 드레그 해서 올리자.



아래와 같이 활성화가 된다!
그 다음에 Apply System-Wide 한번 클릭해주자.
그 뒤에 마지막으로 Keyboard input method system에서 nabi로 바꿔주는 것을 잊으면 안된다.



그 다음 Regional Formats 탭을 눌러서 English(United States) 부분을 한국어로 바꿔준 뒤 Apply System-Wide를 눌러주자.



자 이제 설정이 끝났고 재부팅을 해보면 한글로 메뉴 등이 표시된다.
폴더명을 한글로 바꿀 것인지는 사용자가 선택하면 된다.



메뉴들이 한글로 바뀐 것을 확인할 수 있다.




터미널을 열어서 확인해보니 한글로 입력 또한 가능하다.
우분투에서는 한/영키가 아닌 Shift + Space 키가 한영 변환키이니 참고할 것.
또한 한글로 입력이 되지 않을 경우 시스템 -> 관리 -> 언어 에서 키보드 입력 시스템을 nabi로 설정해 놓았는지 반드시 확인해야 한다.
아래 그림 파일에서 시계 옆쪽에 나비 모양이 이나 혹은 ㅎ A 모양이 있어야지 제대로 설치된 것이다.




반응형
반응형


현재 나와 있는 리눅스 중에서도 인기가 많은 우분투 11.04가 릴리즈 됐다. 
하드 유저가 아니라 한번 설치해보고 간단히 셋팅해보는 것에 의의를 두고 VMware에 설치해보기로 했다.

설치파일은 해당 주소에서 Get Ubuntu 부분을 눌러서 32bit든 64bit던 알아서 iso 파일로 받아서 설치.
http://www.ubuntu.com/




Download and install로



우선 32bit 버젼을 다운 받아서 설치해보자.




예전에 받았던 버젼들도 같이 있음. 11.04 iso 파일을 받았으니 VMware에서 설치를 해보자.




VMware Workstation 에서 New Virtual Machine으로 새로운 VM을 생성해봅시다.


k-1

Typical과 Custom이 있는 Typical로 하면 간단하게 다음다음만 하면 설치 할 수 있습니다.
하지만 그럼 심심하므로 Custom으로 약간의 하드웨어 셋팅을 다르게 줘 봅시다.
참고로 현재 나의 컴퓨터 하드웨어 사양은

CPU : Intel Core i-5(2세대) 2500 (샌디브릿지)
MainBoard : P8H67-M
RAM : DDR3 16G PC3 - 10600
HDD : 1TB
--------------------------------------------------------------

복잡한거 싫어한다면 Typical로 하여서 Next 만 열라 눌러주면 된다.




Next 를 눌러준다.




Ubuntu iso 파일을 CD로 구워놨다면 Install disc.
하드에 그냥 iso 파일로 설치하려 한다면 Installer disc image file(iso)로 iso 파일만 지정해주면 된다.
ESX나 ZEN과는 달리 VMware는 iso 파일만 있으면 바로 설치가 가능하다는 이 점이 매우 편리하다.




User name에는 Ubuntu를 처음 시작할 때 사용할 default username을 적어주면 된다.
Password역시 해당 유저의 비밀번호.



Virtual Machine의 name은 VMware가 인식할 식별자 이름이 되겠다. 설치한 이후에 탭에 표시될 것이다.
Location은 하드웨어에 VM을 어디에다가 설치할 것인가에 대한 Path를 명시해주는 것이다.
원래는 default로 설정되어 있는데 개인이 편한 위치에 알아서 설치하면 됨.



그 다음은 CPU의 Core 혹은 숫자를 정해야 한다.
default는 싱글 프로세서로 되어 있지만 내 CPU는 쿼드 코어이기 때문에 그냥 대충 VM에 더블 코어로 설정했다.
물론 그 이상을 주는 것도 가능하다. 하지만 현재 하드웨어의 한계를 넘어서는 설정을 하면 의미가 없으므로 명심할 것.





램과 하드용량이 파격적으로 많은 관계로 VM에 램을 무려 4G나 할당하기로 한다.
Default는 512MB로 되어 있다. 보통 PC는 2~4기가 정도의 램을 사용하므로 512~1기가 정도 할당하면 적당할 듯 하다.
아래 그림에서도 확인할 수 있듯이 자신의 하드웨어의 최고 용량(현재 16GB)이 파란색으로 표시된다.
즉 이상으로 올리는 건 추천하지 않는다는 것이다. 그렇다고 노란색으로 표시된 이하를 주는 것도 추천하지 않는다.
(즉 많이 할당한다고 그렇게 빠른 것에 대해 체감하기 힘드므로 대충 설정하면 된다)




그 다음은 골치아픈 Network Type의 설정이다.
일단 내가 이해 하고 있는 바로 아래의 셋팅의 내용은 (뭐 정확하지는 않을 수 있다 ㅡㅡ...)
일단 Host 컴퓨터에서만 쓸 것이라면 NAT로 설정하고 범용적으로 다른 컴퓨터에서도 putty등으로 접속해서 사용할 것이라면
Use bridged Networking으로 설정하도록 하자. (Default는 NAT로 되어 있음.)

1. Use bidged networking
: 라우터에서 혹은 공유기에서 아이피를 할당된다. VM이 현재 Host컴퓨터와 같은 레벨의 네트워크 주소를 같는다.
외부 컴퓨터에서 해당 VM에 바로 접근할 수도 있다. 만약 내가 IP를 할당할 수 있는 라우터를 가지고 있고
여러개의 IP주소를 할당받아 VM에 할당할 수 있는 A,B,C 등의 클래스 네트워크 IP 주소가 있다면 VM은 그 중 한개의 IP를 할당 받을 것이다. 
ex) 현재 내 Host 컴퓨터가 10.10.10.120 이라고 한다면, VM도 10.10.10.xxx 대의 IP 주소를 라우터에서 할당받게 된다.

2. Use network address translation (NAT)
: Host 컴퓨터의 사설 네트워크가 된다. 해당 VM은 Host 컴퓨터(현재 나의 경우는 Windows 7)의 네트워크를 통해서 해당 VM에
접속해야 하며 외부 컴퓨터에서 해당 VM에 Direct로 접근할 수 없다.
ex) 현재 내 Host 컴퓨터가 10.10.10.120이라고 한다면 VM은 192.168.x,x 로 시작하는 사설 네트워크를 갖게 된다.

3. Use Host-only networking
: Host 컴퓨터의 사설 네트워크.

4. DO not use a network connection
: 네트워크를 연결 안함.



그 다음은 I/O Controller Types이 되겠다.
이건 ATAPI를 쓰거나 SAS를 써야 한다라고 주장하지 않는다라면 Default로 진행하도록 하자.




그 다음은 Disk의 종류를 고를 차례다.
크게 하드디스크에 할당받아서 가상디스크를 사용할 것인가.
아니면 실제로 하드웨어를 장착해서 VM에게 마운트 해줄 것인가는 사용자가 정하면 된다.

첫 번째는 가상디스크를 새로 만들어서 하는 것이고 두번재는 이미 만들어져 있는 가상디스크를 사용하는 것.
마지막은 물리적 하드웨어를 장착해 줘야 한다. 보통은 VM마다 가상디스크를 사용하게 하므로 새롭게 만들겠다.
Default는 Create a new virtual disk로 되어 있다.



하드 디스크 타입도 IDE방식을 테스트 해봐야 하는 경우 아니라면 SCSI로 진행하도록 하자.





가상하드의 용량은 그다지 크게 필요 없으므로 기본인 20기가를 할당하도록 하겠다.
하드내에 정적으로 용량을 잡을 지 동적으로 잡아서 싱글로 혹은 멀티파일로 관리할지는 사용자가 선택하면 된다.



마지막으로 우분투 운영체제를 저장할 vmdk 파일명을 정한다.
One 20GB disk 파일로 아까 지정한 location에 저장될 것이다.




이제 모든 준비가 끝났다. 마지막으로 현재 셋팅한 내용을 확인해보도록 하자.







우분투 11.04가 설치되고 있다.




우분투 11.04에서 인스톨시 설정해주는 부분은 키보드 레이아웃 한개로 줄어들었다.
키보드는 korea, Republic of 그리고 각자 키보드에 맞게 추가로 선택해주고 Forward를 클릭하면 끝이다.
나머지는 다 default로 셋팅되고 기다리기만 하면 끝난다.
키보드 레이아웃을 선택하는 부분 아래쪽에 재미있게도 셋팅하는 도중에도 인스톨은 되고 있다.

 


설치가 끝나면 재부팅을 하고 아래와 같은 로그인 화면이 뜬다.
처음 설정했던 아이디를 클릭하고 패스워드를 입력하면 끝!
우분투 설치가 최종 완료 되었다!



처음 우분투를 설치하면 영어로 되어 있기 때문에
다음으로는 한글로 언어팩 설치 및 한글 입력이 가능하도록 셋팅하는 것을 해보도록 하자.

반응형
반응형

libxml2 란?

개요

제임스 클라크 (James Clark)가 만든 expat 파서를 펄에서 사용할 수 있도록 래리 월 (Larry Wall) 과 클라크 쿠퍼 (Clark Cooper)가 만든 펄 인터페이스 XML::Parse 을 기초로 하여 펄에서 사용되는 대부분의 XML 모듈이 만들어졌다. expat과 XML::Parser 콤비만이 펄 세계에서 유일하게 전 기능을 갖춘 XML 파서는 아니다. 이 기사에서는 대니얼 벨리아드(Daniel Velliard)의 libxml2를 펄에서 사용할 수 있게 해주는 펄 인터페이스 XML::LibXML을 살펴보겠다. 참고로 XML::LibXML는 매트 서전트(Matt Sergeant) 와 크리스챤 글란(Christian Glahn)이 만든 것이다.

또다른 XML 파서가 필요한 이유는 도대체 무엇일까?

물론 expat과 XML::Parser가 훌륭하긴 하지만 그렇다고 해서 아주 단점이 없는 것은 아니다. expat은 XML 파서 중 최초의 그룹에 속했고, 그 결과 작성된 그 시점에서 사용자들의 기대를 반영하는 인터페이스를 가지게 되었다. expat과 XML::Parser가 작성된 시기에는 DOM (Document Object Model), SAX, 또는 XPath 등이 존재하지 않았거나 열띤 논의중이어서 '표준'으로 간주되지 않았기 때문에 이들 언어에 대한 인터페이스를 구현하지 않았다. 그 결과 불행히도 대부분의 펄 XML 모듈들은 XML::Parser의 비표준 내지 표준이라고는 하기 힘든 인터페이스에 기반하여 만들어졌기 때문에 입력이 텍스트로 된 XML 문서로 (파일, 파일핸들, 스트링, 소켓 스트림) 처리하기 전에 파싱이 되어야 한다는 가정을 깔고 있다. 이것들은 단순한 경우에는 대개 잘 작동한다. 그러나 최근의 XML 애플리케이션들은 주어진 문서를 가지고 한가지 이상의 작업을 해야 하므로 처리하는 각 단계마다 문서가 스트링으로 직렬화되고 다음 모듈에 의해 다시 파싱되어야 한다는 단점이 있다.

반면 libxml2는 DOM, XPath, 그리고 SAX 인터페이스가 널리 퍼진 후에 작성되어 이 세 가지 표준을 모두 구현하고 있다. 따라서 lixml로 여러분은 파일, 스트링 등에 저장되었거나 일련의 SAX 이벤트들로부터 만들어진 문서를 파싱하여 메모리에 트리를 만들 수 있다. 이 트리들은 W3C DOM과 XPath 인터페이스를 사용하여 조작할 수도 있고 외부 이벤트 핸들러에 넘겨줄 SAX 이벤트를 만드는데 사용될 수도 있다. 이와 같은 유연성은 요즘의 XML 처리에 대한 기대를 반영하는 것으로 XML::Parser가 차지하고 있는 왕좌의 강력한 도전자로 XML::LibXML을 부상시켜 주었다.

XML::LibXML 사용하기

이 달의 컬럼은 작년 초 필자가 쓴 'Perl/XML Quickstart Guide'란 기사의 속편같이 보일지도 모르겠다. 필자가 그 기사를 쓸 당시에는 XML::LibXML이 아직 성숙하지 않은 상태였기 때문에 Quickstart에서 사용했던 것과 동일한 테스트들을 사용해 XML::LibXML을 시험해 보려고 한다. 테스트 케이스에 대한 자세한 내용은 Quickstart에 대한 첫번째 설치와 관련된 기사를 보면 된다. 요약하자면, 두 테스트는 주어진 XML 모듈에서 제공하는 기능들을 이용해 XML 문서에서 자료를 뽑아내 출력하는 방법과 펄 해시에 저장된 자료로부터 XML 문서를 프로그램적으로 만들고 출력하는지 방법을 보여준다.

읽기

XML 문서에 저장되어 있는 자료에 접근하기 위해 XML::LibXML은 표준 W3C DOM 인터페이스를 제공한다. 문서들은 노드를 가지는 트리로 취급되며 노드가 가지고 있는 자료는 노드 객체에 메소드를 호출하여 접근하게 된다.


use strict;
use XML::LibXML;

my $file = 'files/camelids.xml';
my $parser = XML::LibXML->new();
my $tree = $parser->parse_file($file);
my $root = $tree->getDocumentElement;
my @species = $root->getElementsByTagName('species');

foreach my $camelid (@species) {
    my $latin_name = $camelid->getAttribute('name');
    my @name_node  = $camelid->getElementsByTagName('common-name');
    my $common_name = $name_node[0]->getFirstChild->getData;
    my @c_node  = $camelid->getElementsByTagName('conservation');
    my $status =  $c_node[0]->getAttribute('status');
    print "$common_name ($latin_name) $status \n";
}
XML::LibXML 의 가장 흥미로운 기능 중 하나는 DOM 인터페이스는 물론이고 추가로 XPath 언어를 이용해 노드를 선택할 수 있다는 점이다. 아래의 코드에서는 XPath를 사용하여 원하는 노드를 선택함으로써 앞의 예제와 동일한 결과를 얻을 수 있음을 보여준다.

use strict;
use XML::LibXML;

my $file = 'files/camelids.xml';
my $parser = XML::LibXML->new();
my $tree = $parser->parse_file($file);
my $root = $tree->getDocumentElement;

foreach my $camelid ($root->findnodes('species')) {
    my $latin_name = $camelid->findvalue('@name');
    my $common_name = $camelid->findvalue('common-name');
    my $status =  $camelid->findvalue('conservation/@status');
    print "$common_name ($latin_name) $status \n";
}
위의 코드에서 흥미로운 점은 동일한 노드들의 트리에 DOM 과 XPath 인터페이스의 메소드 중에서 애플리케이션의 필요에 가장 잘 맞는 메소드를 섞어 쓸 수 있다는 것이다.

쓰기

XML::LibXML을 이용해 XML 문서를 만들려면 제공되는 DOM 인터페이스를 사용하기만 하면 된다.

use strict;
use XML::LibXML;

my $doc = XML::LibXML::Document->new();
my $root = $doc->createElement('html');
$doc->setDocumentElement($root);
my $body = $doc->createElement('body');
$root->appendChild($body);

foreach my $item (keys (%camelid_links)) {
   my $link = $doc->createElement('a');
   $link->setAttribute('href', $camelid_links{$item}->{url});
   my $text = XML::LibXML::Text->new($camelid_links{$item}->{description});
   $link->appendChild($text);
   $body->appendChild($link);
}
print $doc->toString;
XML::LibXML과 XML::DOM을 구분하는 중요한 차이점은 libxml2의 객체 모델이 W3C DOM 레벨 2 인터페이스에 맞기 때문에 이것이 XML 네임스페이스를 가지고 있는 문서를 더 잘 다룰 수 있다는 점이다. 따라서 XML::DOM은 아래같이 제한적이다.

@nodeset = getElementsByTagName($element_name);
그리고

$node = $doc->createElement($element_name);
XML::LibXML 은 아래와 같이 할 수도 있다.

@nodeset = getElementsByTagNameNS($namespace_uri, $element_name);
그리고

$node = $doc->createElementNS($namespace_uri, $element_name);
SAX가 제공하는 즐거움

이상으로 우리는 XML::LibXML이 제공하는 DOM과 XPath의 장점을 살펴보았다. 그러나 여기서 이야기가 끝나는 것은 아니다. libxml2 라이브러리는 SAX 인터페이스도 제공하여 SAX 이벤트에서부터 DOM 트리를 만들거나 DOM 트리에서 SAX 이벤트를 만들 수도 있다.

아래의 코드는 XML::SAX::Base에 기반을 둔 SAX 드라이버에서 프로그램을 통해 DOM 트리를 만들어낸다. 이 예제에서 초기 SAX 이벤트들은 CamelDriver 클래스에 구현된 커스텀 드라이버로부터 발생되며 CamelDriver 클래스는 XML::LibXML::SAX::Builder 클래스를 호출하여 DOM 트리를 만든다.


use XML::LibXML;
use XML::LibXML::SAX::Builder;

my $builder = XML::LibXML::SAX::Builder->new();
my $driver = CamelDriver->new(Handler => $builder);
my $doc = $driver->parse(%camelid_links);

# doc is an XML::LibXML::Document object
print $doc->toString;

package CamelDriver;
use base qw(XML::SAX::Base);

sub parse {
  my $self = shift;
  my %links = @_;
  $self->SUPER::start_document;
  $self->SUPER::start_element({Name => 'html'});
  $self->SUPER::start_element({Name => 'body'});

  foreach my $item (keys (%camelid_links)) {
    $self->SUPER::start_element({Name => 'a',
                                   Attributes => {
                                     'href' => $links{$item}->{url}
                                               }
                                });
    $self->SUPER::characters({Data => $links{$item}->{description}});
    $self->SUPER::end_element({Name => 'a'});
  }

  $self->SUPER::end_element({Name => 'body'});
  $self->SUPER::end_element({Name => 'html'});
  $self->SUPER::end_document;

}
1;
XML::LibXML::SAX::Generator를 이용해 기존의 DOM 트리에서 SAX 이벤트를 발생시킬 수도 있다. 아래의 코드에서 camelids.xml 파일을 파싱하여 만들어진 DOM 트리가 XML::LibXML::SAX::Generator의 generate() 메소드에 넘겨지면 XML::Handler::XMLWriter 에 있는 이벤트 핸들러가 호출되어 문서를 STDOUT으로 출력하게 된다.

use strict;
use XML::LibXML;
use XML::LibXML::SAX::Generator;
use XML::Handler::XMLWriter;

my $file = 'files/camelids.xml';
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($file);
my $handler = XML::Handler::XMLWriter->new();
my $driver = XML::LibXML::SAX::Generator->new(Handler => $handler);

# generate SAX events that are captured
# by a SAX Handler or Filter.
$driver->generate($doc);

SAX 이벤트를 받아들이고 내보낼 수 있는 기능은 최근 이 컬럼에서 논의되었던 비XML 자료에서 SAX 이벤트를 발생시키고 SAX 필터 체인을 작성하는 것과 연관지어 생각해보면 아주 유용하다고 볼 수 있다. 예를 들면 펄로 쓰여진 SAX 드라이버를 이용해 데이터베이스 질의에서 가져온 자료에 기반을 두고 이벤트를 발생시켜 DOM 객체를 만들 수 있다. 이 DOM 객체는 C-space에서 디스플레이를 위해 XSLT와 굉장히 빠른 libxslt 라이브러리 (이것은 libxml2 DOM 객체를 기대한다)를 사용해 변환되고, 변환된 DOM 트리에서 커스텀 SAX 필터를 이용한 추가 처리를 위해 SAX 이벤트를 발생시켜 최종 마무리를 한다. 즉 이 모든 것을 하면서 스트링을 다시 파싱하기 위해 문서를 직렬화할 필요가 한 번도 없다는 이야기다. 정말 놀랍지 않은가!

결론

이상 우리가 살펴본 것처럼 XML::LibXML은 XML 처리에 대해 빠르면서도 최신식의 접근방식을 제공한다. 이것은 제 1세대라 할 수 있는 XML::Parser와 비교해 볼 때 보다 여러 가지 방면에서 뛰어나다고 볼 수 있다. 그러나 필자의 말을 오해하지 말길 바란다. XML::Parser와 그에 의존하는 모듈은 여전히 유용하고, 잘 지원되고 있기 때문에 짧은 시간 안에 사라질 위험이 있을 것 같지는 않다. 하지만 그것이 유일한 방법은 아니며 XML::LibXML이 제공하는 유연성을 생각한다면 다음 번 Perl/XML 프로젝트를 시작하기 전에 다시 한 번 XML::LibXML을 자세히 들여다 보라고 강력히 권하고 싶다.

 

저자: 킵 햄튼(Kip Hampton), 역 정직한
출처 : 네이버 리눅스유저 그룹 까페
원본 주소 - http://cafe.naver.com/linuxcare.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=2145



반응형

+ Recent posts