본문 바로가기

Academy I/Tech Academy

Unix 1 역사,구성,특징

유닉스 운영체제의 역사     

<< 유닉스 개발사 >>

유닉스 운영체제는 1969년 AT&T사의 BELL 연구소의 KEN THOMPSON에 의해
개발된 운영체제로서 DEC의 PDP7 시스템내에서 '우주여행' 프로그램을
돌리기위한 소프트웨어 묶음으로 탄생하였다. 초기에는 PDP7 시스템의
어셈블리언어로 작성되었으며, 단일 사용자 환경만을 지원하였다.

그후 1970년에 유닉스 운영체제를 B 언어로 재작성을 하는 과정에서
다중사용자 환경이 지원되었으며, 하드웨어들간의 이식성을 높이기위해
C 언어로 1973년에 재작성되기에 이르렀다.


오늘날 유닉스가 널리 알려지게된 계기는 여러가지가 있겠으나 대충
요약하면 다음과 같다.

첫째, 70년대 중반의 유닉스 라이센스를 비영리기관에 부여
       -- 대학및 공공기관에의 라이센스 부여는 보다많은
          사용자층 확보의 계기가 되었다.

둘째, 표준화된 마이크로 프로세서의 사용확대로 인한 표준화된
       마이크로 컴퓨터의 운영체제에 대한 요구증대
       -- 표준화된 마이크로 컴퓨터 운영체제로서 CP/M, MS-DOS, UNIX
          등이 사용되었으나, 하드웨어 성능 향상에 따른 기능을 전반적으
          로 수용할수 있는 유닉스에 대한 수요가 증대 되었다.

셋째, 급변하는 네트웍 기술발전에 대한 유닉스의 신속한 대응
       -- 80년대를 지나오며 네트웍 기술이 비약적인 발전을 거듭했다.
          유닉스는 네트웍 신기술에대한 신속한 지원을 함으로써 네트웍
          지원 운영체제로써 각광을 받기 시작했다.

이상과 같은 요인으로 인해 유닉스는 표준 운영체제로서의 지위가 확립
되기에 이르렀다.
다음은 유닉스 운영체제의 발전과정을 도식화한 것이다.

┌───┐        ┌───┐
│ AT&T │───> │BSD   │────────────────────>
└┬┬┬┘        └───┘
  │││          ┌───┐      ┌────┐
  ││└────> │SunOS ├┐ ┌>│SOLARIS ├───────────>
  ││            └───┘│ │ └sun ──┘ ┌───┬─────
  ││       ┌───┐     │ │   ┌────>  SVR4 MP RAS ──┐
  │└──>  │XENIX │ ──┤ │┌>  SVR4 MP  └ncr ─┘│UnixWare>
  │         └───┘     │ ││ └unisys┘┌────>└univel┘
  │  ┌───┐  ┌───┐│ ├┴──┐   ┌┴──┐
  └> │SVR2  │─> SVR3  ├┴>│SVR4  │─>│SVR4.2MP───────>
      └─┬─┘  └sequent    └dg,pyramid └───┘
          │          └──────────────────────>
          │      ┌───┐ ┌───┐
          └──> │AIX:IBM >│OSF//1:dec─────────────>
                  └─┬─┘ └───┘
                      └─────────────────────>

위의 도표에서 볼수 있듯이 유닉스에는 다양한 버전들이 사용되고 있기에,
향후 유닉스 운영체제에대한 통합작업에 대한 노력이 가속되어질 것입니다.




=====================================================================


유닉스 운영체제의 특징            


1. 유닉스 운영체제의 일반적 특징

유닉스가 개발되었을 당시만해도 다른 운영체제들은 처리를 위한 데이타의
입력을, 한싯점에 오직 한 사용자에게만 허용하고, 데이타를 처리하는
동안에 시스템과의 다른 상호작용을 억제하는 단일사용자, 배치 시스템만을
지원하고 있었다. 이러한 상황하에서 유닉스 운영체제는 다음과 같은
특징적인 기능들을 제공하게된다.

    1) 다중사용자 환경 ( Multiuser )
       터미널로부터 컴퓨터와 직접 통신함으써 시스템 자원을 억세스하는
       사용자를 다수 허용하는 다중 사용자 운영체제이다. 이 기능은
       시스템 자원 이용도를 증가시키고, 시스템 비용을 줄여준다.

    2) 다중작업 환경 ( Multitasking )
       다중작업 환경은 사용자에게 한싯점에 여러개의 작업을 실행하는
       것을 허용한다. 사용자가 동시에 수행하는 여러개의 작업중, 하나의
       작업만이 Foreground에서 수행되며, 나머지 작업은 Background에서
       수행된다. 유닉스의 다중작업 기능은 사용자의 생산성과 효율성을
       증대한다.

    3) 호환성 ( Portability )
       유닉스의 중요한 강점은 한 종류의 컴퓨터로부터 다른 종류의
       컴퓨터로 이동하는 능력 즉 호환성이다. 이는 운영체제의 대부분이
       특정의 하드웨어에 한정되지 않는 형식으로 작성되었기 때문에
       가능하다. 이 특징은 적당한 시스템을 공급하기에 어려움을 갖고
       있는 하드웨어 제작업체에게도 매우 매력적인 특징이 된다.
       유닉스는 다른 하드웨어에 채택할수 있는 일반적인 운영체제에 대한
       수요를 만족시킨다. 더욱 최근에는 소프트웨어 개발은 유닉스와
       MS-DOS 운영체제를 동일 시스템상에 공존할수 있게끔 해준다.
       초기에 유닉스는 DEC 미니 컴퓨터에서만 사용되었다.
       현재 마이크로 컴퓨터에서부터 메인 프레임기종까지 탑재할수 있다.
       이는 소프트웨어 업체들에게 그들의 프로덕트들을 다른 운영체제
       아래에서 실행하기 위한 부가적인 전환비용을 줄일수 있다는 잇점을
       제공한다.

    4) 강력한 개발도구들 ( Powerful Development Tools )
       유닉스는 사용자의 작업을 수행하기 위해, 사용자 프로그램들 또는
       새로운 명령어들을 생성하기 위해 결합시키고, 건축 구조물같이
       사용될수 있는 수백개의 유틸리티 프로그램들의 집합을 갖고있다.
       유닉스 개발지원 도구들의 다양성, 힘 및 유연성은 프로그래머에게
       어플리케이션을 설계하는데 있어서 매력적인 잇점을 제공한다.
       유닉스는 프로그래머에의해 설계및 프로그래머를 위해 설계된
       운영체제이다.

