1.Linux OS란

OS는 내부적으로는 컴퓨팅 하드웨어 자원을 관리, 제어하고 사용자에게는 하드웨어를 편하게 사용할 수 있도록 화면, 명령어(인터페이스)를 제공한다.

 

1)기능 : 프로세스 관리, 인터럽트, 메모리 관리, 파일 시스템, 장치드라이버, 네트워크, 보안, 입출력
2)목적

. 다양한 HW(CPU, Memory, Disk, Keyboard, Mouse, 등)를 연결 (확장성)
. 프로그램 개발시 HW이해가 필요한데 이해하는 수고를 덜어줌 (편의성) 
. 안정적인 HW자원을 활용하는 Multi Tasking, Time Sharing 기능 등 제공 (효율성)

3)구성 요소

 

구성요소 설명
Kernel .각종 자원(CPU, Memory, Disk 등) 관리
.여러 명령어에 대한 CPU Scheduling
.부팅 후 종료 시까지 메모리의 적재
Shell .사용자 및 응용프로그램과 OS의 인터페이스를 담당
.CLI(Command Line Interface), GUI(Graphic User Interface) 존재
File System .데이터의 저장,수정, 삭제를 가능하게 해줌
.물리적 디스크의 용량을 효율적으로 사용
.저장된 데이터에 접근 할 수 있는 방법 제공

 

 

 

 

2.커널(Kernel)

OS의 기본 구성 요소로 커널이 없으면 OS는 작동하지 않는다. 커널은 시스템 리소스를 관리하고 하드웨어와 통신하며 메모리, 프로세스, 파일 관리를 담당한다.

 

1)기능

-프로세스 처리에 필요한 HW자원을 관리하는 OS의 핵심 부분
-서버의 부팅 시부터 종료 시까지 계속 Memory에 상주해 있는 프로그램
2)역할

-자원 관리
 . 한정된 시스템 자원(CPU, Memory)을 효율적으로 관리하여 프로그램의 실행을 원활하게 함
 . Scheduling : 프로세스가 처리될 순서를 관리
-하드웨어 추상화(hardware abstraction)
 . 다양하고 복잡한 하드웨어를 제어하기 위해 추상화하여 일관성 있는 인터페이스 제공
  (※추상화 : 같은 종류의 장비에 대해 공통의 명령어를 제공하는 디바이스 드라이버 소프트웨어)
-보안
 . Kernel 영역과 사용자 영역을 분리항 사용자 프로세스는 커널 영역에 접근하지 못하게 함
 . 사용자 프로세스는 System Call을 통해 간접적으로 커널을 호출

3)동작

-파일 시스템: Disk를 File이라는 개념으로 제공


-작업 관리자: 물리적 자원(CPU)를 작업(Task)이라는 추상적 자원으로 제공


-메모리 관리자: Memory를 세그먼트나 페이지 개념으로 제공


-디바이스 관리자: 각종 장치의 디바이스 드라이버를 통해 일관되게 접근하도록 제공

 

-네트워크 관리자: 네트워크 장치를 소켓이라는 개념으로 제공

 

 

 

①프로세스는 System Call(시스템호출)을 통해 커널을 호출한다.
②하드웨어는 인터럽트를 통해 커널에 신호를 보낸다.
③그 사이에서 작업관리자(CPU 관리), 메모리관리자, 파일시스템(파일시스템관리), 디바이스관리자, 네트워크관리자가 Kernel의 역할을 수행한다.

※리눅스 Kernel 위치 : /usr/src/kernels (ex : /usr/src/kernels/3.10.0-862.el7.x86_64)

 

4)종류

단일형 커널(monolithic kernel), 마이크로커널(microkernel), 혼합형 커널(hybrid kernel), 엑소커널(exokernel), 나노커널(nanokernel) 등 여러종류가 있지만, 그 중 단일형 커널, 마이크로커널, 혼합형 커널이 많이 알려져 있다.

단일형 커널과 마이크로 커널 구조

