vim 설정 방법

우분투9.04를 기준으로 기술한다.
sudo vi /etc/vim/vimrc
꼭 관리자 모드로 수정해야 함
안그럼 적용이 안돼!

set tabstop=4
set cindent
set cin
set number

기본적인 설정은 이정도만 하자 인터넷을 뒤져보면 여러가지 설정을 할수가 있음
vi [파일명]
을 치면 번호와 들여쓰기, 탭이 4만큼 뛰어쓰기 되는 것을 알수 있다.

bash 설정 방법

역시 관리자 모드로 bash 파일을 연다
sudo vi /etc/bash.bashrc
alias vi=vim
alias l='ls -al'
이정도만 수정하고 저장을 한다음 빠져 나온다.
source bash.bashrc
실행후
'ㅣ' 을 쳐봐라

※. 참고로 sudo 명령을 계속 붙이기 귀찮다면 sudo -s 명령어를 이용하여 root권한 획득후 마음데로 편집을 하여도 상관없다. 이상









'운영체제(OS) > Linux' 카테고리의 다른 글

ftp, grep, makefile 설정 기술문서  (0) 2009.12.20
vi 명령어  (0) 2009.08.20
한컴리눅스에 제로보드 설치하기  (0) 2009.08.05

우분투에서 확인한 결과 잘되네요...

'운영체제(OS) > Linux' 카테고리의 다른 글

vim 환경설정 및 bash 설정 방법  (0) 2010.01.02
vi 명령어  (0) 2009.08.20
한컴리눅스에 제로보드 설치하기  (0) 2009.08.05
어셈블러로는 프리웨어로 유명한 nasm 어셈블러를 가장 많이 사용한다고 한다.
대중적으로 인기가 있는 nasm 어셈블러는 공개 소스로 많은 유저들이 운영체제를 만들때 사용을 한다고 한다. mintOS라는 완성도 높은 OS도 한국사람이 만든 OS인데 정말 대단한것 같아서 소스를 받아서 분석을 해보니 nasm으로 만들어져 있었다.
http://mint64os.pe.kr/ 사이트로 가면 mintOS에 대한 정보를 볼수 있으니 여러분도 가서 함 훌터 보기 바란다. 분석은 조금 무리더군요 ㅋㅋ 아직 배운게 없어서 그런지
아 너무 서론이 길었네요. 그리고 masm 어셈블러는 마이크로 소프트웨어서 제공하는 어셈블러 인데 상용화 버전 밖에 없어서 어둠의 경로를 통해서 구해야 한다고 하더군요 오늘 볼 nask 어셈블러는 나스크라는 사람이 만든 어셈블러 인데 역시 프리웨어고 nasm 보다는 안정적이고 최적화 능력을 높인 어셈블러라고 하네요 ㅎㅎ 뭐 책에서 이것으로 하는 방법이 나왔으니 다른건 더 찾아 보고 싶지만 이리저리 찾다보면 또 하나 마져 이해를 못할까봐 일단 책에서 나온것 부터 차근차근 하기로 작심했죠 ㅎㅎ
그럼 오늘 제가 공부한 명령어를 한번 봐 볼까요?
준비 됐나요...

DB 0x55, 0xaa
.
.
DB 0xf0, 0xff ...

뭐 이런식으로 사용을 하는데요.
그럼 DB가 대체 뭐길래 저렇게 사용했을까 하는 호기심이 일단 생기네요.
DB 명령어의 정의를 내리자면...
DB란? 데이터베이스 아닙니다... DB명령은 Data Byte의 약어로서, 파일의 내용을 1바이트만 직접 쓰는 명령어 입니다. 또한 이 명령은 어셈블러 세계에서 있어서 최종 병기로, DB 명령만 있으면 어떤 데이터도(결국 어떤 프로그램도) 기술할 수 있습니다. 그런 이유에서 어셈블러로 만들 수 없는 파일은 없습니다. 예를 들어 텍스트 파일도, 그림 파일도, 하려고 하면 뭐든지 만들 수 있습니다. 다른 언어(예를 들어 C언어)로는 이런 만능성(?)은 전혀 기대할 수 없습니다.

이런 내용들이 책에 나왔군요. 정말 흥미로운 것은 일반적인 우리가 사용하는 고급언어로는 할수 없는걸 만들 수 있다는게 마음에 드네요.
오늘은 DB 내용만 설명해도 너무 지루하고 길거 같아서 계속 DB만 설명하겠습니다.