2. 유닉스 SVR4.0 버전의 특징

     유닉스 SVR4.0 버전은 유니시스 유닉스 시스템이 채택하고 있는
     AT&T System V Release 4  버전이다.
     유닉스 SVR4.0의 설계 목표는 유닉스의 4대 변형들 : AT&T, BSD,
     SunOS와 XENIX 운영체제 : 과 양립될수 있고, 유닉스의 중요한
     변형들을 산업표준을 따르는 하나의 프로덕트로 통일하는데 있다.

             ┌────┐                ┌────┐
             │ BSD    ├──┐  ┌───┤ SunOS  │
             └────┘    │  │      └────┘
             ┌────┐    │  │      ┌────┐
             │ AT&T   ├─┐│  │  ┌─┤ XENIX  │
             └────┘  ││  │  │  └────┘
                           ││  │  │
                     ┌──┴┴─┴─┴──┐
                     │   SVR 4.0 UNIX     │
                     └──────────┘


    1) 다른 유닉스 버전과 대비되는 UNIX 4.0 의 특징

      (1) 명령어
        여러가지의 새로운, 수정된 또는 개선된 명령어들이 BSD, SunOS,
        XENIX로부터 결합하였다. 본래의 명령어군으로부터 포함되지않은
        명령어들은 BSD와 SunOS를 위한 호환 펙키지들을 통하여 억세스
        될수 있다.

      (2) 부가적인 인터페이스

        . Shell
          Shell은 운영체제로의 사용자 인터페이스이다. 유닉스 4.0 버전
          이전의 버전에서는 사용자를 위해 두가지의 Shell , 즉 Bourne
          과 C Shell을 제공했다. 현재는 Korn과 Job Shell 두가지를
          추가로 사용할수 있다.

        . 사용자 인터페이스
          FACE ( Framed Access Command Environment )는 시스템 관리
          업무와 같은 기본적인 사용자 작업을 수행하기 위한 메뉴 선택식
          ( Menu-driven ) 인터페이스이다. 유닉스 4.0은 이 작업방식을
          지원한다.

      (3) 가상 화일 시스템 ( Virtual File System )
         화일 시스템은 화일과 디렉토리들의 조직화된 집합체이다. 유닉스
         4.0 버전 이전에는 하나의 화일시스템이 존재했다.
         가상 화일 시스템 아키텍쳐는 한 시스템내에 복수개의
         다른 화일 시스템 종류가 공존할수 있게끔 해준다. 이 기능은
         BSD 계열의 유닉스로 부터 온 기능이다.

      (4) 할당 ( Quota )
         사용자 디스크 사용량을 할당 방식에( Quota mechanism ) 의해
         제한 할수있다. 이 기능은 시스템 관리자에 의해 유지보수된다.
         사용자는 이 기능이 디폴트로 (자동적으로) 기동됨을 주의해야
         한다, 그러나 사용량 한계에 도달되었다는 사용자에게
         에러 메세지를 제공하지 않는다.

      (5) 보안 ( Security )

         전반적인 시스템 보안의 유지 관리는 기본적으로 시스템 관리자의
         책임이다. 유닉스 4.0은 Audit trailing과 패스워드 그리고
         억세스 자격 ( Permission )의 변경기능을 통하여 보안정도를
         개선했다.

=====================================================================

유닉스 운영체제의 구성요소및 특징       


유닉스의 구성요소

    유닉스 시스템은 Kernel, Shell, Command라는 3개의 중요한 구성요소를
    갖고있다. 각각의 구성요소에 대하여 알아본다.

