2004. 11. 7. 12:45
initrd의 직관적인 의미는 initial ram disk이다.
이것은 부팅시 초기화에 필요한 루트 디스크 이미지로서 사용되는데 SCSI 하드 디스크를 사용할 때 중요하다. SCSI 하드를 사용하고 이것을 모듈 형태로 로드한다면, initrd 설정을 하지 않았을 경우 scsi 하드 디스크를 인식하지 못하게 된다.(결국 부팅은 안된다.)
scsi 하드 디스크를 사용하지 않거나 scsi 하드를 사용한다 치더라도 모듈 형태가 아닌 커널 컴파일시 커널 이미지에 포함시켜 버린다면 initrd 설정은 없어도 무관하다.
2004. 11. 7. 12:38
이 파일은 커널 컴파일시 생성되는데.
컴파일된 커널 이미지의 커널 심볼들이 메모리상의 어떤 위치에 로드 되는 지의 정보를 갖고 있다.
즉 커널 내부 함수들의 메모리 주소를 알 수 있는 것이다.

이 파일의 원래 주된 용도는 커널에 문제가 생겼을 때 참조하기 위한 용도이다.
커널 패닉이나 기타 커널 관련 문제가 발생했을 때 화면에 여러가지 레지스터들과 16진수로 이루어진 주소가 나타나는데 System.map 파일이 있으면 16진수 주소를 내부 함수 이름으로 변환하여 어디서 문제가 발생하였는지 알기 쉽게 해준다.

이 파일은 실제 리눅스가 동작하는 데 큰 영향을 주는 것은 아니다.
없어도 잘 동작한다.

오히려 보안상의 문제로 이 파일을 지우는 경우도 있다.
(왜냐하면 이 파일을 통해서 커널 내부 변경을 시도할 수 있기 때문이다.)
커널 프로그래밍과 같은 특별한 경우가 아니라면 이 파일은 따로 보관하는 것이 좋다.
2003. 6. 16. 04:46
우선 알아둘것은

우리가 리눅스 에서 C 프로그래밍을 할때
참조하는 헤더파일이 있는 곳의 위치이다.

일반적으로
/usr/include
라는 디렉토리이다.

즉 시스템 프로그래밍을 할때 다음과 같이 include하게 되는데

#include <linux/kernel.h>
#include <linux/modul.h>

이 말은

/usr/include/linux/kernel.h
/usr/include/linux/module.h

를 인클루드 한다는 뜻이 된다.

모듈 컴파일시 버젼 미스매치가 일어나는 것은
현재 구동되고 있는 커널의 버젼과
현재 컴파일시 참조하는 커널소스의 버젼이 틀리게 때문이다.
(현재 구동중인 커널 버젼알아내기 : uname -a)

그렇다면 이것을 어떻게 해결할 것인가
간단하게 말해 참조하는 커널소스의 버젼과
현재 구동중인 커널의 버젼을 일치시켜 주면 된다.

커널소스는 아시다시피 구할데가 많다.
알아서 구하도록 하자~

리눅스 설치시 옵션에 따라
현재 구동중인 커널 소스가 설치가 되기도 하고
안되기도 한다.

안되어있다면 커널소스를 받아 설치를 하자
rpm버젼을 받아 설치하면 된다

그럼 이제 본격적으로 커널소스 버젼과
구동중인 커널 버젼을 일치시켜 보자

커널소스가 있는 곳은 어디인가?
일반적으로

/usr/src/

이다

여기에 보면  linux-2.x.x  대충 이런식의 디렉토리가 있다.
여기에 커널 소스가 들어있고
그 안에 들어가면 include 란 디렉토리가 있다.
이것을
/usr/include와 바꺼치기 하면 된다.
단 백업을 해두는 것이 신상에 이롭다.. 다시깔기 시르면..ㅡㅡ;;;

가장 안전한 방법은
커널 컴파일을 한번 해준다음

(커널 소스 디렉에 들어가서  make 이라고 치면 뭐라 묻는게 절라 많이 나오는데 우리는 초보이므로 무조건 엔터만 친다.
절라 치다 보면 끝난다. 그리고 나서
make dep
하고 나서 리부우우웃~~~)