구체적으로 DB는 
문자열을 쓸 수 있습니다. 문자열을 쓰면 문자열을 구성하는 각각의 문자의 문자 코드를 조사하여 그것을 1바이트씩 나열해 줍니다. 이것이 참 편리한 것은, 예를 들어 출력하는 메시지를 변경하고 싶을 때에 문자 코드표를 일일이 찾아보지 않아도 된다는 것입니다.

휴 이제야 설명이 끝났군요. 책은 역시 지루하고 어렵네요.



'운영체제(OS)' 카테고리의 다른 글

makefile 설정  (0) 2009.08.27
OS 구조와 원리  (0) 2009.08.26

1. make.bat 설정
..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

2. Makefile

# 디폴트 동작

default :
 ../z_tools/make.exe img

# 파일 생성 규칙

ipl.bin : ipl.nas Makefile
 ../z_tools/nask.exe ipl.nas ipl.bin ipl.lst

helloos.img : ipl.bin Makefile
 ../z_tools/edimg.exe   imgin:../z_tools/fdimg0at.tek \
  wbinimg src:ipl.bin len:512 from:0 to:0   imgout:helloos.img

# 커맨드

asm :
 ../z_tools/make.exe -r ipl.bin

img :
 ../z_tools/make.exe -r helloos.img

run :
 ../z_tools/make.exe img
 copy helloos.img ..\z_tools\qemu\fdimage0.bin
 ../z_tools/make.exe -C ../z_tools/qemu

install :
 ../z_tools/make.exe img
 ../z_tools/imgtol.com w a: helloos.img

clean :
 -del ipl.bin
 -del ipl.lst

src_only :
 ../z_tools/make.exe clean
 -del helloos.img

보시면 알겠지만 배치 파일로 링크가 되어 있어서 쉽게 접근을 여러 명령어를 종합해서 사용할 수 있음을 보여줍니다. 일종에 매크로 같은 거군요.

..>make run 를 쳐 보았습니다.


위와 같이 가상으로 Hello World 가 찍혔네요.
이제 시작이네요.
간단하게 어셈블리 언어를 보자면 아래와 같습니다.
; hello-os
; TAB=4

  ORG  0x7c00   ; 이 프로그램이 어디에 read되는가

; 이하는 표준적인 FAT12 포맷 플로피 디스크를 위한 기술

  JMP  entry
  DB  0x90
  DB  "HELLOIPL"  ; boot sector이름을 자유롭게 써도 좋다(8바이트)
  DW  512   ; 1섹터 크기(512로 해야 함)
  DB  1   ; 클러스터 크기(1섹터로 해야 함)
  DW  1   ; FAT가 어디에서 시작될까(보통은 1섹터째부터)
  DB  2   ; FAT 개수(2로 해야 함)
  DW  224   ; 루트 디렉토리 영역의 크기(보통은 224엔트리로 한다)
  DW  2880   ; 드라이브 크기(2880섹터로 해야 함)
  DB  0xf0   ; 미디어 타입(0xf0로 해야 함)
  DW  9   ; FAT영역의 길이(9섹터로 해야 함)
  DW  18   ; 1트럭에 몇 개의 섹터가 있을까(18로 해야 함)
  DW  2   ; 헤드 수(2로 해야 함)
  DD  0   ; 파티션을 사용하지 않기 때문에 여기는 반드시 0
  DD  2880   ; 드라이브 크기를 한번 더 write
  DB  0,0,0x29  ; 잘 모르지만 이 값으로 해 두면 좋은 것 같다
  DD  0xffffffff  ; 아마, 볼륨 시리얼 번호
  DB  "HELLO-OS   "  ; 디스크 이름(11바이트)
  DB  "FAT12   "  ; 포맷 이름(8바이트)
  RESB 18    ; 우선 18바이트를 비어 둔다

; 프로그램 본체

entry:
  MOV  AX, 0   ; 레지스터 초기화
  MOV  SS,AX
  MOV  SP,0x7c00
  MOV  DS,AX
  MOV  ES,AX

  MOV  SI,msg