1. 커널  ( Kernel )

      커널은 시스템 부팅이 되어질때 메모리내에 위치(Load) 되어지는
      프로그램이다. 커널은 메모리 관리, 프로세서 시간 할당, 입력및
      출력의 제어를 수행함으로 인해 운영체제의 관리자 또는 핵심이라
      불리운다. 커널은 사용자가 직접적으로 제어를 할수 없다.

    2. 쉘 ( Shell )

       쉘 프로그램은 로그인시에 각각의 사용자에 대해 개시되고,
      명령어 실행을 초기화하고 번역함에의해 커널과 사용자 사이의
      인터페이스 역할을 수행한다. SVR 4.0 버전에서는 Bourne, C, Korn,
      Job shell이 이용가능하다. Shell은 시스템 관리자가 사용자를
      시스템에 등록하였을때 사용자에 할당된다. 관리자는 언제든
      사용자의 쉘을 변경할 수 있다. Bourne shell이 UNIX 4.0 버전에서
      표준 쉘이다.
       쉘은 또한 어플리케이션을 설계하거나 새로운 명령어를 생성할 수
      있는 프로그래밍 언어이다.

    3. 명령어 ( Command )

      명령어는 사용자 작업(Task)를 수행하는 프로그램이다. 명령어는
      사용자가 시스템에 작업을 수행하기 위한 일종의 도구 역할을
      수행한다. 유닉스는 새로운 명령어를 생성하기 위해 복합될수 있는
      수백개의 명령어를 제공한다. MAPPER와 Oracle같은 어플리케이션
      프로그램은 쉘을 통하여 억세스될 수 있다.

    유닉스의 구성요소들 간의 연관 관계를 그림으로써 설명해보면
    다음과 같습니다.
                                              (5) ┌────┐
                                ┌────────┤ 디스크 ├─┐
                                │                └────┘  │
  (1)    │ (2)       (3)       (4)         (6)   │     (7)
명령어 ->│명령어 -> 명령어 -> 명령어  -> 실행요구│-> 프로그램의 ─┐
라인     │라인      라인    프로그램             │   Load         │
입력     │검사      분석      검색               │                │
         │                                       │     (8)        │
   │    │                                       │ 프로그램의  <─┘
   │    │                                       │   실행     ──┐
   │    │         (10)                          │                │
   │    │     결과 출력및 프롬프트 전송         │     (9)        │
   └─  │< ────────────────── │ 출력 생성   <─┘
         │                                       │
<───> │ < ─────────────────> │ < ──────>
명령어                   쉘                               커널

    위에서 사용한 명령어 라인이라는 용어는 사용자 입력내용이 기술되어
    있는 모니터상의 프롬프트부터 return키를 입력한 곳까지를 의미합니다.
    다음은 각 구성요소에 의해 처리되는 각과정에 대한 설명입니다.

    (1) 명령어 입력
        유닉스 명령어 라인은 일정한 형식을 갖고 있는데 다음과 같다.

      ┌─────────────────────────┐
      │$ 명령어_이름  [옵션]  [명령어 인자 (Arguments)]  │
      └─────────────────────────┘
          위 형식중 []으로 둘러쌓인 요소는 생략 가능함을 의미 합니다.

     (2) 명령어 라인 검사
         이 단계에서는 사용자로 부터 입력되어진 명령어 라인에 대해
         그 구성 형식을 검사합니다.

    (3) 명령어 라인 분석
        유닉스 쉘은 사용자가 자신의 작업을 편리하게 할수 있도록
        하기위해 작업환경 재정의를 위한 쉘변수 (예: PATH, TERM 등),
        작업의 원할한 수행을 위한 특수 문자 (Special Character : *,<,>등)
        등을 지원합니다. 이 단계에서는 명령어 라인상에 사용되고 있는
        쉘변수, 특수문자를 처리하는 작업을 수행합니다.
        예를 들어 설명하면 다음과 같습니다. ( 참고로 MS-DOS 명령어중
        디렉토리의 내용을 확인하기 위한 dir명령어와 동일한 유닉스
        명령어가 ls 명령어입니다. )

     ┌─────┐
     │ $ls *.c  │                         현재 디렉토리내에 있는
     └──┬──┘┌──────────┐ 화일중 확장자가 c인것으로
           └───┤$ls a.c b.c c.c d.c │ *.c로 지정한 인자(arguments)
                   └──────────┘ 를 변환합니다.

    (4) 명령어 프로그램을 디스크내에서 검색
        사용자가 지정한 명령어도 하나의 프로그램이기 때문에,
        이 명령어 프로그램이 사전에 디스크상에 존재해야 합니다.
        이 단계에서는 명령어에 상응하는 프로그램의 존재 여부를
        확인하는 과정입니다. 참고로 프로그램을 찾기위해
        디스크의 처음부터 끝까지를 검색을한다면 시스템에 많은 부하가
        걸려 시스템 효율성이 떨어질겁니다. 이러한 단점을 해소하기위해
        유닉스에서는 명령어들을 특정의 디렉토리내에 모아두고 있는데
        이러한 디렉토리들을 쉘에게 사전에 알려주어야 하는데 이때
        사용하는 것이 PATH라는 쉘변수입니다.

            예) $PATH=.:/bin:/usr

     (5) (6) (7) (8) (9)

        전단계에서 사용자가 요구한 명령어 프로그램의 존재를 확인하게
        되면 쉘은 프로그램의 실행요구를 커널에 보내게 됩니다. 그러면
        커널은 해당되는 명령어 프로그램을 디스크로부터 메모리로 load
        하여 실행을 개시하는데 이과정에서 쉘로부터 명령어 라인상에
        같이 지정한 옵션과 인자들을 전달받게 됩니다. 이들을 이용하여
        수행하게되면 실행결과 즉 출력이 생성되는데 이를 쉘에게 전달
        하여 전송을 하게됩니다.
    (10) 쉘은 커널로부터 전달받은 출력과 사용자가 새로운 명령어를
        입력할수 있도록하기위해 프롬프트를 해당 사용자에게 보내주게
        됩니다.
