리눅스/유닉스에 대한 이해 0






리눅스/유닉스의 종류

 

  유닉스 종류

    IBM의 AIX

      - 대형 시스템에 많이 설치한다.

      - 공공기관과 정부 행정망에 많이 사용된다.

      - 일부 대학과 은행에서도 대형 서버로 사용한다.

    HP의 HP-UX와 Sun의 Solaris

      - 중/소형 서버 시장에 많이 사용한다.

 

   그 외 : DEC의 Digital UNIX, SGI의 IRIX, SCO의 SCO UNIXWare

 

리눅스 종류

  레드햇, 와우 리눅스, 한컴 리눅스, FreeBSD, SuSE 등

    

 

리눅스/유닉스의 역사 

 

유닉스의 시초는 멀틱스라는 시분할 운영체제로 1963년부터 3년동안 MIT, GE, 벨 연구소가 공동으로 개발한 것이다.

멀틱스는 미 국방성(ARPA)의 지원으로 추진된 프로젝트로 GE가 하드웨어를 만들었고 PL/1 언어로 만들어졌다. 

1970년대, 벨 연구소는 멀틱스에서 손을 뗀다. 그에 따라 벨 연구소에서 근무하던 데니스 리치는 파견지에서 돌아온 뒤 켐 톰슨과 함께

PDP-7을 만들기 시작하며 멀틱스의 여러 개념을 구현한다. 이때 PDP-7에는 파일 시스템 구성의 개념, 사용자가 명령을 내려 바로 실행하는 명령어 인터프리터의 개념, 각 명령이 새로운 프로세스를 형성해서 실행하도록 하는 개념이 모두 포함되어 있었다. 그리하여 처음

유닉스라는 이름이 생겨났다. 원래는 UNIX가 아닌 Multics의 ics를 딴 Unics(UNI+ics)였다고 한다.

 

장난처럼 시작한 운영체제로 몇몇 사람의 흥미에 의해 조금씩 발전하였고, 1973년 C언어로 유닉스가 다시 만들어졌다.

그리고 기존 컴퓨터 업체에서 유닉스에 관심을 갖게 되고 1970년대말 버클리 대학교는 AT&T 연구소로부터 유닉스 소스 코드를 400달러에 구입했고, 버클리 대학교의 학생이던 빌 조이와 척 핼리는 구입한 유닉스 코드를 조금씩 수정하여 발전시키겨 갔고 1978년 그들은 수정한 유닉스에 BSD라는 이름을 붙여 당시 50달러 가격으로 판매했다. BSD는 멀티 태스킹이 가능하였으며, 파일 이름을 255자까지 붙일 수 있었다. 그리고 4.2 버전에 이르러 BSD 유닉스의 가장 큰 업적이라고도 할 수 있는 시스템 간 통신이 가능해졌다.

BSD가 널리 퍼지자 AT&T는 USG(Unix Support Group)를 설립하여 새로운 유닉스 System V로 발전시켰다.

현재 일반 컴퓨터에서 많이 쓰는 리눅스의 시초는 1983년부터 리처드 스톨만이 개발한 GNU 운영체제다.

리눅스 정식 버전은 1991년 10월에 발표 됐고, Copy Left 원칙에 의해 배포되고, 여러 해커에 의해 발전하기 시작했다.

유닉스가 거의 비슷한 인터페이스를 갖게 된 이유는 유닉스의 표준 인터페이스 POSIX에 의해서다. 

 POSIX 인터페이스는 IEEE의 후원하에 개발 되었다.

※일반적으로 저작권을 표시할 때 Copy Right라고 쓴다. Copy Left는 공식 용어라기보다 Right의 반대 개념으로 쓰기 시작했다.

   Copy Left는 모든 소스와 제품을 비롯하여 이를 기반으로 한 제품까지도 무료로 배포되어야 한다는 원칙이다.

 

리눅스/유닉스의 구조

 

  유닉스에는 커널이 하나의 거대한 프로그램 덩어리로 만들어진 모놀리식 커널과 개별 모듈로 이루어진 마이크로 커널이 있다.

  유닉스의 모놀리식 커널은 거대한 커널이 모든 기능을 수행하도록 만들어졌고, 안정적이지만 문제가 발생할 경우 부분 수정이 어렵고,

  일반 시스템보다 거대한 수퍼컴퓨터에 많이 적용된다.

 