include 를 바까치기 하는 거시다.

그럼 100% 된다.~^_________^
2003. 6. 16. 04:23
tar -zcvf filename.tar.gz targetfile

-z 옵션은 압축 해제시에 주로 사용하였지만
압축시에도 사용가능하다.
2003. 6. 5. 16:05

posix thread

OldPapers/linux 2003. 6. 5. 16:05
쓰레드 프로그래밍에는 2가지 형태의 표준이 있는데, 하나가 이전에
소개했던 Solaris 쓰레드(Unix Internal 표준)이고, 다른 하나가
이번에 소개할 POSIX 쓰레드이다. POSIX는 IEEE 1003.4a로 표준이
이루어졌다. 따라서 POSIX 쓰레드를 사용하는 경우에 POSIX 쓰레드를
지원하는 어떠한 프로그래밍 환경에서도 동일한 API를 이용해서
프로그래밍할 수 있다.

현재 SunOS 5.5이상에서는 기본적으로 POSIX 쓰레드 라이브러리를
지원하고 있으며, 다른 버전에서는 POSIX 쓰레드 라이브러리를 설치하면
POSIX 쓰레드 프로그래밍을 할 수 있다.
SunOS 5.5에서 프로그래머는 원하는 경우에  Solaris 쓰레드와 POSIX
쓰레드를 동시에 이용해서 프로그래밍 할 수 있는 것이다.

다음은 간단한 POSIX 쓰레드를 이용해서 hello world를 출력하는
프로그램이다. POSIX 쓰레드 API는 모두 pthread_ 로 시작한다.

pthread_hello.c 파일
#define _POSIX_C_SOURCE 199506L #include <stdio.h> #include <pthread.h> void * sayHello(void * arg) { printf("Thread number: %d ::", pthread_self()); printf(" Hello World!!\n"); return (0); } main() { pthread_t tid; if(pthread_create(&tid, NULL, sayHello, NULL)) { printf("Thread Creation error!!\n"); exit(1); } printf("Thread number: %d\n", pthread_self()); pthread_exit( 0 ); }

프로그램에서 사용된 함수들을 간단히 살펴보자.


   1. pthread_create(): 쓰레드를 만들 때 사용된다. POSIX 쓰레드는 Solaris 쓰레드와는 다르게 쓰레드의 특성을 attribute 객체를 이용해서 기술한다. 따라서 쓰레드의 특성을 기술하고자 하는 경우에는 pthread_attr_t 타입의 변수를 선언 하고 사용해야 한다. 자세한 사항은 나중에 설명하도록 하겠다.

int pthread_create(pthread_t *new_thread_ID,
                   const pthread_attr_t *attr,
                   void * (*start_func)(void *), void *arg);

   2. pthread_exit(): 쓰레드를 종료할 때 사용된다.

void pthread_exit(void *status);

   3. pthread_self(): 쓰레드의 ID를 알고 싶을 때 사용된다.

pthread_t pthread_self(void)



생성된 쓰레드에 아규먼트를 전달하는 방법을 알아보자.
먼저 아규먼트 전체를 전달할 수 있는 자료 구조를 먼저 선언해야
한다. 예제 프로그램에서 아규먼트를 위해 Arglist라는 구조체를
선언했다.
두번째로 Arglist형의 변수에 원하는 값을 넣는다.
세번째로 Arglist형의 변수를 쓰레드를 만들 때 아규먼트로 전달
한다.

pthread_arg.c 파일
#define _POSIX_C_SOURCE 199506L #include <stdio.h> #include <pthread.h> struct Arglist { char * msg; int count; }; void * sayGreeting(void * ap) { struct Arglist *arg = (struct Arglist *) ap; int i; printf("Thread number: %d\n", pthread_self()); for(i = 0; i < arg->count; i++) printf("\t%s \n", arg->msg); return (0); } main() { pthread_t tid; struct Arglist arg; arg.msg = "How are you ?"; arg.count = 2; if(pthread_create(NULL, NULL, sayGreeting, (void *)&arg)) { printf("Thread Creation error!!\n"); exit(1); } printf("Thread number: %d\n", pthread_self()); pthread_exit( 0 ); }