=====================================================================


유닉스 로그인과 유닉스 명령어의 특징

1. 유닉스를 이용한 작업의 시작

유닉스 시스템을 사용하여 작업을 수행하기 위해서는 우선 로그인(Login)
이라는 과정을 수행해야 만 한다. 다음은 로그인 과정의 특징이다.

    1) Logname( 사용자 식별명 )

      사용자가 유닉스를 사용하기전에 , 시스템 관리자가 부여한 Logname
      을 입력함으로써 유닉스 운영체제에 자신을 밝혀주어야 한다.
      유닉스는 모든 시스템 사용자들에 관한 정보를 보관하는 /etc/passwd
      라는 특수 화일을 갖는다. 이 화일에 등록된 사용자만이 유닉스를
      억세스 할수 있다. 이는 유닉스 보안유지를 위한 것이다.

      단말이 유닉스 시스템과 연결되었을때 로그인 프롬프트가 표시되는데,
      이때 소문자의 logname과 엔터키를 입력한다. 유닉스는 대소문자에
      대해 민감하게 반응하기 때문에, 로그인 프롬프트에서 대문자를
      사용하게 되면은 해당 단말이 대문자만을 표시할수 있는 단말임을
      나타내게 되어, 이후의 작업을 보장하지 못한다.
      또한 logname을 입력할때 공백문자를 포함하지 않는다.

    2) 패스워드( Password )

      등록된 logname을 이용하여 처음으로 로그인을 수행할 경우에 시스템은
      패스워드를 설정할것을 요구한다.
      ( 패스워드 관련 명령인 passwd 명령어는 이후에 다시설명한다. )
         패스워드를 설정할때에는 다음의 규칙을 따른다.

         1. 패스워드는 길이가 최소 6-8 문자이어야 한다.  패스워드의
            정확한 길이는 /etc/default/passwd 화일에 정의되어 있다.

         2. 패스워드는 최소 2개의 영문자와 1개의 숫자 또는 특수문자를
            포함해야만 한다.

         3. 패스워드는 반드시 logname과 달라야 한다. logname을
            역순으로 하거나, 문자 순서의 변화등은 일반적으로 허용되지
            않는다.

       패스워드를 입력한후 return키를 입력하면, 패스워드를 재입력할것을
       요구하는 프롬프트가 표시된다. 두번의 패스워드 내용은 일치해야
       하는데, 틀릴 경우 재입력을 요구하는 메세지가 표시된다.
       만약 입력한 패스워드가 전술된 규칙에 어긋나는 경우에는 그에
       상응하는 메세지가 표시된다.

       시스템이 /etc/passwd 화일의 logname과 /etc/shadow 화일의
       패스워드를 검증함으로 인해 후속 작업 진행이 늦어질수도 있다.

    3. Shell command 프롬프트

       성공적인 로그인 수행후에는, 직전의 로그인 날짜/시간, 판권관련
       정보, 디스크 사용 정보, 메일 관련사항, 뉴스 관련사항에 대한
       사항이 들어있는 메세지들이 표시된다.
       이 메세지들은 초기 사용자 환경을 정의하고 있는 /etc/profile이
       실행됨으로써 표시된다. 이 화일은 각각의 사용자별로 다르게
       재정의할 수 있다.

       마지막으로 쉘 명령어 해독기가 (Shell Command Interpreter )
       명령어 형식의 사용자 입력을 기다린다는 의미의 쉘 프롬프트가
       (통상 $가 사용된다.) 표시된다.

       다음은 유닉스 로그인 과정을 보여주는 그림이다.

          ┌──────────────────────────┐
          │ login: kdwlog1                                     │
          │ passwd: _                                          │
          │                     II                             │
          │      U   U  N   N         SSSS   Y   Y   SSSS      │
          │      U   U  N N N   II   S        Y Y   S          │
          │      U   U  N  NN   II     S Y      S              │
          │       UuU   N   N   II  SSSSS      Y   SSSSS       │
          │                                                    │
          │                                                    │
          │ Last login : 1996. 1. 22. 16:10:5                  │
          │ You have mail                                      │
          │ new item                                           │
          │    item1 item2                                     │
          │ $_                                                 │
          │                                                    │
          └──────────────────────────┘