putloop:
  MOV  AL,[SI]
  ADD  SI, 1   ; SI에 1을 더한다
  CMP  AL,0
  JE  fin
  MOV  AH, 0x0e  ; 한 글자 표시 Function
  MOV  BX, 15   ; 칼라 코드
  INT  0x10   ; 비디오 BIOS 호출
  JMP  putloop
fin:
  HLT     ; 무엇인가 있을 때까지 CPU를 정지시킨다
  JMP  fin   ; Endless Loop

msg:
  DB  0x0a, 0x0a  ; 개행을 2개
  DB  "hello, world"
  DB  0x0a   ; 개행
  DB  0

  RESB 0x7dfe-$  ; 0x7dfe까지를 0x00로 채우는 명령

  DB  0x55, 0xaa

어셈블리가 생소한 분들은 어셈블리 공부를 쪼미 하시면 금방 이해 하실꺼 같군요

간단하게

mov ah, 0x0e 라는 뜻은
C로 보자면
ah = 0x0e 를 대입하라는 말과 같습니다.
; 라는 뜻은
C로 치면 // 와 같은 주석 처리 입니다.

이상 실습을 맞칩니다.
아따 어려운거~

'운영체제(OS)' 카테고리의 다른 글

nask 어셈블러에 기본명령어를 알아보자.  (0) 2009.08.28
OS 구조와 원리  (0) 2009.08.26
우연히 공부를 하던중 OS에 관심이 생겼다.
이리저리 뒤져보다 OS 구조와 원리 라는 책이 있다는 사실을 접했다.
그리곤 불야불야 도서관으로 뛰어 가서 아래 책을 빌려 버렸다.



역시 생각대로 엄청 이해가 되지 않았고, 흥미롭고, 재밌고, OS에 원리는 대단했다.
원래 난 도서관에서 책을 빌릴때 CD를 거이 귀찮아서 같이 빌리진 않는다. 하지만
이책에 CD내용은 정말 보고 싶었다. 그래서 같이 빌렸다. 사실 번역의 번역자의 주관적 입장에서 자주 서술하기 때문에 난 별로 좋아하질 않는다. 하지만 내가 일어를 할줄 모르니 원본을 살수 있어도 보질 못하니 원~ 그냥 체념하고 번역본이라도 열심히 보기로 마음 먹었다. 우선 첫장에서는 집필자에 대단한 겸손이라고 할까? 컴퓨터가 전공인 나 자신도 아니 컴퓨터를 전공하는 대부분에 학생들은 거의 뭐 알려고 생각만 하지 도전할려는 생각은 전혀 없는 분야 OS분야를 비전공자가 그것도 그냥 열심히 따라 만들도 보니 전문가가 되었다고 한다. 정말 대단한 사람이고 한편으로는 재수 없다 어떻게 꼭 나 머리 좋아서 이렇게 잘한다 이소리 같다. 하지만 책 한장한장을 열고 읽어보고 또 예제도 많이 있어 따라하면서 하다보면 시간 가는줄 모르고 집중하게 된다.
아 서론이 너무 길었나 구조와 원리에 대해서 이건 책을 설명하는것 같다. 그래도 아직 이해한 부분이 없으니 서론만 걸쭉하게 말해두고 시간날때 정리해서 포스트 해야 겠다는 생각 뿐이다. 아직 다 보질 못했다. 허나 금방금방 읽혀 가는 내 자신이 무서울 정도로 흥미를 가지고 있다는 것은 사실인거 같다. 당신도 늦지 않았다. 조금이나마 흥미가 있다면 지금 당장 서점이나 도서관에 가서 책을 빌리거나 혹은 사서 보기 바란다. 정말 후회없는 선택이 될것이다...
아 새벽인데 얼릉 본인도 좀만 더 읽고 내일 필독한다는 생각으로 일찍 자야 겠다.

'운영체제(OS)' 카테고리의 다른 글

nask 어셈블러에 기본명령어를 알아보자.  (0) 2009.08.28
makefile 설정  (0) 2009.08.27
cygwin을 설치하고 공부하면서 설정하는 부분에서 어떻게 들어가서 편집을하고 저장해야 하는지 부터 공부를 해야 했고, vi라는 편집기를 알게 되었고 vi 편집기에 대한 명령어도 공부를 하게 되더군요.
그래서 이쯤에 vi명령어를 발굴해서 올려보기로 작정하고 이렇게 찾아서 올립니다. 많은 도움 되셨으면 합니다.^^;