쓰레드가 종료되면 종료 상태와 기타 정보가 보관된다. 쓰레드의 종료
상태는 때로는 중요한 정보가 되기 때문에 종료 상태를 알아볼 필요가
있다. 다음은 쓰레드의 종료 상태를 알아보는 예제이다.

pthread_join.c 파일
#define _POSIX_C_SOURCE 199506L #include <stdio.h> #include <pthread.h> void * sayHello(void * arg) { printf("Thread number: %d ::", pthread_self()); printf(" Hello World!!\n"); return (0); } main() { pthread_t tid; int status = -1; int * sp; if(pthread_create(&tid, NULL, sayHello, NULL)) { printf("Thread Creation error!!\n"); exit(1); } printf("Thread number: %d\n", pthread_self()); sp = &status; pthread_join(tid, (void **)&sp); printf("Thread number: %d has terminated.\n", tid); if(status) printf("And it's exit status is good.\n"); else printf("And it's exit status is bad.\n"); pthread_exit( 0 ); }


프로그램에서 사용된 함수들을 간단히 살펴보자.

   1. pthread_join(): 원하는 쓰레드의 종료 상태를 알아본다.

int pthread_join(pthread_t target_thread, void **status);
2003. 6. 5. 03:28
유닉스환경에서 사용되는 압축유틸리티중 가장 많이 사용하는 유틸리티입니다. 압축을 하고나면 compress는 파일의 끝에 .Z를 붙여주지만 gzip은 .gz를 붙여줍니다.


사용하는 방법은 다음과 같습니다.




압축할 때 : gzip 압축할파일명

압축풀 때 : gzip -d 압축된 파일명

또는

gunzip 압축된 파일명



[sspark@nice dat]$ ls -l

total 40

-rw-rw-r-- 1 sspark sspark 40960 Jan 27 11:00 myhome.tar

[sspark@nice dat]$

[sspark@nice dat]$ gzip myhome.tar

[sspark@nice dat]$

[sspark@nice dat]$ ls -l

total 8

-rw-rw-r-- 1 sspark sspark 4223 Jan 27 11:00 myhome.tar.gz




gzip으로 압축을 할 때에는 거의 대부분 tar로 묶여진 파일을 다시 압축을 할 때 사용하게 됩니다.

위의 예에서 보시는 바와 같이 myhome.tar라는 tar로 묶여진 파일을 gzip으로 압축을 하게되었을 때의 용량을 비교해 보십시오.

거의 10배의 압축효율이 있음을 알 수 있습니다.

이 놀라운 압축효율 때문에 compress보다는 gzip을 많이 사용하게 된 것입니다.

또한 압축이 끝난후에는 파일의 끝에 .gz라는 것을 붙여주게되며 gzip으로 압축된 것임을 표시하게 됩니다.


이번에는 압축된 파일을 다시 압축해제해 보도록 하겠습니다.



[sspark@nice dat]$ gzip -d myhome.tar.gz

[sspark@nice dat]$

[sspark@nice dat]$ ls -l

total 40

-rw-rw-r-- 1 sspark sspark 40960 Jan 27 11:00 myhome.tar


이 예에서 보시는 바와같이 gzip으로 압축된 파일(*.gz)은 "gzip -d"을 사용하여 풀어주시든지 아니면 옵션없이 gunzip을 사용하시면 됩니다.


2003. 6. 5. 03:26

OldPapers/linux 2003. 6. 5. 03:26
tar는 여러개의 파일을 하나의 파일로 묶을 수 있으며 묶여진 파일을 다시 풀수 있는 유틸리티입니다.

또한 묶여진 파일을 풀기전에 어떤파일들이 묶여져 있나를 확인해 볼 수도 있습니다.

먼저 tar파일의 사용형식은 다음과 같습니다.




일반형식 : # tar [옵션] 대상파일




tar를 사용할때에는 여러 가지 옵션에 대해서 알아야합니다.