2. UNIX Command

    유닉스는 사용자가 손쉽게 사용가능한 수백개의 명령어를 제공한다.
    명령어는 쉘 프롬프트에서 일반적인 형식으로 입력된다. return키의
    입력은 명령어의 끝임을 알린다. 그러면 쉘은 명령어의 각 요소들을
    확인하고, 적당한 행동을 취한다. 여기서 적당한 행동은 명령어
    프로그램을 실행하는 것 또는 에러 발생시 메세지를 표시하는 것을
    의미한다.

    1. 명령어 라인의 구성요소

         하나의 명령어 라인은 명령어 이름말고도 다음과 같은 정보를
         갖을수 있다.

         . 옵션    명령어의 옵션은 명령어의 작업 내용을 수정한다.
                   옵션은 통상 -(dash)가 앞에 표시된다. 대부분
                   복수개의 옵션은 하나의 -(dash)에 의해 조합하여
                   사용될 수 있다.
         . 인자 (Arguments)
                   명령어의 인자는 화일명 또는 명령어에 제공하는
                   약간의 정보가 대표적이다. 몇몇의 명령어들은
                   복수개의 인자를 요구하고, 또다른 명령어들은
                   전혀 요구하지 않는다.

         옵션 또는 인자들이 뒤따르는 명령어를 명령어 라인이라 부른다.
         명령어 라인의 구성요소는 다음과 같은 순서로 나타난다.

              $command [-options] [arguments] <return>

         유닉스 명령어 라인은 다음과 같은 특징을 갖는다.

         . 공백이나 탭은 각각의 명령어 라인 구성요소를 구별한다. 비록
           명령어 라인에 복수개의 공백이나 탭이 사용되었다 하더라도,
           이들은 쉘이 명령어 라인 처리중에 무시된다.

         . return 키는 명령어 라인을 종료한다.

         . 명령어 옵션은 - 또는 + 문자뒤에 뒤따른다.

           (주의) 이 강좌에서는 각 구성요소를 구별하기 위해
                  사각 괄호를 사용하였는데, 이 사각괄호는 쉘에 의해
                  특수하게 처리됨으로 사용하여서는 않된다.

         다음은 유닉스 명령어의 형식과 관련된 예제이다.

      ┌─────────────────────────────┐
      │ $who               명령어 단독으로 구성된 형태           │
      │ $who -H            명령어+옵션으로 구성된 형태           │
      │ $who am i          명령어와 인자로만 구성된 형태         │
      │ $ls -al            복수개의 옵션이 결합되어 사용된 형태  │
      │ $ls -al /etc       명령어+옵션+인자로 구성된 형태        │
      │ $date +%d          옵션에 +문자가 사용된 형태            │
      └─────────────────────────────┘


===================================================================


명령어 라인상의 에러 상황과 제어           

명령어 수행중 발생 가능한 에러 상황및 명령어 라인 제어

1. 명령어 수행중 발생 가능한 에러 상황

    다음은 명령어 라인을 실행하는 동안에 발생하는 일반적인 에러상황과
    쉘에 의해되돌려지는 에러 메세지들에 대한 설명이다. 이러한 에러
    메세지들은 처음에는 애매하게 느껴질수 있다.  유닉스는 프로그래머를
    위한, 프로그래머에 의한 연구 환경에서 개발되었기 때문에 간결한
    형식을 갖고있다. 경험이 쌓이면 이러한 메세지들은 친숙하고, 쉽게
    해독하게 될수 있을 것이다.

    일반적인 에러 메세지들과 에러 원인은 아래와 같다.

    . Command not found  : 명령어 이름의 문자가 틀렸거나, 대문자로 되어
                           있을 경우. 명령어 프로그램이 명령어 검색대상
                           디렉토리내에 없는 경우. (PATH로 선언된 영역)

    . Permission denied  : 사용자가 명령어 또는 억세스하고자 하는
                           화일을 사용하기위한 억세스 접근 권한이 없는
                           경우.

    . Cannot open file   : 화일명이 잘못 지정되어 있거나, 존재하지
                           않는 경우, 화일이 대상 디렉토리내에 없는 경우.

    다음은 에러 상황에 대한 예제이다.

    1)   $cp
         cp: Insufficient arguments (0)
       Usage: cp [-i] [-p] f1 f2
                cp [-i] [-p] f1 ... fn d1
                cp [-i] [-p] [-r] d1 d2

       일반적인 에러 메세지와는 다르게 명령어의 사용방식을 보여주는 예

    2)   $DATE
         DATE: not found

       명령어 이름을 대문자로 잘못 입력한 예,
       일반적인 에러 메세지 형식을 따르고 있다.

    3)   $cd \<return>
         >

       역슬레시(\)가 <return> 키 앞에 있을때, 2차 명령어 프롬프트가
       표시된다. ( 2차 명령어 프롬프트는 통상 >가 사용된다. ) 이외에도
       2차 프롬프트는 쉘이 명령어 라인으로 부터의 입력을 계속 받고자
       할 때에도 표시된다. 일반적으로 \ 문자는 복수개의 라인에 걸친
       명령어 라인의 연속을 나타낸다. 특수하게는 \ 문자는 다음 문자를
       무시하도록 쉘에게 지시하는 특수문자로 사용되며, 이 경우에는
       <return> 키는 명령어 라인의 끝을 나타내는데 사용된다.
       쉘은 \를 선행하지 않는 <return>을 만날때까지 단일 명령어 라인
       으로써 입력을 계속 받아들인다.

