2008년 11월 4일 화요일

vim 자동 완성

원문출처:
 http://monac.egloos.com/1936134


autocomplpop.vim : Automatically open the popup menu for completion
http://www.vim.org/scripts/script.php?script_id=1879

2007년 5월에 등장한 플러그인입니다.
autocomplpop.vim 파일을 자신의 홈 ~/.vim/plugin 디렉터리에 복사합니다. 그러면 끝입니다.

C 언어를 쓰거나, 파이썬을 쓰거나, 루비를 쓰거나 잘 동작합니다. 루비라면 apt-get install vim-ruby를 설치하면 잘 동작합니다.

엔터키를 입력하면 완성되지만 비주얼 스튜디오를 쓰던 손맛이 있어서 탭키가 익숙합니다. 그래서 ~/.vimrc에 다음을 추가합니다.

function! InsertTabWrapper()
  let col = col('.') - 1
  if !col || getline('.')[col-1]!~'\k'
    return "\<TAB>"
  else
    if pumvisible()
      return "\<C-N>"
    else
      return "\<C-N>\<C-P>"
    end
  endif
endfunction
inoremap <tab> <c-r>=InsertTabWrapper()<cr>

이 스크립트는 http://blog.blueblack.net/item_164에서 가져왔습니다. ^^;

그런데 조금 문제가 있습니다. 엔터키를 입력해도 항상 코드가 자동 완성됩니다. printf가 아니라 print만 입력하고 싶어도 자꾸 printf만 되죠. 그래서 위 코드를 다시 아래처럼 바꿉니다.

function! InsertTabWrapper()
  let col = col('.') - 1
  if !col || getline('.')[col-1]!~'\k'
    return "\<TAB>"
  else
    if pumvisible()
      return "\<C-P>"
    else
      return "\<C-N>\<C-P>"
    end
  endif
endfunction

inoremap <tab> <c-r>=InsertTabWrapper()<cr>
inoremap <expr> <CR> pumvisible() ? "<C-Y><CR>" : "<CR>"

이렇게하면 코드 완성은 탭키로만하고 엔터키를 누르면 자동 완성은 하지 않고 줄바꿈을 할 수 있습니다.

이 플러그인은 현재까지 다운로드 수가 3257밖에 안 되었습니다. 이런 건 좀 널리 써줘야 해요~

팝업창의 색상 설정은 .vimrc에 다음과 같이 하면 됩니다.

hi Pmenu guibg=#666666
hi PmenuSel guibg=#8cd0d3 guifg=#666666
hi PmenuSbar guibg=#333333

autocomplpop.vim
taglist.vim

taglist 설정

출처
http://withover.com/blog/271?TSSESSIONwithovercomblog=2d4636316b3f6e581c606aee730e9506#recentTrackbacks

설치방법

1. ctags 를 설치한다.

# yum install ctags

2. 아래의 주소에서 taglistxx.zip을 다운받는다

http://vim.sourceforge.net/scripts/script.php?script_id=273 

3. taglistxx.zip의 압축을 풀면, 두 개의 파일(taglist.txt, taglist.vim)이 나오는데 폴더에 각각 복사를 한다.
.vim폴더가 없을 경우 mkdir .vim 으로 생성한다. ( 계정명 withover )

( .vim 폴더가 없을 경우 )
$ mkdir .vim
$ mkdir .vim/doc
$ mkdir .vim/plugin

( 복사되어야 할 파일과 위치 )
/home/withover/.vim/doc/taglist.txt
/home/withover/.vim/plugin/taglist.vim

4. doc 디렉토리로 이동 → vim 실행 → :helptags . 입력

$ cd /home/withover/.vim/doc/
$ vim
( vim 환경에서 )
:helptags .

5. vi 환경에서 :TlistToggle 을 입력하면 코글창을 켜고 끌 수 있다.

주의 - FreeBSD 를 이용하고 있는 경우라면, .vimrc에 아래 설정을 추가한다.

let Tlist_Ctags_Cmd = "/usr/local/bin/exctags"

옵션 .vimrc에 추가

let Tlist_Use_Right_Window = 1   “분할 창을 오른쪽에 배치”
let Tlist_Inc_Winwidth = 0           “콘솔창에서 vim 사용하기”
let Tlist_Auto_Open = 1              "vi 실행시 TagList 자동실행"

다양한 vim 플러그인

http://www.vim.org/scripts/script_search_results.php?keywords=&script_type=&order_by=rating&direction=descending&search=search


ctag 설정


먼저 서두에 제가 작성한 글이 아님을 밝힙니다.
여기서 따옴
http://4ellene.net/tt/1198

사용하기
        
=====================================================
현재 커널 분석이 필요없으므로 일단 패스
ubuntu에서는 커널 upgrade시 /usr/src/kernel folder 이름이 바뀌므로
자칫하다가는 dummy 값을 symbolic link 해줄까봐 나중에 필요할 때 추가해야 겠음

    = > 우선 커널이 있는 폴더로 이동 합니다
           $cd /usr/src/linux/ <== ( 전 linux로 심볼릭 링크가 돼어 있습니다 안돼어 있다면
           심볼릭 링크를 만드셔도 돼고 직접 경로를 다 입력 하셔도 상관없습니다)
           심볼릭 링크 만들기 -> ln -s  /usr/src/커널폴더명 linux
           커널 폴더로 이동했으면 ctags -R 을 입력하여 tags 파일을 생성합니다
           시간이 좀 걸리는데 ls로  tags 파일이 생성 된걸 확인 합니다