tar의 옵션에는 약 40여개의 옵션이 있습니다.

하지만 이들 모든 옵션을 모두 사용하는 것은 아니며 중요하고 자주 사용하는 몇 개의 옵션만을 알아두면 됩니다.

그리고 필요한 옵션은 그때그때 메뉴얼(man tar)을 사용하여 참조한 후에 사용하시면 됩니다.


   c : tar파일을 생성할때(여러개의 파일을 하나의 파일로 묶을 때) 반드시 사용

   d : tar파일과 해당 파일시스템간의 차이점을 확인하고자 할 때 사용

   r : tar파일에 다른파일들을 추가하고자 할 경우에 사용

   t : tar파일의 내용을 확인하고자 할 때 반드시 사용

   f : tar파일을 사용할때에는 반드시 사용

   p : tar파일을 생성할때(묶을 때) 당시의 파일퍼미션을 그대로 하여 풀어줄 때 사용

   v : 묶을때나 풀어줄 때 파일들의 내용을 자세하게 보려고 할 때 사용

   Z : compress로 압축파일을 사용할 때 압축이나 해제까지 한번에 할 때 사용

   z : gzip과 관련하여 압축이나 해제를 한꺼번에 하려고 할 때 사용




tar로 파일작업을 하는 경우에는 다음의 세경우가 있습니다.

즉, 첫 번째가 여러개의 파일 및 디렉토리들을 하나의 tar파일로 묶는 경우이며, 두 번째가 이렇게 묶은 tar파일을 다시 풀어준 경우이며, 세 번째의 경우가 묶여져 있는 파일의 내용을 확인하는 것입니다. 즉,


묶을 때 : # tar cvf 압축파일.tar 압축대상파일 및 디렉토리
확인할 때 : # tar tvf 압축파일.tar
풀 때 : # tar xvf 압축파일.tar

각각의 경우에 대한 예를 들어 보겠습니다.



[sspark@nice dat]$ ls -l

total 44

-rw-r--r-- 1 sspark sspark 5847 Jan 27 10:37 browser.html

-rw-r--r-- 1 sspark sspark 5879 Jan 27 10:37 host.html

-rw-r--r-- 1 sspark sspark 8295 Jan 27 10:37 hour.html

-rw-r--r-- 1 sspark root 858 Dec 7 04:02 log.range

-rw-r--r-- 1 sspark sspark 10733 Jan 27 10:37 page.html

[sspark@nice dat]$ tar cvf myhome.tar *

browser.html

host.html

hour.html

log.range

page.html


위의 예는 현재 디렉토리내에 있는 모든파일 및 디렉토리들을 myhome.tar라는 파일하나로 묶어라는 것입니다.

원본파일들은 그대로 존재하게되며 myhome.tar라는 파일이 새로 생성되어 그 파일내에 모든파일 및 디렉토리들이 들어가게 됩니다.

c옵션을 반드시 사용하셔야합니다.




[sspark@nice dat]$ tar tvf myhome.tar

-rw-r--r-- sspark/sspark 5847 2000-01-27 10:37 browser.html

-rw-r--r-- sspark/sspark 5879 2000-01-27 10:37 host.html

-rw-r--r-- sspark/sspark 8295 2000-01-27 10:37 hour.html

-rw-r--r-- sspark/root 858 1999-12-07 04:02 log.range

-rw-r--r-- sspark/sspark 10733 2000-01-27 10:37 page.html




이 예는 myhome.tar라는 tar파일에 어떤파일들이 묶여져 있나를 확인해 본 것입니다.

t옵션을 반드시 사용하셔야 합니다.



[sspark@nice dat]$ ls -l

total 40

-rw-rw-r-- 1 sspark sspark 40960 Jan 27 10:38 myhome.tar

[sspark@nice dat]$

[sspark@nice dat]$ tar xvf myhome.tar

browser.html

host.html

hour.html

log.range

page.html


마지막예로서 myhome.tar에 묶여져 있는 파일들을 현재 디렉토리에 풀어준 것입니다.

x옵션을 반드시 사용하셔야합니다.