2. 명령어 라인의 제어 방식

       명령어 라인상에서 입력 실수로 인한 수정, 재입력 또는
       명령어 실행을 중지시켜야 하는 경우가 있을수 있다. 이러한 기능을
       수행하는 키는 현재의 터미널 설정에 따라 다르다.
       디폴트 기능키는 아래의 테이블과 같다. 또한 현재 설정되어 있는
       키들은 stty 명령어를 이용하여 수정및 확인할 수 있다.
       stty -lcase 명령어는 대문자 전용 터미널을 소문자 표시 가능
       터미널로 변환하는데 사용될수 있다.

       ┌────────────────┬───────┐
       │         기 능                  │     키       │
       ├────────────────┼───────┤
       │ 명령어 라인상의 직전 문자 삭제 │^h 또는 BS    │
       ├────────────────┼───────┤
       │ 라인 삭제                      │^u            │
       ├────────────────┼───────┤
       │ 명령어 실행을 중지             │^c            │
       └────────────────┴───────┘

       문자 삭제
         삭제 키는 하번에 한문자씩 이전의 문자를 삭제한다. 터미널 설정에
         따라서는 <backspace> 키도 이 기능을 수행할 수 있다.

       라인 삭제
         전체 라인은 <enter>키를 치기 이전에 언제라도 삭제할 수 있다.
         이때 커서는 다음 입력을 기다리기 위해 다음 라인으로 이동된다.
         이 경우 쉘은 프롬프트를 표시하지 않는다. 이전 라인은 무시된다.

       명령어 실행 중지
         현재 실행되고 있는 명령어는 종료되거나, 중지 시킬수 있다.
         중지 키를 누른때 운영 체제는 중지 신호를 명령어와 쉘에게 보낸다.
         명령어는 즉각적으로 실행을 멈춘다. 그리고 쉘은 또다른 프롬프트를
         표시하고, 입력될 다음 명령어를 기다린다.

===================================================================



패스워드의 제어 : passwd 명령어

1. 패스워드

    로그인 패스워드는 이미 유닉스 보안 기능으로 개념을 설명했다.
    유닉스에는 로그인 패스워드를 사용자가 변경, 설정, 조회할수 있는
    passwd 명령어가 제공된다. 이 명령어는 임의의 사용자와 관련된
    패스워드 속성과 패스워드의 설정및 변경을 하기위해 superuser라
    불리우는 시스템 관리자에 의해 사용되어지기도 한다. 패스워드는
    superuser까지도 read만이 가능한 화일인 /etc/shadow 화일에 저장
    되어 있다. 이 화일에는 패스워드의 유효기간에 관련된 정보들도
    저장되어 있다.

    1) 패스워드의 설정

    유닉스 명령어를 사용하여 패스워드를 설정하기 위한 절차는 로그인
    프롬프트에서 패스워드를 설정하는 방식과 매우 유사하다.

         ┌────────────────────┐
         │   $passwd                              │
         │   Enter password:                      │
         │   Re-enter password:                   │
         └────────────────────┘


         (1) passwd 명령어와 <return> 키를 입력한다. 명령어 이름의
             철자에 주의해야 한다. ( password 가 아니다. )
             일반 사용자들은 자신의 logname과 관련된 패스워드만을
             설정및 변경할 수 있다.

         (2) 프롬프트에서 패스워드를 입력하고, <return> 키를 입력한다.
             이때 사용자가 입력한 패스워드는 보안유지를 위해 화면상에
             표시되지 않음을 주목하기 바란다. superuser는 일반 사용자들을
             제어 하기위해 이 규칙으로 부터 제외된다.

         (3) 윗 단계와 같이 패스워드와 <return> 키를 입력한다. 이때
             윗 단계에서 지정한 패스워드와 지금 입력한 패스워드는
             반드시 일치해야 한다. 틀릴 경우 패스워드 입력 절차를
             한번 더 수행해야 한다. passwd 명령어는 사용자가 세번
             입력 오류를 범했을때 종료된다.

    2) 패스워드의 변경

         ┌──────────────────┐
         │   $passwd                          │
         │   Enter old password:              │
         │   Enter new password:              │
         │   Re-enter new password:           │
         └──────────────────┘

         패스워드를 변경하는 절차는 사용자가 기존의 패스워드를
         우선 입력한다는 점을 제외하고는 패스워드 설정 절차와 같다.
         새로운 패스워드는 기존의 패스워드와 최소 3글자가 달라야 한다.
         passwd 명령어는 /etc/default/passwd 화일과 패스워드가 유효한
         싯점을 결정하기 위해 유효기간 정보에대해 /etc/shadow 화일을
         검사한다. superuser는 기존의 패스워드를 입력해달라는
         프롬프트가 표시되지 않는다.

    3) 패스워드 속성의 조회

          ┌───────────────────┐
          │  $passwd -s                          │
          │  userid  PS  01/25/96  0  168  7     │
          └───────────────────┘


         사용자는 passwd -s 명령어를 이용하여 자신의 logname에 대한
         패스워드 속성및 유효기간 정보를 확인 할수 있는데, 이때
         표시되어지는 형식은 다음과 같다.

         ┌──────────────────────┐
         │logname  status  [ mm/dd/yy min max warn ]  │
         └──────────────────────┘


         logname   : 사용자의 logname
         status    : 패스워드 운영 상태 정보
                   PS : 패스워드가 설정되어 있음을 의미한다.
                   LK : 패스워드가 Lock이 걸려 있음을 나타낸다.
                        ( 이는 통상 일정 기간 패스워드를 사용중지 시킬때
                         사용한다. 이 경우 로그인 작업을 수행할 수
                         없게된다. )
                   NP : 패스워드가 설정되어 있지 않음을 의미한다.
         mm/dd/yy  : 직전의 패스워드가 변경된 날짜
         min       : 다음번 패스워드 변경전의 최소 일수.
                     이는 패스워드가 유지되는 최소 일수를 의미 하는데
                     이 기간 이전에는 다시 패스워드를 변경할 수 없게된다.
         max       : 패스워드가 유효한 최대 일수
         warn      : 패스워드가 만료되기전에 사용자에 경고를 표시할 일수.


========================================================================



온라인 메뉴얼 참조 명령어 : man과 mandex