<extra 기능 >

ex 모드 -> vi 에서 : 을 눌러서 명령을 입력 하는 모드를 말합니다
ex 모드에서 :tj 함수명 이나 구조체명 (왜 tj 인가 ?  tags jump 약어)
(찾고자 하는 함수명이나 구조체 이름등을 입력 하면 관력 이름 함수나 구조제..정보가 나타 납니다 )
보통 한두가개 아닌경우 스페이스바를 누르면 목록이 더나오며 d 를 누를 경우 한페이지씩..
보여 줍니다 나갈때는 q로 나갈수 있습니다 그럼 <CR> 이 나오는데 여기서 찾은 함수나 구조체
번호를 입력 하면 자동으로 점프합니다

다른 방법으로 가는 방법은 커널 소스를 vi열어서 분석하다가 함수 원형이나 구조체 이름에서
ctrl + ] 를 누르면 자동으로 태그를 찾아 갑니다
이전으로 다시 돌아 올때는 ctrl + t 를 사용 해서 돌아 올수 있습니다

ex모드 : sts 함수명 , 구조체명
위에서 설명한 tj와 비슷 하지만 한가지 다른점이 수평창분활을 해서 결과를 보여 줍니다

이외 명령이 더 있지만 실제 이거만 알아도 충분 합니다 나머지 이전으로 돌아가기 이런건..
거의 실제 사용 되지도 않습니다 위에 설명한 4가지 방법이 주로 쓰는 방법입니다.

2008년 10월 23일 목요일

2008년 7월 20일 일요일

12Monkey를 보고


<키산드라 예지 >

원래 과거는 1996년 우발적으로 바이러스를 퍼트리지만 주인공이 과거로 감으로써 과거 또한 변하고 있음.

큰 줄기는 변하지 않으나 잔잔한 가지들은 변함..

주인공이 1996년에 세균에 의해 인구 대부분이 죽는다는 것을 말한 것이 예지가 되어버리고 원래는 범인이 아니지만 나중에 범인이 되는 놈이 1996년에 범행을 저리르는 계기가 됨 .

  • 영화상의 브래드 피느가 경고론자들의 경고를 무시한다고 하고 자기가 그일을 하게 되는 것은 운명이라 믿음


정체를 알수 없는 미지의 목소리 ( 3번 나옴 )

처음에 병원에서 도망칠 때, 그리고 경찰에 쫓기며 물장구 칠 때 , 마지막으로 공항에서

  • 자신의 내부의 목소리일 수도 있고 ( 상상이 만들어내는 것이라고 살짝 암시를 주기도 함 )
  • 정말 신이 있어서 주인공을 다시 과거로 보내려는 초월적인 존재일 수도 있음

    (니가 진정으로 원하는 것이 무엇인지 일깨워 과거로 돌아가도록 설득함 )


여자의 전화로 인해 보안등급이 올라가고 12monkeys가 바이러스에 접근을 못하다고 볼 수 있나?

그래서 범인이 바뀐 걸까 ?


운전사를 포함하더라도 12명이 안됨. 바이러스를 퍼트릴 놈이 여기 멤버일까 ?

사실 12monkey와 바이러스를 퍼트리는 놈과 사고 전제가 틀리다고 볼수도 있다.

12monkeys는 단지 억압받는 동물들의 해방이라면

바이러스를 퍼트리는 놈은 모든 인간이 당연히 죽어야 할 존재로 인식하고 있다.

연관성을 가질 수 있을까 ?


이 목소리의 주인공은 자기자신일까 신일까 ?


불쌍한 브루스윌리스

아마 미래의 과학자들은 주인공에게 총을 준 것은 그냥 죽어라고 준 것 같다. 브루스 윌리스도 체제에 순응을 하지 못한 것에 대한 과학자들의 분노라고 말하고 있다. 그렇지만 여자 땜시 그냥 끝까지 추적한다. 나같으면 이빨도 뺐으니 여자 친구 데리고 알래스카로 도망간다.

바이러스 퍼지는 경로도 이미 알고 있고(샌프란시스코, 어쩌구 저쩌구 ) 충분히 피할수 있을 법한데 …

자기가 역사를 바꿀 것이라고 믿었던 것이 컸다.

영화의 전제는 깨어지지 않았다. 사실 합리적인 과학자들이 미래를 바꾸려고 얼마나 과거로 사람들을 보냈겠나.. 그게 안되니까. 초기 바이러스 원형이라도 구해 오라고 시킨 것 같다.

데스터네이션이 떠오르네..

2008년 6월 24일 화요일

파이어폭스 설정

ubuntu 설정

파이어 폭스에 대한 설정


http://noneway.tistory.com/157




2008년 5월 14일 수요일

vi 간단한 팁

