vi.
~/.vimrc :: ~는 사용자 home풀더. .vimrc 파일은 vim을 실행시킬때 자동으로 실행되는 파일입니다.
// .vimrc 내용 //
set shiftwidth=2 # >>나 <<사용시 들여쓰기 간격
set expandtab # tab 문자를 공백문자로 변환
set softtabstop=2 # tab 간격을 공백으로 변환하면, 삭제시 두칸단위로 삭제
set visualbell # 경고 비프음 대신 한번 번쩍이는 비쥬얼 벨로 경고 사용
set nobackup # 백업 파일을 생성하지 않습니다.
set cindent # c언어 스타일의 들여쓰기 사용
set autoident # 자동 적인 들여쓰기 사용
set smartindent # 좀 더 지능적인 들여쓰기 사용
set enc-euc-kr # 인코딩 한글로 지정. 한글 삭제시 한글 단위로 삭제(2byte)
set incsearch # 키워드를 입력할때마다 검색하는 점진검색 사용
syntax on # 파일 종류에 따라 구문 강조
set background=dark # 배경을 어두운 색으로 지정
colorscheme evening # VI 색상 테마를 evening으로 지정
set backspace=eol,start,indent # 줄의 끝, 시작, 들여쓰기에서 백스페이시 이전 줄과 연결
set history=1000 # VI 편집기록 1000 개 저장
set hlsearch # 검색어 강조
set ignorecase # 검색, 편집, 치환 시에 대소문자 구분 않는다.
set showmatch # (),{}에서 닫는 괄호를 입력할때, 일치하는 괄호 보여줌
사실 위 내용에서 상당수는 putty에서 자동으로 인식하여 실행해줍니다.
.~rc 라는 파일을 잘 이용해 주시면 좀더 멋진 쉘 환경을 만들 수 있겠네요
============================== ctags ==============================
ctags :: 함수, 변수, 구조체 등 소스의 위치를 쉽게 찾고, 이동할 수 있는 리눅스 유틸
cC언어 소스 코드의 함수, 구조체 등을 tag 로 구성하는데, tag는
함수, 구조체 등의 정보들이 어떤 파일에 몇번째 줄에 있는지.. 와 같은 정보를
담고있는 데이터 베이를 담고있습니다.
설치 ::
apt-get install ctag // 데비안 리눅스..
rpm -ivh ctags* // 레드햇 계열..
yum install ctags* // CentOS, 페도라 등..
리눅스 커널 소스가 있는 디렉터리로 이동..
/usr/src/linux-2.6.14.6]# ctags -R // -R옵션 :: 하위 디렉터리까지 검색
// ctags 를 이용한 커널 소스 검색
/usr/src/linux-2.6.14.6]# make tags // ctags -R 대신에 커널 소스 태그 생성 가능
-> 결과물 ::
-rw-rw-r-- 1 sosal sosal 45196899 9월 29 18:47 tags
-- 태그 검색을 통한 vi 시작
struct task_struct가 있는 곳부터 vi를 실행시키자!
/usr/src/linux-2.6.14.6]# vi -t task_struct // 반드시 tags 파일이 있는곳에서 실행
task_struct 구조체 안에 보니, mm_struct가 있네요.
mm_struct가 어떻게 정의되어있는지 궁금하다면, 커서를 mm_struct로 이동한후
ctrl + ] (== ^]) 를 입력하면, tags 파일에서 해당 태그 정보를 찾아
해당 파일로 이동합니다.
뒤로 갈때는 ctrl + t (==^T) 를 입력하면 됩니다.
커널 코드에 대해서는 천천히 블로깅 할테니, 당황할 필요 없을꺼에요.
명령모드에서 태그로 이동하고 싶다면,
:ta task_struct (== :tag task_struct)
ta는 태그db 에서 첫 번째로 검색된 결과로 이동하기 때문에,
원하는 것과 다른 결과를 얻을 수 있습니다.
두번쨰 검색 결과로 갈때는
:tn ("tn는 tag next 의미")로 다음 검색 결과로 이동하고,
:tp ("tp는 tag previous ")로 다시 돌아갈 수 있습니다.
:ta [name] 명령어 대신에 :ts [name] 를 이용한다면, (ts는 " tag select ")
원하는 검색 결과를 한눈에 보고, 결과들 중 원하는 것을 선택할 수 있게 됩니다.
==== :ts schedule 입력시 모습 ====
==== :ts schedule 입력시 모습 ====
CPU 시간을 프로세스에게 할당하는 schedule을 관리하는 함수
schedule()는 4번임을 목록으로 확인할 수 있습니다.
4를 입력하고 Enter 를 치면, schedule()로 이동합니다..
== 간단한 ctags 명령어 목록 ==
:ta [name] :: name과 일치하는 태그 위치로 이동
ctrl + ] :: 커서가 위치하고 있는 함수나 구조체의 정의로 이동
ctrl + t :: 이전 위치로 돌아오기
:ts [name] :: name과 일치하는 태그 목록 출력
:ta /[name]:: name과 일치하는 태그 목록 출력
:tj [name] :: 목록이 한개인 경우 이동, 여러개인 경우 목록 출력
:tn :: 다음 태그로 이동 (tag next)
:tp :: 이전 태그로 이동 (tag previous)
:tags :: 이동한 태그 히스토리 목록 출력
==============================
커널 소스에 대해 ctags를 이용하려면, 소스가 있는 위치.
(저에게는 /usr/src/linux-2.6.14.6) 로 이동해서 vi를 실행해야 하는 불편이 있는데,
어디서든지 (vi -t [name])을 입력하여 커널 소스를 볼 수 있게 하고 싶다면,
~/.vimrc 설정 파일의 내용을 추가해줍니다.
set tags+=/usr/src/linux-2.6.14.6/tags
cgtags 태그 데이터베이스를 이진검색으로 하기. .vimrc에
set tagbsearch
를 추가해 주시면, 검색 속도를 개선할 수 있습니다.
============================== cscope ==============================
ctags로 보는 코드들의 정의만으로는 알기 힘든 사용법들 (커널 안에서 활용법)을
알려 주는 도구. cscope입니다.
UNIX 환경에서 매우 비싼 코드 분석도구 Scope가 있는데,
이를 오픈소스로 구현해서 공개한 것이 cscope 입니다.
apt-get install cscope // 데비안 리눅스..
rpm -ivh cscope* // 레드햇 계열..
yum install cscope* // CentOS, 페도라 등..
cscope에서 데이터베이스를 구축할 파일 목록을 먼저 만들어야합니다.
데이터베이스 구축을 위한 파일명언 cscope.files 입니다.
/usr/src/linux-2.6.14.6]# find ./ -name *.[chS] -print > cscope.files
[cscope]를 실행합니다.
cscope는 두부분으로 나뉩니다. 윗부분은 결과물, 아랫부분은 검색부분입니다.
각 부분은 [tab] 키로 이동할 수 있습니다.
Find this C symbol: ctags와 마찬가지로 C심볼을 찾습니다. (변수, 함수, 매크로, 구조체 등)
Find this global definition: 전역 선언만 검색합니다.
Find functions called by this function: 한 함수에 의해 호출되는 또다른 함수들을 찾습니다.
Find functions calling this function: 한 함수를 호출하는 모든 함수를 찾습니다.
함수의 쓰임새나 어떤 경우에 호출되는지 알고 싶은 경우 유용하게 사용됩니다.
Find this text string: 텍스트 문자열을 검색
Change this text string: 문자열 검색하여 변경. (자신의 소스코드 수정 이외엔 잘 쓰이지 않습니다.)
Find this egrep pattern: 정규식을 이용하여 소스코드 검색.
예를 들어, 커널 내부에는 다양한 등록함수들이 있는데, 이들 함수를 모두 찾아내고 싶다면
[register_\w+]와 같이 입력하면 됩니다.
Find this file: 특정 이름을 포함한 파일을 모두 검색합니다.
Find files #including this file: 특정 헤더파일을 포함시키는 모든 소스코드 찾기.
Find all function definitions: 함수의 정의를 검색합니다.
====================== Vi , cscope의 연동 ======================
vi에서 cscope를 사용하기 위해서는 cscope 데이터베이스를 연결해야 합니다.
vi에서 [:cs add /usr/src/linux-2.6.14.6/cscope.out ] 를 실행해서 추가합니다.
cscope 데이터베이스 연결은 여러 개를 할 수 있는데, [:cs show] 로 확인할 수 있습니다.
연결된 데이터 베이스를 종료하려면 [:cs kill 0]
:cs show :: 데이터베이스 확인
:cs help // cscope 도움말
검색 유형 | 설명 |
0 or s | C 심볼을 검색합니다. |
1 or g | 정의를 검색합니다. |
2 or d | 이 함수에 의해 호출되는 함수들을 검색합니다. |
3 or c | 이 함수를 호출하는 함수들을 검색합니다. |
4 or t | 텍스트 문자열을 검색합니다. |
5 or e | 확장 정규식을 사용해서 검색합니다. |
7 or f | 파일 이름을 검색합니다. |
8 or i | 이 파일을 인클루드 하는 파일을 검색합니다. |
위 표는 책을 참조했는데, 6번 칸이 없더라구요.. 찾아봐야겠습니다 ㅠ
:cs find 0 task_struct // C심볼 task_struct를 검색합니다.
cscope 의 검색 결과를 볼 수 있습니다.
space bar로 다음페이지를 볼 수 있고, 해당 번호를 입력하여 소스 코드로 이동할 수 있습니다.
:ta 또는 :tag 명령도 cscope를 이용하게 설정할 수 있습니다.
.vimrc에서 set cst 를 추가하세요. // 사용하지 않으려면 set nocst
'Linux > Linux_technic' 카테고리의 다른 글
Object file - ELF 파일 (0) | 2009.10.23 |
---|---|
od - 바이너리 파일 덤프 (0) | 2009.10.23 |
File - 파일종류 확인 (0) | 2009.10.22 |
Boot loader - LILO와 GRUB (0) | 2009.09.27 |
01. Linux 기본 명령어, 권한 (1) | 2009.09.26 |