유닉스에서 마이크로 커널은 윈도우에서와 용어는 같지만 의미는 조금 다르다. 최소한의 커널인 윈도우의 마이크로 커널과 달리, 유닉스의 마이크로 커널은 여러 개의 모듈이 모여 하나의 커널을 이루는 개념이다.

개별 모듈의 업로드와 언로드가 가능하나 각 모듈의 권한이 동일하여 잘못된 모듈을 업로드할 경우 커널 전체가 망가질 수 있다.

부분 모듈의 업로드를 이용해 커널에 백도어를 심을 수도 있다.

 

유닉스 링 구조 : 하드웨어, 커널, 셸, 응용 프로그램으로 구성

   링의 개수가 많으면 보안 레벨이 높음.

   링의 개수는 윈도우보다 작지만 명확한 구분점을 가지고 구분되어 조금 더 높은 수준의 보안을 유지


윈도우보다 훨씬 단순하다. 크게 파일 서브 시스템, 장치 드라이버, 프로세스 제어로 나뉘며, 커널의 파일 크기 또한 윈도우 1/3정도다.



프로세스 제어에서는 전체 프로세스 간 통신, 스케줄링, 메모리 관리를 구현한다.

장치 드라이버는 윈도우에서처럼 하드웨어와 소프트웨어를 연결해주는 인터페이스를 제공한다.

(ls -l /dev)

파일 서브 시스템은 하드디스크와 같은 저장 공간에 유닉스의 파일을 저장하고 읽는 열학을 한다.

 

셸 개념

 커널과 함께 유닉스의 중요한 요소로는 셸이 있다.

 윈도우는 기본적으로 GUI환경이며 명령 창의 기능이 제한적이어서 모든 것을 실행할 수 없다. 그러나 유닉스는 GUI환경을 지원하면서 셸의 기능도 막강하다. 

따라서 유닉스를 해킹했다는 것은 관리자 권한의 셸을 얻어냈다는 의미다.

셸은 응용 프로그램에서 명령을 받아 커널에 전송하는 역할을 하며, 사용자의 키보드 입력을 인식하고 해당 프로그램을 수행하는 역할을 한다.

 

셸의 종류

   본 셸(Bourne Shell), 콘 셸(Korn Shell), C 셸(C Shell) 등으로 크게 나눌수 있다.

 

셸이 제공하는 주요 기능

  자체의 내장 명령어 제공

  입력/출력/오류의 방향 변경

  와일드카드

  파이프라인

  조건부/무조건부 명령열 작성

  서브 셸 생성

  백그라운드 처리

  셸 스크립트(프로그램) 작성

 

리눅스/유닉스의 파일 시스템(유닉스 솔라리스 기준)

 

유닉스 파일 시스템은 대부분 비슷하다.

   - 일반 파일 : 일반적으로 생각하는 데이터 파일이나 실행 파일

   - 디렉터리 : 유닉스에서는 디렉터리도 파일에 해당된다. 디렉터리가 담고 있는 여러 파일과 하위 디렉터리 정보가 담겨있다.

   - 특수파일 : 프린터나 터미널, 테이프 드라이버 같은 물리적인 장치를 특수파일을 통해 접근, 특수 파일은 /dev(device)에 있다.

   - 파이프 파일 : | 문자를 말하며, 2개의 명령을 연결 시 사용한다. 임시 파일이 생성 되었다가 명령 수행을 마치면 사라지는 것으로,

                        이 파일을 파이프 파일이라고 한다.

 

유닉스의 디렉터리 구조

                   .(root)

┌──┬──┬──┬──┬──┬──┬───┬───┐

/bin  /etc   /tmp    /lib   /boot  /dev  /home    /usr       …

                                                           ┌──┴──┐

                                                       /usr/lib         /usr/include

 

유닉스 시스템 디렉터리별 역할

 

디렉터리

/bin  : 기본적으로 실행 가능한 파일을 담고 있다. echo, mv, cp, pwd, who 등

/etc  : 시스템의 환경 설정 및 주요 설정 파일을 담고 있다. passwd, hosts, xined.conf 등

/tmp : 프로그램 실행 및 설치 시 생성되는 임시 파일을 담고 있으며, 이 디렉터리에 파일을 저장하면 재부팅 시 임의로 삭제될 수 있다.

/lib  : 기본 프로그램의 모듈을 담고 있다.

/boot : 커널을 위한 프로그램 파일을 담고 있으며, 부팅할 때 읽혀 수행된다.