vi[Visual Edit]의 간단한 팁들...
[사용하고 있는 헤더파일 열기]
***.h (Header file) 에 커서를 이동시킨후에
[ctrl + wf] : 해당 Header file 이 창이 분할 되어서 표시된다.
------------------------------------------------------------------------------------
[Tab Size 를 변경하기]
명령어 모드에서
[set ts=8]
[set sts=4]
ts [tabstop] : tab 사이즈가 얼마나 보일지를지정한다.
sts [softtabstop] : 실질적으로 얼마만큼의 간격으로 이동할지를 지정한다.
-------------------------------------------------------------------------------------
[함수을 폴딩하기]
함수가 많을경우 보지 않는 함수를 폴딩하는 기능이다.
v 로 폴딩하고자 하는 영역을 지정하고
zf 를 입력하면 지정된 영역이 폴딩된다.
폴딩된 영역의 해제는 zo 를 입력하면 다시 원상태로 복귀
--------------------------------------------------------------------------------------
[함수의 범위를 파악하기]
함수의 범위가 어디까지인가 를 { , }확인가능하는 기능이다.
{ 에서 % 를 누르면 해당하는 } 로 이동한다.
--------------------------------------------------------------------------------------
[파일탐색기능으로 파일열기]
해당 화일을 같은 vi 상에서 보고싶을경우 어떤 파일명을 전부 입력하여 열수있지만
:20vs./ 와 같이 입력하면 탐색기와 같이 탐색하여 파일을 열수 있다.
20 -> 창의 사이즈(% 값이다.)
vs -> vertical screen 즉 vi 의 창을 세로 분할하여 파일의 내용을 보여주겠다는 것
./ -> 어느 폴더를 보여줄것인지 ./ 는 현재 폴더이다.
따라서 :20vs./ 를 입력하게 되면 창의 20% 가 탐색기와 같이 열리게 된다.
--------------------------------------------------------------------------------------
[현재vi창에서 다른 파일 열기]
현재의 창에서 다른 파일을 열고 싶을경우
:e FileName 을 입력하면 된다.
--------------------------------------------------------------------------------------
[파일의 처음과 끝으로 이동하기]
해당파일의 처음으로 이동하거나 끝으로 이동하려면.
파일의 처음으로 이동시 :1 을 입력하여 이동가능하나, gg 를 실행하면 파일의 처음으로 이동한다.
파일의 끝으로 이동하려면 :$ 를 입력하여 이동가능 하지만 G 를 실행하여도 파일의 끝으로 이동한다.
--------------------------------------------------------------------------------------
[블럭 지정하기]
한줄이 아닌 원하는 부분을 삭제하거나 복사 등의 명령을 내리고 싶을경우엔
ctrl+v 를 입력한 후에 원하는 부분을 블럭을 지정할 수 있다.
블럭을 지정한 후에
y : 해당 블럭 복사
d : 해당 블럭 삭제
U : 해당 블럭 대문자로 변경
u : 해당 블력 소문자로 변경
~: 해당 블력 대소문자 변환
--------------------------------------------------------------------------------------
[되살리기와 되돌아가기]
실행한 명령을 되돌리기 즉 윈도우의 ctrl+z 에 해당하는 u 명령어와
되살리기 윈도우의 ctrl + y 에해당하는 ctrl+r 명령어가 있다.
--------------------------------------------------------------------------------------
[문자열 치환하기]
해당하는 문자열을 치환하기 위해서는
:%s/old/new/g 를 실행하면 문서 전체를 범위로 하여 해당 old 문자를 new 로 치환한다.
:s/old/new/g 를 실행하면 현재 라인에서 검색하여 치환을 실행한다.
:%s/old/new/gc 를 실행하면 치환하기 전에 사용자에게 확인을 한다.
--------------------------------------------------------------------------------------
[vi창을 분할하여 사용하기]
작업을 하다보면 다른 파일의 소스를 참조해야할 일들이 있다 이럴때 창을 나누워 사용하면편리하겠지..
이럴때 사용하는 명령어는
ctrl+w s : 현재 파일을 두개의 수평창으로 나눔
ctrl+w v : 현재 파일을 두개의 수직창으로 나눔
이렇게 나뉘워진 창으로 의 이동은 ctrl + ww 를 입력하면 이동 가능하다.
나누어진 차에서 다른 파일을 불러드리고 싶으면 ctrl + e FILE_NAME 을 입력한다.
--------------------------------------------------------------------------------------
[분할된 창의 크기를 조절하기]
분할된 창의 크기를 조절할 필요가 있을 것이다. 이때는 다음과 같이 사용하면 된다.
수평분할의 경우
ctrl+w N+ : N만큼 증가한다.
ctrl+w N- : N만큼 감소한다.
수직분할의 경우
ctrl+w N> : N만큼 오른쪽으로 증가
ctrl+w N< : N만큼 왼쪽으로 증가
공통적인 것
ctrl+w = : 창의 크기가 균등하게 분할
--------------------------------------------------------------------------------------
[원하는 위치를 마킹하기]
어떠한 특정한 위치를 마킹하여 사용하고자 할때 즉 임의로 저장해 이동하려할때는
vi 의 마킹기능을 이용하면 편리하다.
원하는 위치 즉 기억 시키고 싶은 위치에 커서를 이동하고
ma 를 입력한다. (여기서 a 대신에 a-z 까지 입력가능하다.)
그러면 a 라는 마킹 이름으로 현재 커서의 위치가 저장이 된다.
mA 를 입력하게 되면 현재 파일에서만의 이동이 아닌 전역적으로 다른 파일에서도 이동가능하게 된다.
마킹된 곳으로 이동하는 방법은 'a 또는 'A 를 입력하면 해당 마킹 지점으로 이동하게 된다.
현재 마킹된 정보를 알아보는 방법은 :marks 명령어를 통해서 가능하다.
--------------------------------------------------------------------------------------
[편집중에 명령어를 수행한는 법]
편집화면 중에서 어떠한 셀 명령어를 실행하고 싶을 경우에는
:!command 를 실행하면된다. 이렇게 하면 명령어를 실행하고 난 후에 다시 편집 창으로 돌아온다.
만약 실행 명령의 결과를 현재 편집창에 넣고 싶다면
:r !command 를 실행하면 된다.
--------------------------------------------------------------------------------------