구분 설명
단일형 커널
(monolithic kernel)
*개발자의 단순함에서 시작, 커널 내부에서의 프로시저 호출등이 간단하게 이루어진다.
.입출력, 네트웍크, 디바이스 자원 등 운영체제에서 일어나는 모든 일들을 1개의 커널이 모두 처리
.속도가 빠르고 디자인도 편리하지만, 커널의 크기가 증가함
.linux,  보통의 Unix계통, MS-DOS, Windows 9x(95, 98, ME), Mac OS 8.6 이하 버전 이 대상임
마이크로커널
(microkernel)
*유연성과 모듈화 감안 설계, 메시지 통신 방식의 비효율성에 의해 성능상의 단점을 가진다.
.시스템호출 같은 서비스, 디바이스 관리를 제외하여 안정성을 높이고 커널 크기도 줄인 디자인 방식
.안정성이 높고 보안도 높아지지만 전반적인 성능은 저하됨, 멀웨어 체크시 CPU과점을 함
.Mach, Minix, QNX, GNU Hurd, 심비안 이 대상임
혼합형 커널
(hybrid kernel)
.단일형 커널 + 마이크로터널 디자인
.NT 커널(Windows NT 3.1, 3.5, 4.0, 2000, XP, Vista, 7, 8, 8.1, 10, Windows Server 2003, 2003 R2, 2008, 2008 R2, 2012, 2012 R2, 2016), XNU(다윈[Darwin]커널과 이에 기반을 둔 Mac OS, iOS 등-BSD의 단일형 커널과 마하커널을 서로 합친 형태), BeOS, Plan 9

4)파라미터(Parameter)

리눅스에서 사용되는 시스템 변수들을 의미하며, 커널 변수 값을 제어하여 시스템을 운영 용도에 맞게 최적화 할 수 있는 설정으로
커널 매개변수의 위치는 /proc/sys 디렉토리 밑에 존재하고 커널 파라미터의 절대경로 수정을 통해 설정 변경도 가능하지만

sysctl을 통해서 쉽게 설정할 수 있다.

-시스템 최적화를 위해 커널에서 사용하는 변수의 값을 제어
-응용프로그램이나 DB에 따라 권고 파라미터 제공

 

[파라미터 확인 및 변경방법]

①확인 방법

# sysctl -a
# sysctl | grep -w

②변경 방법

- 현재 파라미터 변경(리부팅 후에는 원복)
# sysctl -w [파라미터명]=[값]    (예: # sysctl -w kernel.panic=10)
- 리부팅 후에도 반영되도록 설정(현재 파라미터는 변경되지 않음)
# vi /etc/sysctl.conf       ([파라미터명]=[값] 포맷으로 수정 또는 추가)
- 수정된 sysctl.conf내의 값을 불러와서 적용
# sysctl -p