1. man 명령어

    이 명령어는 시스템상의 참조 메뉴얼내의 특정 항목을 억세스하기 위한
    명령어이다. 수행결과 표시되는 정보들은 종이로 프린트하여 제공하는
    정식 메뉴얼상의 내용과 동일한 내용이다.  그 형식은 다음과 같다.

         ┌───────────────┐
         │   man [section] man_entry    │
         └───────────────┘


    man 명령어는 지정한 메뉴얼 항목을 탐색하고 출력해 준다. 동시에
    여러 항목을 지정할 경우 명령어 라인상에 공백으로 구분되어야만 한다.

    이 man명령어는 내부적으로 출력 내용을 한번에 한 화면분씩을 출력해주는
    pg 명령어를 사용한다. 이 때문에 pg 명령어의 하위 명령을 사용하는데,
    다음 화면을 출력하고자 할 경우에는 <return> 키를, 다음 라인을
    출력코자 하면은 <l> 키를 사용한다. 기타 정방향 또는 역방향 검색같은
    기능을 수행하는 상세한 하위 명령어들은 <h> 명령어를 입력하면 출력되니
    참조 바란다.

    다음은 특정 명령어에 대한 정보를 참조하기 위한 man 명령어의 사용예를
    보여주고 있다.

         $man  pwd

              --- 임의의 명령어에 관련한 메뉴얼 내용을 전부 참조하기
                  위한 형식

         $man  4  passwd

              --- 특정 명령어의 메뉴얼 내용중 특정 부분만을 참조하기
                  위한 형식

         $man  who  date

              --- 한번의 man 명령어를 통한 복수개의 명령어 메뉴얼을
                  참조하기 위한 형식

2. mandex 명령어

    이 명령어는 사용자가 선택한 주제에 대해 메뉴 선택 방식 (Menu driven)
    의 검색방식을 제공한다. mandex를 사용하기 위한 기본적인 방식은
    다음과 같다.

    1. mandex 명령어를 실행한다. 이때 특정의 주제가 들어있는 메뉴얼
     페이지를 억세스하기 위하여 명령어 라인상에 키워드를 지정할 수있다.

    2. 참조할 메뉴얼을 선택거나, 원하는 주제를 지정하거나, 탐색할
       문자열을 지정한다.

    아래의 예제는 mandex 명령어의 두가지 사용예를 보여주고 있다.

(예제 1)
      ┌────────────┐
      │ $mandex                │
      │ $mandex set password   │
      └────────────┘


    첫번째 예제의 경우에는 다음과 같은 mandex menu system을 표시하게 된다.
(예제 2)
┌────────────────────────────────┐
│            Online Manual Indexing System ( mandex )            │
│                                                                │
│                        Book Shelf                              │
│   ────────────────────────────     │
│     Online Manuals                                             │
│  -> User's, Programmer's, Administrator's Reference            │
│     NetworkUser's Reference Manual Pages                       │
│     X window Access Commands                                   │
│     Secure UNIX Reference Manual Pages                         │
│                                                                │
│                                                                │
│     Manual 1 of 4                                              │
│   ────────────────────────────     │
│                                                                │
│     Help Quit Open Manual Search                               │
│                                                                │
│     Selection: _                                               │
└────────────────────────────────┘

    mandex menu system에서는 이용 가능한 온라인 참조 메뉴얼의 목록을
    위와 같이 보여준다. 또한 위의 Manual 1 of 4라는 프롬프트는 현재
    -> 표시에 의해 선택된 메뉴얼이 전체 메뉴얼중에 몇개인지를 의미한다.
    -> 표시를 방향키의 사용을 통해 상하로 이동하며, 특정 메뉴얼을 선택할
    수 있다.  또한 하단부에는 사용자가 수행할수 있는 작업들을 의미하는
    옵션중에서 현재 사용가능한 옵션들을 나열하고 있는데, 이 옵션은 각각의
    옵션에 대문자로 표시된 글자를 누름으로써 선택할 수 있는데,
    mandex 명령은 소문자를 인식하지 못한다는 점을 주의 해야 한다.
    여기에서 Search 기능은 온라인 메뉴얼 상에서 특정의 주제를 찾기위해
    사용될 수 있다. 검색 기능을 사용하기 위해서는 우선 방향키를
    사용하여 검색대상 메뉴얼을 선택한후 S키를 누른후 검색 대상 키워드를
    입력하고 C키를 누르면 검색이 개시된다. 검색을 수행한후 mandex는
    해당 검색어가 들어있는 메뉴얼상의 부분을 화면상에 표시 해 준다.

    (예제 2)의 두번째 명령어는 명령어 라인상에 지정된 키워드에 관련된
    메뉴얼을 곧장 보여 주게된다.

    이 후 설명될 모든 명령어에 대한 자세한 정보들은 온라인 참조 메뉴얼을
    참고 하시기 바랍니다.

========================================================================