2008년 5월 13일 화요일

윈도우 단축키

[Alt+←]
:마우스의 '뒤로' 버튼과 동일한 기능이다. 백스페이스 키 대신 쓸 수 있다.
[Alt+→]
:마우스의 '앞으로' 버튼과 동일한 기능이다.
[Alt+Home]
: 지정된 시작 페이지로 이동한다. [Home] 키를 클릭할 때와 같은 기능이다.
[Alt+D]
: 탐색기나 웹 브라우저의 주소 입력 창을 여는 데 사용한다. [F4] 키와는 다르다.
[Alt+Tab]
: 멀티태스킹 작업을 할 때 프로그램과 프로그램 사이를 이동한다.
[Alt+Esc]
: 멀티태스킹 작업을 할 때 프로그램과 프로그램의 열려진 창 사이를 순서대로 이동한다.
[Alt+Enter]
: 등록 정보를 표시한다. 팝업 메뉴의 '등록 정보'와 동일한 기능이다.
[Alt+스페이스 바]
: 현재 선택된 창의 조절 메뉴가 나타난다. 현재 창의 제목 표 시줄에 나타난 아이콘을 클릭하는 것과 동일한 효과를 낸다.
[Alt+스페이스 바+M+방향키]
: 활성 창의 위치를 방향키로 조절한다.
[Alt+스페이스 바+S+방향키]
: 활성 창의 크기를 방향키로 조절한다.
[Alt+스페이스 바+X]
: 활성 창을 최대화한다. 창의 오른쪽 상단에 있는 '최대화' 버 튼과 동일한 기능이다.
[Alt+스페이스 바+R]
: 최대화 모드로 설정된 활성 창을 이전 크기로 변환한다. 창의 오른쪽 상단에 있는 '이전 크기로' 버튼과 동일한 기능이다.
[Alt+스페이스 바+N]
:활성 창을 최소화한다. 창의 오른쪽 상단에 있는 '최소화' 버 튼과 동일한 기능이다.
[Alt+F4]
: 현재 활성화된 창을 닫는다. 사용 중인 프로그램을 종료하거 나 윈도를 종료할 때 이용한다.
[Alt+Print Screen]
: 모니터에 나타난 화면을 캡처하여 클립보드에 복사하거나 저 장한다.
[Ctrl+E]
: 검색 창을 연다.
[Ctrl+I]
: 즐겨 찾기 창을 연다.
[Ctrl+B]
: 즐겨 찾기 구성 대화상자를 보여준다.
[Ctrl+H]
: 열어본 페이지나 파일의 목록을 볼 수 있다.
[Ctrl+P]
: 현재 페이지를 프린터로 인쇄한다.
[Ctrl+Tab] 또는 [Alt+D]
: 주소 입력 창으로 바로 이동한다.
[Ctrl+W] 또는 [Alt+F4]
: 사용 중인 윈도 창을 닫는다.
[Ctrl+A]
:현재 화면에 나타난 사항을 선택한다(블록 지정).
[Ctrl+C]
: 선택된 영역을 복사한다.
[Ctrl+V]
: 클립보드에 복사된 내용을 붙여넣는다.
[Ctrl+Esc]
: '시작' 버튼을 클릭하는 것과 동일한 효과를 볼 수 있다.
[Ctrl+파일 드래그]
: 선택된 파일이나 폴더를 복사한다. [Ctrl+C]와 동일한 기능 이다.
[Ctrl+Shift+파일 드래그]
: 파일이나 폴더를 마우스 오른쪽 버튼을 누른 상태로 드래 그하는 것과 동일한 기능이다.
[Ctrl+Tab]
:대화상자에 탭이 여러 개 있을 때, 탭과 탭 사이를 이동하고 싶을 경우 사용한다. 웹 브라우저에서 프레임 사이를 이동할 때도 사용한다.
[Ctrl+Alt+Delete]
: 작업에 응답이 없을 경우 해당 프로그램을 강제 종료할 때 사용한다. 윈도 2000이나 윈도 XP에서는 '작업 관리자' 창이 뜬다.
[Shift+링크 클릭]
: 새로운 창에 링크를 연다.
[Shift+Delete]
: 파일이나 폴더가 선택되어 있는 상태에서는 휴지통에 버리지 않고 하드디스크에서 완전히 삭제한다. 나중에 복구할 수 없 으므로 사용에 주의해야 한다.
[Shift+F10]
:파일이나 폴더를 선택한 상태에서 마우스 오른쪽 버튼을 클 릭하는 것과 동일한 기능이다. 팝업 메뉴를 불러낼 때 사용한 다.
[Shift+Tab]
: [Tab]과 반대 방향으로 이동한다.
[Shift+파일 드래그]
: 파일을 이동할 때 사용한다. 일반 파일의 경우에는 그냥 드래 그해도 이동되지만, 실행 파일인 경우(확장자가 EXE, COM인 경우)에는 [Shift] 키를 누른 상태에서 드래그해야 이동이 가능하다. 실행 파일인 경우 그냥 드래그하면 이동되는 대신 바로 가기 파일이 만들어진다.
[Shift+CD 삽입]
:CD-ROM에 CD를 삽입할 때 자동 실행을 방지한다. [F11] 전체 화면으로 전환한다. 다시 [F11] 키를 누르면 원래 화면 으로 복귀한다.