※-p 옵션 : /etc/sysctl.conf만 변경시 적용
  --system 옵션 : /etc/sysctl.conf설정외 연관된 모든 경로의 설정에 따로 추가시 적용
            (/run/sysctl.d/*.conf, /etc/sysctl.d/*.conf, /usr/local/lib/sysctl.d/*.conf,
             /lib/sysctl.d/*.conf, /etc/sysctl.conf)

sysctl --system 옵션적용 방법

 

3.쉘(Shell)

운영체제에서 제공하는 명령을 실행하는 프로그램으로 Interpreter(번역기) 역할을 하는 것으로 시스템으로 지원하는 명령어들의 집합을 묶어서 프로그램화한 것이다. CLI(Command Line Interface)와 GUI(Graphic User Interface)가 존재하며 Shell종류는 다양하고, Unix계열도 GUI를 가지고 있다.

1)역할
-리눅스 커널과 사용자 사이에서 인터페이스를 담당
-사용자가 입력하는 명령을 읽어 해석하고 커널에 전달 (command Interpreter)

명령 처리 절차

※ Shell은 사용자의 불편함을 해소하기 위해 만들었으며, 만약 Shell이 없다면 단순히 파일복사를 수행하기 위해서도 프로그램을 직접 짜거나 커널의 해당 명령어(또는함수)를 찾아봐야 할 것이다.

 

2)기능

-사용자가 입력한 명력어를 해석하여 시스템 기능을 실행하거나 다른 프로그램을 실행
-프로그래밍 기능(Shell Script)
-사용자 환경 설정(Shell 변수, 환경 변수)

 

3)종류

Shell
계열
이름 설명 특징
bourne Shell

 Bourne Shell
(sh)
.가장 기본적인 쉘로 유닉스의 초기부터 사용되어 온 쉘이다.
.스크립트를 지원한다.
.단점 : 별칭(alias)이나 히스토리 등의 기능이 없음
.1974년 Stephen Bourne(스티브 본)이 개발한 최초의 쉘(Shell) 이다. 대부분의 리눅스에 기본적으로 설치가 되어있다
.설치 위치 : /bin/sh (프롬프트 : $)
Bourne-again shell 
(bash)
.리눅스에서 가장 많이 사용되는 쉘이다.
.C 쉘과korn shell의 장점을 결합해 작성, Bourne Shell 문법의 명령어 셋을 제공하여 Bourne Shell과 호환되는 쉘로 GNU 프로젝트에 의해 만들어지고 배포된다.
.명령행 편집기능을 제공한다.
.1989본셸을 기반으로 GNU 프로젝트를 위해 Brian Fox'(브라이언 폭스) 가 개발한 쉘이다. Linux 표준 쉘로 채택 (리눅스에서 가장 많이 사용하는 쉘)됨.
.설치 위치:  /bin/bash, /bash/sh (프롬프트 : $)
korn shell
(ksh)
.본 쉘의 명령어를 모두 인식하며, 명령어 히스토리(history) 기능과 엘리어스(alias), 작업 제어 등의 기능이 추가되었다.
.유닉스에서 가장 많이 사용되는 쉘이다.
.명령어 완성 기능, 히스토리 기능 지원한다.
.1983년 벨 연구소의 데이비드 콘이 개발한 유닉스 셸로 유닉스에서 가장 많이 사용되는 본 쉘을 확장한 쉘
.Bourne 쉘의 상위 버젼. Bourne 쉘 및 C 쉘의 좋은 특성들을 결합. 
.설치 위치 : /bin/ksh (프롬프트 : $)

z shell
(zsh)
.Bourne Shell의 확장 버전으로, 지금까지의 수 많은 쉘(Shell) 들의 기능을 포함한 많은 새로운 기능과 플러그인 및 테마 지원을 제공한다 .1990년에 Paul Falstad(폴 폴스타드) 가 zsh의 최초 버전을 작성
.확장형 본쉘, 콘쉘의 재작성 쉘
강력한 history 기능
향상된 명령행 편집 기능
.설치 위치 : /bin/zsh (프롬프트 : #)

C Shell C Shell
(csh)
.C언어 위주의 쉘로 처음 작성되었을 때에는 Bourne Shell이 가지고 있지 못한 기능들(작업제어, 명령어 히스토리 등)을 가지고 있었기 때문에 많이 사용되었다.
.명령행 편집기능을 제공하지 않는다.
.1978년  Bill Joy(빌 조이)가 개발
.본쉘의 사용성을 높인 쉘 대화형 작업에 강점을 지님
.설치 위치 : /bin/csh (프롬프트 : %)
C언어의 특징을 많이 포함함
히스토리, 별명, 작업 제어 등의 기능 포함
대부분의 대형 검퓨터용 유닉스에서, C 쉘 또는 TC 쉘(C 쉘의 확장본)이 보편적으로 사용됨
tc shell,
tee-see-shell
(tcsh)
.C Shell 에서 명령 행 완성과 명령 행 편집 기능을 추가한 것
.일반적인 C 쉘이며 사용자 중심이고 속도가 빠르다.
.1981년 Ken Greer(켄 그리어)가 개발
.csh의 기능을 강화한 쉘
.설치 위치 : /bin/tcsh (프롬프트 : >)
확장 C쉘로, BSD 계열에서 가장 많이 사용
명령어 편집 기능 제공

※ 리눅스 환경에서는 기본적으로 Bourne shell을 기반으로 한 Bash shell 주로 사용되고,

  유닉스에서는 기본적인 본 쉘의 기능을 확장한 korn shell이나 C shell이 많이 사용된다.

Shell별  특징

4)쉘 변경방법
- 현재 사용 중인 쉘 확인하기
   $ echo $SHELL 명령어를 실행하여 현재 사용 중인 쉘을 확인할 수 있다.
- 사용 가능한 쉘 확인하기: 
   $ cat /etc/shells 명령어를 실행하여 시스템에 설치된 사용 가능한 쉘 목록을 확인할 수 있다.
- 새로운 쉘 선택하기: 
   $ chsh 명령어를 실행하여 로그인 쉘을 변경할 수 있다. 
     (예: 새로운 쉘로 Bash를 변경할 경우 #chsh -s /bin/bash)
- 새로운 쉘로 변경 후 로그아웃 및 재로그인

  . 새로운 쉘을 선택하면 로그아웃하고 다시 로그인하면 변경된 쉘을 사용할 수 있다.

※참고로, 쉘을 변경하는 것은 시스템에 영향을 미칠 수 있으므로, 신중하게 선택해야 합니다. 또한, 쉘을 변경하더라도, 이전 쉘에서 작성한 쉘 스크립트나 환경 변수 등은 새로운 쉘에서 사용할 수 없으므로, 필요한 작업을 다시 수행해야 한다.

 

5)필요한 shell 명령

- 현재 사용 중인 쉘의 위치 확인

  $ echo $SHELL

- 사용 가능한 쉘 확인
  $ cat /etc/shells
- 사용자별 로그인시 사용하는 쉘 확인(사용자 로그인 쉘)
  $ cat /etc/passwd

  (예: user01:x:5010:5000:/home/user01 /bin/bash → user01은 bash 쉘사용)

- 현재 사용중인 shell확인, 여러 줄이 나올 경우 echo $$ 결과와 동일한 PID확인

  $ ps $$
- 로그인Shell 변경명령: chsh
  # chsh

6)Shell 명령 실행순서

- Shell에서 명령어 입력을 통해 실행되는 순서
  ①Alias ②Shell 예약어 ③Function ④내장 명령어 ⑤파일시스템 명령

- 실행되는 명령어가 어떤 기능인지 type 명령어로 확인 가능
  # type [명령어]

기능 설명
①Alias  .옵션을 포함한 특정 명령을 짧고 쉬운 명령으로 대체
.위험한 명령을 잘못 발행하는 것을 대비하기 위해 명령어 대체
.# alias 명령어로 현재 shell 세션에 적용된 alias 확인
.예: # alias SHELL='cd /src/root/shell'
     # alias rm='rm -i'
②Shell 예약어 .파일로는 존재하지 않지만 Shell이 특별한 목적을 위해 예약해 둔 단어
.do, while, else 등
.shell 스크립트 작성에 사용
.예: 
while true
do
    sleep 5
    df -h /logs01
done
③Function .일련의 명령어를 함수로 정의
.# set 명령어로 현재 shell 세션에 적용된 function 확인
.예:
function reboot {
    echo "check target is  : $(hostname)"
    echo "Enter HOSTNAME to proceed?"
    read sure
    if [$sure = "$(uname -n)"]; then
       $(which reboot)
    else
       echo Cancelled.
    fi
}
④내장 명령어  .shell에 통합된(Built in) 명령
.일부는 명령어 파일이 /usr/bin에 존재하지만, 실제 수행되는 것은 내장 명령임
.예: cd, echo, exit, fg, history, pwd 등
# find / -name exit
(결과 없음)
.RHEL에서 cd 명령어의 메뉴얼 페이지를 보면 내장 명령에 대한 전체적인 메뉴얼이 출력
$ man cd
⑤파일시스템 명령 .실제 파일로 존재하는 명령
.경로를 지정해 줘야 실행됨
.환경변수 $PATH에 경로가 포함되어 있으면 경로 없이 실행
.$PATH는 왼쪽부터 순차적으로 탐색
.예:
$PATH에 명령어의 경로가 있으면 바로 실행
# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin/bin:/usr/sbin:/usr/bin:/root/bin

#date
Sun Jan 10 20:21:16 KST 2010

$PATH에 명령어의 경로가 없다면 절대 경로 또는 상대 경로까지 입력 필요
# /src/root/shell/CheckTD.sh
또는 
# cd /src/root/shell/
# ./CheckTD.sh

+ Recent posts