-. vi       - vi편집기를 호출한다.
-. vi filename     - 기존에 있는 파일이면 그 파일을 열고 없는 파일이면 새로 만든다.
-. vi + 10filename    - 지정화일의 10번째 행부터 화일열기
-. vi +/"school" filename  - 지정화일내의 school이란 단어가 처음나오는 시점부터 열기
-. vi -r filename    - 손상된 파일을 복구
-. view filename    - 수정없이 읽기전용으로 열기

커서의 이동
-. h    - 왼쪽으로 이동
-. j     - 아래로 이동
-. k    - 위로 이동
-. l    - 오른쪽으로 이동
-. w    - 한단어 오른쪽으로이동
-. b    - 한단어 왼쪽으로 이동
-. Return   - 한행아래로 이동
-. Backspace  - 한문자 왼쪽으로 이동
-. Spacebar  - 한문자 오른쪽으로 이동
-. H    - 화면의 맨위로 이동
-. M    - 화면의 중간으로 이동
-. L    - 화면의 맨 아래로 이동
-. ^F    - 한화면 앞으로 이동
-. ^D    - 반화면 앞으로 이동
-. ^B    - 한화면 뒤로 이동
-. ^U    - 반화면 뒤로 이동

▒ 삽입명령어
-. a   - 커서 오른쪽에 문자삽입
-. A   - 커서 오른쪽, 행의끝에 문자삽입
-. i   - 커서 왼쪽에 문자삽입
-. I   - 커서왼쪽, 행의 처음에 문자삽입
-. o   - 커서 아래에 행 삽입
-. O   - 커서 위에 삽입
-. <Esc>  - 작업완료후 반드시 입력

▒ 텍스트 변경
-. cw    - 단어 변경
-. cc    - 변경
-. C    - 커서 오른쪽의 행 변경
-. s    - 커서가 위치한 문자열 대체
-. r    - 커서 위치 문자를 다른 문자로 대체
-. r-Return  - 행 분리
-. J    - 현재 행과 아래 행 결합
-. xp    - 커서 위치 문자와 오른쪽 문자교환
-. -    - 문자형(대,소문자) 변경
-. u    - 이진 명령 취소
-. U    - 행 변경 사항 취소
-. :u    - 이전의 최종행 취소

▒ 텍스트 삭제
-. x   - 문자삭제
-. dw   - 단어삭제
-. dd   - 행 삭제
-. D   - 커서 오른쪽 행 삭제
-. :5,10 d  - 5-10째 행 삭제

▒ 행번호 설정
- :set nu   - 행번호 표시
- :set nonu  - 행번호 숨기기

행 찾기
-. G    - 파일의 마지막 행으로 가기
-. 12G    - 파일의 12번째 행으로 가기

▒ 텍스트의 복사 및 이동
-. yy    - 행 yank 또는 복사
-. Y    - 행 yank 또는 복사
-. P    - yank 되거나 삭제된 행을 현재 행 아래에 삽입
-. p    - yank되거나 삭제된 행을 현재 행 위에 삽입
-. :1,2 co 3  - 1-2행을 3행 다음으로 복사
-. :4,5 m 6  - 4-5행을 6행 다음으로 이동

▒ 탐색 및 대체
-. /string/         - string탐색
-. ?string?         - string 역 방향 탐색
-. n(N)          - string의 다음(이전) 계속 탐색
-. :g/search-string/s//replace-string/gc  - 각 발생 탐색후 확인하고 대체
-. :s/str/rep/         - 현재 행의 str을 rep로 대체
-. :1,.s/str/rep/        - 1부터 현재 행의 str을 rep로 전부 대체
-. :%s/str/rep/g        - 파일 전체 str을 rep로 전부 대체

▒ 화면정리
^L <Ctrl + L> 불필요한 화면 내용 제거 후 다시 표시
다른 파일을 파일내로 삽입
-. :r filename   - 커서 다음에 파일 삽입
-. :20 r filename  - 파일을 20번째 행 다음에 삽입

▒ 파일의 저장 및 종료
-. :w   - 변경사항 저장
-. :w filename  - 지정한 파일로 저장
-. :wq    - 변경사항 저장후 vi종료
-. ZZ    - 변경사항 저장후 vi종료
-. :q!    - 변경사항을 저장하지 않고 vi종료