[윈도 키+E] 윈도 탐색기를 실행한다.
[윈도 키+R] 실행 창을 연다. 마우스로 '시작→실행'을 클릭하는 것과 동일 한 기능이다.
[윈도 키+D] 활성화된 창을 모두 최소화한다.
[윈도 키+F] 파일이나 폴더를 찾을 수 있는 '찾기(검색)' 창을 연다.
[윈도 키+Pause] '시스템 등록 정보' 창을 연다.
[윈도 키+F1] 도움말을 보여준다.
[윈도 키+M] 현재 활성화된 모든 창을 최소화한다.
[원도 키+Shift+M] 모든 창의 최소화를 취소한다.
[윈도 키+Tab] 작업 표시줄에서 실행 중인 프로그램의 아이콘을 선택한다.
[F1] 선택된 아이템에 대한 도움말을 볼 수 있다.
[F2] 파일이나 폴더, 단축 아이콘의 이름을 변경할 수 있다. 팝업 메뉴의 '이름 바꾸기'와 동일한 기능이다.
[F3] 파일이나 폴더를 찾아준다. '찾기'와 동일한 기능이다.
[F4] 탐색기나 웹 브라우저의 주소 입력줄과 히스토리 창을 여는 데 이용한다.
[F5] 또는 [Ctrl+R] 마우스의 '새로 고침' 버튼과 동일한 기능이다.
[F6] 탐색기에서 오른쪽 창과 왼쪽 창을 전환한다.
[F11] 또는 [Ctrl+더블클릭] 웹 브라우저에서 전체 화면 모드로 바꿀 때 사용한다.
[Ctrl+W] 윈도 탐색기나 익스플로러 창을 종료한다

2008년 4월 30일 수요일

vi 치환 정리해본 사이트

http://fedora.egloos.com/2575079

2008년 4월 6일 일요일

kernel compile

//http://hanaduri.egloos.com/19092 에서 퍼옴


//출처가 저가 아니라는 점을 밝힙니다.


kernel comfile..


많은 분들이 커널 컴파일 방법을 그냥 한줄로 줄줄이 외워버리고 마는것 같습니다.


예를 들어


'cd /usr/src/linux;make mrproper;make xconfig'


'make dep;make clean;make zlilo;make modules;make modules_install;


make install;reboot'


라고 쳐 넣고 커널 컴파일이 끝나기를 기다리곤 하지요...


하지만 각각이 뭘 의미 하는 건지 잘 모르고 그냥 줄줄이 외우고 있기만


하신것 같더라구요...


그래서 제가 제 나름대로 각각의 설명을 해 보려고 합니다...




우선 그림(?)을 그려보면 이렇습니다


make mrproper -* /make xconfig -* make dep;make clean -* //make zlilo


|make menuconfig| |make bzlilo/


make config / |/make zImage


\make bzImage/


-* make modules


-* lilo 설정



-* make install -* lilo 설정



-* make modules_install


입니다. (그림이 좀 복잡하지요? ^^;;)



make mrproper


커널 컴파일과 관련해서 여러가지 문제가 발생할 수 있는 것들을


초기화 해주는 것입니다.


그러나, make mrproper는 저는 개인적으로 하지 마시기 바랍니다 ^^


이걸 써야 하는 상황이라면 좀 더 커널 설정에 대해 자세히 아셔야 합니다


커널 설정과 커널 컴파일시 생성되는 대부분의 화일을 초기화 시켜 버리는


것입니다...


특히, 이것을 수행하게 되면,


기존에 커널 설정해 놓은 정보도 모두 날라가 버리거든요....




make xconfig/menuconfig/config


그리고 xconfig는 아시겠지만 X에서 커널 설정을 하게 해주는 것이구요


menuconfig는 ncurses라는 라이브러리가 설치되어있고 X를 사용하지


않고 설정을 할때 쓰는 방식이구요.


config는 X도 ncurse도 없다 할때 쓰시면 됩니다...


세가지의 기능상 차이는 없고 그냥 사용자에게 보여지는 인터페이스가


조금씩 다르지요...


이 글에서는 각 설정에 대해 말씀 드리지 않겠습니다


넘 길걸랑요.. 다른 자료를 찾아 오시구요. 그리고 자신의 하드웨어


사양에 대해 자세히 아셔야 합니다



make dep;make clean


그리고, 그다음에 make dep이라는 것은 config 설정이 끝났으면


그것을 실제 컴파일 과정에 들어가게 하기 위해서 여러가지 의존성 설정을