/dev : 프린터나 터미널 같은 물리적인 장치를 다루기 위한 특수 파일을 담고 있다.

/home : 각 사용자의 작업 디렉터리를 담고 있으며, 각 계정으로 로그인할 때 이 디렉터리 밑에 자신의 작업 디렉터리가

            시작 디렉터리가 된다.

/usr : 사용자가 직접 쓰는 파일을 담고 있으며 다른 디렉터리에 있는 파일이 똑같이 위치하고 있는 것이 많은데,

          이는 링크되어 있는 것이다.

/usr/lib : C언어나 포트란의 라이브러리를 담고 있다.

/usr/include : C언어에 사용되는 헤더 파일을 담고 있다.

 

그 외 디렉터리별 역할

 

디렉터리

 

/       최상위 디렉토리로써 루트 디렉터리라고 함. 모든 디렉토리는 루트 디렉토리를 기준으로 위치함(절대 경로와 상대경로 구분)

/mnt : 다른 장치를 마운트하기 위한 디렉터리

/root : 슈퍼 유저인 root의 홈 디렉터리

/sbin : 슈퍼 유저가 사용하는 명령어가 저장되어 있음

/var : 로그 파일이나 프린터 스풀 파일과 같이 시스템의 동작 중에 변화하는 파일이 저장

/lost+found : 파일 시스템의 이상 여부를 진단하고 복구하는 fsck 명령어가 사용하는 디렉터리로 특정 파일의 위치를 결정할 수 없는

                   경우 이 디렉터리에 보관

/proc : 가상 파일 시스템으로 실제 디스크에 저장되지 않으며, 시스템에서 실행되는 프로세스에 대한 정보를 저장하고 있음.

 

리눅스 / 유닉스의 부팅 순서

   1단계 : POST 수행

   2단계 : 기본 부팅 관련 설정사항 로드

   3단계 : MBR 로드

   4단계 : 부트 로더 실행

        LILO와 GRUB 사용

        LILO는 /etc/lilo.conf에 설정 GRUB는 /etc/grub.conf (=/boot/grub/grub.conf)에 설정

        부트로더가 실행되면 부팅하고자 하는 운영체제의 커널 이미지가 메모리에 로드 됨.

   5단계 : 실행 레벨에 따른 서비스 실행

       부트 로더는 스와퍼라는 pid 0번 프로세스를 실행, 스와퍼는 다시 pid 1번 init(/sbin/init) 프로세스를 실행 => ps -ef

       init 프로세스는 다시 /etc/inittab 파일을 읽음

       inittab 파일은 부팅할 기본 모드를 선택하여 그에 따른 환경을 제공하는 분기점

 

       inittab 파일 : 실행 레벨(Run Level), 기본이 실행 레벨 5

         - 실행 레벨 0 : 시스템을 종료할때 사용한다. (Shutdown -h now)

         - 실행 레벨 1 : 단일 사용자 모드로, 기본적으로 관리자 권한의 셸을 얻는다. 그러나 대부분 데몬이 실행되지 않으므로

                              기능은 제약되어 있다.

         - 실행 레벨 2 : NFS를 지원하지 않는 다중 사용자 모드다.

         - 실행 레벨 3 : 일반 셸 기반의 인터페이스를 가진 다중 사용자 모드다.

         - 실행 레벨 4 : 기본적으로 사용되지 않지만 사용자가 임의로 정의하여 사용할 수 있다.

         - 실행 레벨 5 : 기본은 실행 레벨 3과 같으나 GUI환경을 지원한다.

         - 실행 레벨 6 : 재부팅한다. (Shutdown -r now == init 6)

 

      실행 레벨이 결정되면 /etc/rc.d/rc.sysinit(시스템 초기화 스크립트)이 실행되고 해당 레벨에 따라 데몬이 실행 됨

            -ls /etc/rc.d/rc5.d/

 

        실행 레벨 추가 및 삭제 예

           -> 새로운 서비스 추가하려면 구동 파일을 /etc/rc.d/init.d 디렉토리에 복사

           -> /etc/rc.d/rc5.d/S83qmail로 심볼릭 링크

                   ln  -s  /etc/rc.d/init.d/qmail   /etc/rc.d/rc5.d/S83qmail

               => 숫자는 우선순위로 자유롭게 설정 가능

               => K : kill  S:start

 

      # ./filename start[/stop/restart]

      #service servicename start[/stop/restart]

 




덧글

댓글 입력 영역