유닉스에서의 작업의 종료 : logout

    유닉스 작업을 종료하기 위해서는 다음과 같은 두가지 방식을
    이용할수 있다.

    . Shell 프롬프트에서 ^d를 누른다.
    . Shell 프롬프트에서 exit 명령어를 실행한다.

    작업을 종료하기 위해 위의 명령어를 실행하면, 터미널에
    logout 프롬프트와 login 작업을 수행한 이후부터 경과 시간에
    관련한 정보를 표시한다.

    일반적으로 대개의 사용자들은 logout 작업에 대해 큰의미를 부여하지
    않고, 신경을 쓰지 않는다.
    그러나 이는 매우 중대한 사고를 초래할 수 있다.
    logout을 수행하지 않고, 장시간 터미널을 비울경우 타인에의해
    시스템 자원에 대한 불법적인 억세스가 ( 예를들면 사용중인 데이타에
    대한 변조, 기밀 사항에 대한 불법적인 억세스등 ) 행해질
    가능성이 있다.  물론 timeout 기능을 설정하여 일정기간 동안 입력이
    없을 경우 자동적으로 logout을 수행하는 기능도 사용할수는 있으나,
    이 또한 여러가지 문제를 초래할 가능성이 있으므로 사용자 자신의
    주의가 요망된다.

========================================================================



유닉스 화일 시스템과 화일 구조

1. 유닉스 화일 시스템

유닉스 화일 시스템은 화일의 집합 또는 정보를 저장하기 위한 장소들로
구성된다. 유닉스에는 디렉토리, 일반 화일, 특수 화일, 심볼릭 링크
(Symbolic Link) 화일등 4가지 형태의 화일들이 있다. 이러한 화일들은
그들이 쉽게 억세스될수 있도록 하기 위하여 일정한 배치 구조속에
배치되게 된다.

유닉스 화일의 종류

    . 디렉토리(directory)는 다른 화일과 디렉토리에 대한 화일명,
      화일의 억세스 권한, 화일의 크기, 생성 날짜, 수정 날짜등의
      정보를 유지 관리한다. 디렉토리는 서로 연관되는 화일들을
      묶어서 관리하는데 유용하다. 또한 디렉토리는 데이타를
      갖지 않으며, 다른 화일 또는 다른 디렉토리로의 포인터만을
      저장하게 된다.

    . 일반 화일(ordinary file)는 디스크와 같은 특정의 기억 장치상에
      존재하는 문자들의 집합이다. 일반 화일들은 이후의 사용을 위해
      저장된 정보, 문서, 프로그램 코드등을 포함할수 있다.

    . 특수화일(special file)은 디렉토리 처럼 데이타를 갖고 있지 않다.
      기본적으로 이 화일은 디스크 드라이브, 터미널, 프린터와 같은
      각종의 하드웨어 장치로의 포인터들이 들어 있다. 각각의 하드웨어
      장치들과 연관되는 특수 화일들은 /dev 디렉토리내에 위치된다.

    . 심볼릭 링크된(symbolic link) 화일들은 유닉스 화일 시스템내의
      다른 화일들을 가르키는 정보(포인터 또는 절대 경로)를 갖고있는
      화일이다. 화일의 링크(link)라는 개념은 이후에 설명될 ln 명령어
      부분에서 자세히 설명될 것이다.

2. 유닉스 화일 구조

    유닉스 화일들은 회사의 조직 구성표와 유사한 계층적 구조 또는
    단계 구조로 구성된다. 이 방식은 정보를 관리, 검색, 구성하는데
    효율적인 방식을 제공한다.

    계층적 구조상에서 가장 높은 단계인 root 디렉토리로 부터
    서브 디렉토리들과 서브 화일들이 분기된다. 이 점에서 유닉스 화일구조는
    꼭대기에 뿌리와 모든 가지들이 그로부터 밑으로 향해가는 거꾸로된
    나무처럼 보여질수도 있다. 시스템상의 모든 다른 화일들과 디렉토리들은
    / (slash)로 표현되는 root 디렉토리에 연결된다.

    서브 디렉토리는 다른 화일 또는 화일과 서브 디렉토리들을 갖고있는
    서브 디렉토리들을 갖고 있을 수 있다. 디렉토리와 그에 종속되는
    서브 화일, 서브 디렉토리들 사이에는 부모-자식 관계의 연관 관계가
    존재한다. 각각의 부모 디렉토리는 바로 아래 단계의 화일과 디렉토리들에
    대한 정보를 유지 관리한다. 사용자에게는 로그인시에 홈디렉토리라고
    부르는 유일한, 초기의 디렉토리를 할당된다. 사용자가 화일 계층구조에서
    위치를 변경할때에, 각 디렉토리 위치들은 위치가 다시 바뀔때까지
    current directory가 된다.

    다음은 유닉스 화일 계층을 보여준다.


                                ┌───┐
                                │  /   │
                                └─┬─┘
                ┌─────┬───┴─┬─────┬─────┐
            ┌─┴─┐  ┌─┴─┐  ┌─┴─┐  ┌─┴─┐  ┌─┴─┐
            │ dev  │  │ var  │  │ home │  │ etc  │  │ usr  │
            └───┘  └───┘  └─┬─┘  └───┘  └───┘
                            ┌─────┴───────┐
                        ┌─┴─┐                  ┌─┴─┐
                        │user1 │                  │user2 │
                        └─┬─┘                  └─┬─┘
              ┌─────┬┴────┐          ┌──┴──┐
            ┌┴┐      ┌┴┐    ┌─┴─┐    ┌┴┐    ┌─┴─┐
          ┌fileA ┐  ┌fileB ┐  │ adm  │  ┌file2 ┐  │ prog │
          └┐  ┌┘  └┐  ┌┘  └───┘  └┐  ┌┘  └───┘
            └─┘      └─┘                  └─┘