하는 것입니다. 예를 들어


sb(사운드 블레스터 모듈) 이 뜨기 전에 sound라는 모듈이 떠야하고


sound가 뜨기 전에 soundcore가 떠야 한다는 둥의 의존성입니다...


이 의존성은 make config 시에 정해 지는 것이구요 make dep이라는


명령으로 실제로 적용시키는 것입니다


그다음에 make clean은 그냥 찌꺼기를 청소하는 것이라고만 아시면되겠구요



make zImage/make bzImage


그리고, make zImage가 있고, bzImage기능이 있는데


전자는 말 그대로 커널을 컴파일해서 이미지를 만드는 것입니다


(저는 이 과정이 끝난뒤에 압축이 이루어 이는 것으로 알고 있습니다.


앞에 붙은 'z'가 압축을 의미한 것으로 알고 있습니다


이것은 /usr/src/linux/arch/i386/Makefile을 살펴 보면


'compressed: zImage'라는 항목으로 확인 할 수 있습니다.)


그리고 후자는 b가 붙는데 커널의 이미지가 일정 크기 이상이 되면


컴파일 방식이 바뀌어야 하는 모양입니다.


(여기서 b는 big을 의미하는 거겠죠? ^^;)


그래서 커널 이미지가 큰 경우 이 방식으로 컴파일을 해야 합니다


그러나 제 경험상 커널 컴파일에 대해 좀 노하우가 쌓이게되고


컴파일을 잘하게 되시면 이것은 쓰지 않게 되실겁니다...


그렇다면 어떨때는 make zImage를 쓰고,


어떨때는 make bzImage를 쓰는가???


이것은 make zImage를 수행한뒤에


맨 뒤에 에러메시지에 "make bzImage를 사용하십시요"라고 (물론 영어로)


나온다면 make bzImage로 커널 컴파일을 다시하면 됩니다..



make zlilo/make bzlilo


그리고, make zlilo와 make zImage는 별로 차이가 없는 명령입니다.


make zlilo는 lilo사용자를 위한 커널 컴파일 및 설치 명령입니다.


make zImage;make install;lilo 정도의 명령 입니다.


하지만 뒤에서(lilo설정에서)


make zlilo와 make zImage;make install;lilo간의 차이를 설명드리죠