-. clear  - 화면의 내용을 깨끗이 지운다.
-. ls   - 현재 디렉토리의 파일목록을 표시한다.
-. cp   - 파일을 복사한다.
-. mv   - 파일의 이름을 변경한다.
-. mv   - 파일을 다른곳으로 옮긴다.
-. rm   - 파일을 삭제한다.
-. cat   - 파일내용을 표시한다.
-. pwd   - 현재 위치의 경로를 표시한다.
-. cd   - 디렉토리의 경로를 이동한다.
-. mkdir  - 새로운 디렉토리를 만든다.
-. rmdir  - 디렉토리를 삭제한다.



▒ :k,l command m  
:1,10 co 50  - 1 줄 부터 10 줄 까지를 50 줄 이후로 복사
:34,50 d   - 34 줄 부터 50 줄 까지 삭제
:100,150 m 10   - 100 줄 부터 150 줄까지를 10 줄 이후로 옮김
:.,$ d    - 현재줄부터 끝까지 지우기
:.,+20 co -4    - 현재줄부터 20줄을, 4줄 위에 복사하기
:-,+ t 0   - 위, 아래로 한줄(총 3줄)씩을, 문서 맨위에 복사하기
:/pattern/ d   - pattern 이 들어있는 줄 지우기
:/pattern/ -nd   - pattern 이 들어있는 줄로부터 n 번째 윗줄 지우기
:/pattern/ +nd   - pattern 들어있는 줄로부터 n 번째 아랫줄 지우기
:/p1/, /p2/ d   - p1 이 들어있는 줄부터, p2 가 들어있는 줄까지 지우기
:.,/pa/ m 23   - 현재줄부터 pa 이 들어있는 줄까지, 23번줄 이후로 옮기기 

▒ g 옵션 붙이기  
:g/pattern   - 파일전체에서 마지막으로 pattern 이 쓰여진 줄로 가기
:g/pattern/ p   - 파일전체에서 pattern 이 있는줄 보여주기
:g/pattern/ nu   - 파일전체에서 patterm 이 있는줄을 번호와 함께 보여주기
:60,124 g/pa/    - p 60,124 줄 사이에서 pa 이 들어있는줄 보여주기

▒ 저장 및 종료  
:w     - 저장하기  
:q     - 종료하기 
:wq    - 저장하고 종료하기 
:x    - 저장하고 종료하기 (:wq 와 동일)
:w!     - 강제로 저장하기 (read-only 로 열었을경우)
:q!     - 편집한 내용을 저장하지 않고 종료하기
:w    - new_filename new_filename으로 저장하기
:w %.new   - 현재파일 이름에 .new 를 붙여서 새로운 파일로 저장
:230,$ w filename ant - 230 줄부터 끝줄까지 filename으로 저장하기
:.,580 w filename  - 현재줄부터 580줄까지 filename으로 저장하기
:1,10 w new_filename  - 1줄부터 10줄까지 new_filename으로 저장하기
:340,$ w >>new_file  - 340줄부터 끝줄까지 new_file에 추가하기 

읽기  
:r[ead] filename  - 현재위치에 filename 읽어들이기
:r /usr/local /data  - 현재위치에 /usr/local/data 읽어들이기
:185 r /usr/ local/data - 185줄 이후에 /usr/local/data 읽어들이기
:$ r /usr/local/data  - 맨끝줄 이후에 /usr/local/data 읽어들이기
:0 r /usr/local/data  - 맨윗줄에 /usr/local/data 읽어들이기
:/pa/ r /usr/local/data - pa 이 존재하는 줄에 /usr/local/data 읽어들이기

▒ 다중편집하기  
vi file1 file2 file3 :args - 편집중인 파일목록 보여주기
:n[ext]   - 다음 파일로 넘어가기
:prev[ious]   - 이전파일로 돌아가기
sc/ESC/g    - BX가 있는줄 찾아서 Esc 를 ESC 로 바꾸
:% s/editer/editor/g   - 처음줄부터 마지막줄까지, editer 를 editor 로 바꾸기
:g/editer/ s//editor/g  - 위와 동일("s/" 다음에 인자가 없어서 윗줄과 같은효과


출처 -   http://cafe.naver.com/iscript.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=122

연관글



+ Recent posts