(정확히는 make zlilo는 make zImage뒤에


'mv /vmlinuz /vmlinuz.old;


mv /System.map /System.old;


cat zImage * /vmlinuz;


cp /usr/src/linux/System.map /;


/sbin/lilo;' 를 수행하게 됩니다.)


(참고: make bzlilo라는 것도 있는데,


zlilo와 bzlilo의 차이는 zImage와 bzImage의 차이와 같다고 생각됩니다


역시 /usr/src/linux/arch/i386/Makefile을 살펴 보시면 확인할 수 있음)



make install


그리고 make install인데, 이것은 make zImage나 bzImage 를 통해


생성된 커널 이미지를 설치하는 것입니다.


이 명령에 의해 커널이 설치(install) 되는 곳은


/boot 입니다. 이곳에 vmlinuz-x.x.x-xx형식으로 저장되고,


Symbolic link로 vmlinuz -* vmlinuz-x.x.x-xx가 생성됩니다.



make modules


그 다음에 모듈 컴파일입니다


이 것은 커널에서 사용할 모듈을 컴파일 하는 과정입니다.


(주의:modules에서 's'를 빼먹지 마세요...


물론 빼먹으면 컴파일이 안되지만.. ^^;;)


흔히들 이것은 make zlilo다음에 실행한다고 생각하기 쉬운데


make dep;make clean 이후에 실행가능한 것입니다


make modules는 make dep에서 얻어지는 의존성 정보를 가지고


모듈을 컴파일 하는 것이기 때문입니다.


경우에 따라서는 모듈 컴파일 타임이 커널 컴파일 타임보다


길어질 수 있습니다. (일반적으로는 더 길지요... ^^;;)



make modules_install


make modules_install은 짐작하시는 바와 같이 컴파일 완료된 모듈들을


설치(!)하는 것입니다


(주의:여기서도 modules_install에서 's'를 빼먹지 마세요..)


그러나 이 과정에서 기존에 있던 모듈을 삭제하지 않고 그냥 그 위에


덮어쓰기 하기 때문에 종종 문제가 됩니다


그래서 make modules_install 이전에 /lib/modules/x.x.x-xx


디렉토리를 삭제해 주셔야 합니다.


여기서 x.x.x-xx는 커널의 버전을 의미합니다.


이 숫자는 /usr/src/linux 가 링크된 디렉토리명에서 확인할 수 있습니다.


예를 들어 ls -l /usr/src/linux 했을때 'linux -* linux-2.2.10'이면


/lib/modules에도 2.2.10으로 디렉토리가 생기는 것이죠.


(정리하면 모듈 컴파일및 설치는 아래와 같이 하시면 되겠죠..


'make modules;rm -fr /lib/modules/x.x.x-xx;make modules_install')



lilo설정


이 부분은 lilo사용자에 한하는 부분인데요.


우선 make zlilo(또은 bzlilo)를 사용하신 경우와 make zImage;make install


하신 경우가 다릅니다.


뭐가 다르냐면, 전자의 경우 커널 이미지가 /vmlinuz에 설치가 되고요


후자의 경우는 커널의 이미지가 /boot/vmlinuz에 설치가 되기 때문입니다


lilo설정화일(보통은 /etc/lilo.conf)을 보시면 아래와 같은 항목이 있는데,


image=/boot/vmlinuz


label=linux


root=/dev/hda8


read-only


여기서 zlilo를 사용하셨다면 'image=/vmlinuz'라고 하셔야 하고요


zImage와 install을 사용하셨다면


'image='/boot/vmlinuz'라고 하셔야 합니다


저 같은 경우는 그냥 귀찮아서 위와 같이 설정하고요.


make zImage방식으로 컴파일 할때는


'make zImage;make install'


이라고 하고요


make zlilo의 방식으로 컴파일 할때는


'make zlilo;make install'


이라고 합니다 ^^;;;;;


즉 'make zlilo;make install'이라고 하면 커널 이미지가


/vmlinuz와 /boot/vmlinuz 모두에 설치가 되는 겁니다 ^^;;;;;;


물론 lilo설정뒤에 프롬프트 상에서 'lilo'라고 한번 실행시켜주셔야합니다




!!주의 사항!!


그리고 주의 사항(!!)은 위의 모든 과정은 리눅스 소스가 설치된상태에서


해야 한다는 것(1)과 /usr/src/linux에서 해야 한다는 것(2)입니다


그리고, 커널 컴파일과 모듈 컴파일 중간에 실행을 중단하지 마십시요(3)..


정말이지 잘못 했다가는 커널 컴파일이 아에 안되버리는 수가 생깁니다


소스에 손상이 가는 경우가 있나봅니다...



!!확인!!


그리고, 끝으로 커널이 잘 설치 되었는지 확인하기 위해서


ls -l /boot 를 확인해 보시기 바랍니다.


/boot/vmlinuz과 이것이 링크된 화일이요.....


날짜와 시간이 지금이 맞는지...


그러면 설치가 되었음을 확인할 수 있구요



!!에러 확인!!


그리고 참고로 커널이나 모듈을 컴파일 할때 에러가 나는 경우가 있는데


이것은 어떻게 확인하냐믄요.. make zlilo나 make zImage 또는 bzImage


실행이 끝난뒤를 살펴 보시면 ***ERROR 뭐 이런식으로 눈에 뜨이게


표현됩니다...


그러니 이 메시지를 놓치지 않기 위해서라도


커널 컴파일시에


# make dep;make clean;make zlilo;make modules;make modules_install;make instal


l;reboot


이런식으로 일사천리로 쓰시면 안되겠지요..(물론 순서는 위의 것이 맞습니다 ^^)


저 같은 경우는 우선


# cd /usr/src/linux;make xconfig


# make dep;make clean


하구나서요


# make zlilo


를 실행시킴과 동시에 창 하나를 더 뛰워서


# make modules 를 실행시키고 어디 딴데가서 책 좀 보다 옵니다 ^^


그러고 나면 두경우에 에러가 났는지 안났는지 확인할 수 있지요..


그렇게 확인이 되었으면


# make modules_install;make install;reboot


를 합니다...


(참고: at now 라는 명령을 쓰면 컴파일 과정이 고스란히 저장이 되어서


메일로 저장됩니다만... 본 글과는 좀 거리가 있는 내용이라 생략합니다


다른 분의 글을 참고 하세요...)




!!리부팅~!!


그리고 리부팅 시키면 커널의 압축이 풀리고 커널이 로딩 됩니다


그 뒤에 모듈이 로딩 되기 전에요


"Finding modules dependance..." 를 하지요


앞에서 말씀 드린 모듈들의 의존성 정보를 작성하고요


(depmod -a라는 명령입니다)


그 의존성 정보를 (화일은 /lib/modules/x.x.x-xx/modules.dep) 화일에


업데이트를 수행합니다


혹시 여기서 에러가 발생한다면


커널과 모듈 설치 하시고 그냥 리부팅 하지 마시고요


직접 아래와 같이 해보세요


# cd /lib/modules/x.x.x-xx


# depmod -a


라고 해보세요...


여기서 에러가 안나면 저처럼 나옵니다


---- 인용 시작 ----


[ root@mind 2.2.10]# pwd


/lib/modules/2.2.10


[ root@mind 2.2.10]# depmod -a


[ root@mind 2.2.10]#


---- 인용 끝 ----


에러나 가면 커널 설정을(make xconfig에서요..) 다시 잘 해보시기 바랍니다


이부분은 커널 설정과 모듈 관련 부분이므로 이 글에서는 생략합니다.



2008년 3월 22일 토요일

Road coloring probllem

what is the problem ?


explaination :


who solved?


나보고 풀라고 한다면 ?


그림


이 그림에서 보면 패턴


red- red -blue X3 은 yellow point


blue-blue-red X3 은 green point


point


1. 모든 vertex에서의 degree가 같다.


2. directed graphic 이다.


조건에 있는지는 모르겠지만 red, blue color수가 같다.


방향도 대칭이다.


<수학적인 묘사>


1) G : finite directed graph


2) all vertexs have the same out-degree K


3) all the edges going out from a vertex takes a diffrerent label


얼핏 문제보면 compiler의 register 최적화 기법이 떠오르지만 완전 다른 문제이다. 물론 이 기법은 network에 적용해야 겠지


문제를 engineering 관점으로 본다면 ?


1) algorithm이 간단해진다.


- 만약 어느 지점에서 다른 지점으로 간다면 matrix table이나 어떤 table 을 참조해야 할 것이다. ( router 의 경우 routing table을 이용한다면 )


2) 그렇지만 어느 지점을 가기 위한 최소한의 거리는 아니다.


table 을 이용하는 검색시간 과 그냥 알고리즘을 적용하는 시간 trade off


=>거리가 가까울 수록 유리


3)위의 알고리즘은 특정지역에만 도달할 수 있다.


가령 yellow point와 green point


따라서 한벙향 통신에만 적용된다.


굳이 적용하라고 한다면


ubiquitous에서 각각의 sensor들의 정보를 모을 때 유리할 것같다. 802.15.4 통신에 유리 할 것으로 보임


finite automata = finite state machine


directed graph = periodic graph



2008년 2월 28일 목요일

제물론(장자) - 미완성

1. 方生


삶, 죽음, 어둠과 밝음, 이것과 저것


- 서로가 서로를 가능하게 함


2. 손가락이 손가락아님을 밝힘


구체적 손가락과 일반적 손가락을 틀리다는 것을 의미


장자도 이것에 동의하나 논증 방식은 非손가락을 가지고 손가락이 손가락이 아님을 밝혀야 한다라고 함


객체적인 사실들도 일반화 하다보면 하나라는 점에서 시작.


-> 유가의 正名사상에 본질을 둠, 華嚴 철학 용어로 만물은 相即, 相入이다.


3. 조삼모사


위의 것들을 정리하면 분별을 자제하자는 의미이고, 그것은 옳고 그름도 포함된다.


-> 天均, 兩行이 필요


지금 공대에 몸담아서 공대적인 시각으로 세상을 바라볼 때가 많고 너무 논리적인 것만 추구하는 점을 반성할 필요가 있다.


4. 세가지 지극한 경지


- 아무 것도 없고 경계가 없다.


- 있으되 경계가 없다.


- 사물의 구별은 있으되 옳고 그름이 없다.


5. 도는 大一, 小一이라 했다.


큰 것보다 크고, 작은 것 보다 작다.


본래 하나이던 세계가 의식작용으로 인해 무수한 분별, 다양, 분화가 되어 간다.


2008년 2월 27일 수요일

buffer overflow 방지 요약

情 報 保 護 學 會 誌


第 11 券 第 6 號, 2001. 12


Heap과 Stack 영역에서의 경계 체크를 통한


Buffer Overflow 공격 방지 기법에 대한 연구



1.stack overflow 와 관련된 내용은 잘 알려져 있으므로 생략







2.heap 영역의 overflow


stack영역과 heap 영역의 overflow 차이


- 스택의 리턴 주소와 같이 RET를 overwrite 를 하는 것이 아니고 버퍼에 할당된 포인터 값을 overwrite


heap grow ->


____buf1(16)|8byte spaces|buf2(16)______|____


|<-buf_diff----------->| heapbound


0x0000 0xffff


memset(buf1,'B',(unsigned int)buf_diff+OVERSIZE);


로 buff2경계를 덮어쓴다.























2008년 2월 25일 월요일

strace를 통한 bufferoverflow 방지

strace를 통한 bufferoverflow 방지

제 20회 한국정보처리학회 추계학술발표대회 논문집 참고


(2003. 11)


논문 요약


기존의 bufferoverflow 방지 기법


1. canary 방식


오버플로 가능한 변수 앞에 특정값의 i 라는 canary 변수를 선언하고 overflow 가 되었을 경우 i 영역을 침범하게 된다.


한계 : 해커들이 i값 조차 조작하여 다시 기존의 값으로 바꿀수 이있다.


2. 포인터 무결성 방식


return 값을 다른 곳에 저장시켜 stack의 RET값이 바뀌더라도 상관 없다.


한계 : 성능에 영향을 미치고, 커널 수정 필요



- 대안이 간편한 strace 툴을 이용


일반적인 instruction은 텍스트 영역에 있고, 버퍼오버플로가 일어날 경우 STACK영역을 참조하게 된다.


strace -i 옵션 사용


-i (Print the instruction pointer at the time of the system call. )


stack영역을 침범할 때 사용되는 demon을 만들어줌


2008년 2월 21일 목요일

Evolution 사용시 key가 잠겨있을 때

~/.gnome2/keyrings


폴더 안에 예전의 key의 정보가 담긴 data 파일이 있다. 이전에 설정한 적이 없지만 만들어져 있었다.


지우거나 이름을 바꾸고 default내뇽이 담긴 파일을 만들어주면


echo -n default > ~/.gnome2/keyrings/default


새로 접속할 때 키값을 새로 지정할 수 있다.

blog test

post blog entry 를 이용해서


리눅스에서 간단하게 블로그에 글을 게시할 수 있습니다.


이 프로그램으로 이용할 수 있는 사이트 중


blogger.com이 이용하기 가장 편한 것 같네요 .


주로 저의 자료 저장과 문서 정리, 등으로 쓰일 것입니다.


주제는 주로 리눅스 활용과 보안과 관련된 글을 올릴 생각입니다.