본문 바로가기

메가존 클라우드 2기 교육/실무 기초

운영 체제(OS) + Linux

운영체제(Operating System)란?

설명하기에 앞서, '인프라스트럭처'에서 'Core'에는 다음과 같은 세 서비스가 있다고 했었다.

  • Computer Service : CPU, RAM
  • Storage Service : SSD, HDD
  • Netword Service : Public IP, Private IP

사실 여기에 하나가 더 있다. Image Service이며 Image가 이번에 다룰 운영체제를 의미한다.


운영 체제(OS)는 시스템 하드웨어(CPU, 메모리 등)를 관리할 뿐만 아니라 응용 소프트웨어를 실행하기 위해 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어이다. 또한, 입출력과 메모리 할당과 같은 하드웨어 기능의 경우 응용프로그램과 컴퓨터 하드웨어 사이의 중재자 역할도 한다.

최근, 가상화 기술의 발전에 힘입어 실제 하드웨어가 아닌 하이퍼바이저(가상머신) 위에서 실행 되기도 한다. (가상화는 클라우드의 핵심)

 

대표적인 예시로 Window, MAC OS, Linux(리눅스)가 있다.

 

운영 체제는 실행되는 응용프로그램들이 메모리와 CPU, I/O(입출력 장치) 등의 자원들을 사용할 수 있도록 만들어 줌과 동시에, 이들을 추상화하여 파일 시스템 등의 서비스를 제공한다.

또한, 멀티 태스킹을 지원하는 경우, 여러 개의 응용 프로그램을 실행하고 있는 동안, 운영 체제는 이러한 모든 프로세스들을 스케줄링하여 마치 그들이 동시에 수행되는 것처럼 보이는 효과를 보인다. (멀티프로세싱)


운영 체제의 구성 요소

커널(Kernel)

운영체제에서 가장 중요한 프로그램. (OS의 중추)

사용자보다는 시스템에 더 가깝다.

 

하드웨어라는 자원을 관리하는 관리자 역할을 하며, 어떤 프로글9ㅐㅁ이 작동할 수 있도록 CPU, 메모리, 디스크와 같은 물리적 장치들을 배분한다.

 

Linux 커널은 Linux 운영 체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스이다. 그리고 두 가지 관리 리소스 사이에서 최대한 효과적으로 통신한다.

커널의 작동 모습

특히, 가상화 부분에서 커널에 하이퍼바이저가 들어간다. (클라우드의 핵심)

 

커널의 기능은 다음과 같다.

  • 메모리 관리 : 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는지를 추적한다.
  • 프로세스 관리 : 어느 프로세스가 중앙 처리 장치(CPU)를 언제 얼마나 오랫동안 사용할지를 결정한다.
  • 장치 드라이버 : 하드웨어와 프로세스 사이에서 중재자/인터프리터의 역할을 수행한다.
  • 시스템 호출 및 보안 : 프로세스의 서비스 요청을 수신합니다.

쉘 (Shell)

커널과 달리 쉘은 시스템보다 사용자에 더 가깝다.

쉘은 사람이 사용하는 명령어를 프로그램이 실행할 수 있도록 만들어주는 인터페이스이다. 다시 말해, 터미널(Terminal : 통신을 통해 연결시켜주는 도구)에서 사용하는 명령어들은 모두 쉘 언어이다. 쉘에서는 프로그램에 명령어를 직접 전달할 수도 있고, 내부에서 함수도 짤 수 있으며, 초기 환경 셋팅도 가능하다.

 

쉘은 크게 명령 줄과 그래픽 형의 두 종류로 분류된다.

  • 명령 줄 인터페이스 (CLI : Command Line Interface) : 우리가 사용하는 cmd나 리눅스가 포함된 글로만 이루어진 인터페이스이다.
  • 그래픽 사용자 인터페이스 (GUI : Graphic User Interface) : 우리가 사용하는 Winodw 처럼 그래픽이 있는 인터페이스 이다.

디렉토리(Directory)

디렉토리는 컴퓨팅에서 파일을 분류하기 위해 사용하는 이름공간이다. 보통 컴퓨터에선 폴더(folder) 또는 카탈로그(catalog)로 불린다.

디렉토리 속에 있는 또 다른 디렉토리를 하위 디렉토리 또는 서브 디렉토리라고 한다. 더불어, 디렉토리들은 계급, 곧 트리 구조를 형성한다.

 


리눅스 (Linux)

리눅스(Linux)는 컴퓨터 운영 체제(서버 운영체제)이며, 그 커널을 뜻하기도 한다. 리눅스는 다중 사용자, 다중 작업(멀티태스킹), 다중 스레드를 지원하는 네트워크 운영 체제(NOS)이다.


리눅스의 디렉토리

절대경로와 상대경로

절대경로는 반드시 ' / ' 로 시작하며, 맨 앞의 ' / '는 최상위 폴더 root를 의미한다. 

예시) ' /etc/sysconfig/network-scripts'

예시의 경로는 root -> etc -> sysconfig -> network-scripts 순으로 하위폴더로 들어가는 것이다.

 

상대경로는 '쉘 프롬프트 / 명령어 / 옵션 / 인자 ' 순으로 입력되며, 현재 위치를 기반으로 인자를 본다.

예시) ' # ls -l /var'

예시의 의미는 'root'사용자가 현재 위치에서 var의 리스트를 확인하는 것이다.

 

쉘 프롬프트는 'root 사용자'를 의미하는 ' # '과 '일반 사용자'를 의미하는 ' $ '로 나뉜다. 

 

 


리눅스의 디렉토리

디렉토리 명 설명
home 사용자 홈 디렉토리가 생성되는 곳 ( 일반 사용자의 워크스페이스)
media CD_ROM이나 USB같은 외부 장치를 연결하는 디렉토리
opt 추가 패키지가 설치되는 디렉토리
dev 장치파일들이 저장되어 있는 디렉토리
root root계정의 홈 디렉토리 (' / '디렉토리와는 다름, 최고 권한자의 워크스페이스)
sys 리눅스 커널관련 정보가 있는 디렉토리
usr 기본 실행파일과 라이브러리 파일, 헤더 파일등의 파일이 저장되어있는 디렉토리
boot 부팅에 필요한 정보를 가진 파일들이 있는 디렉토리
var 시스템 운영중에 발생한 데이터와 로그가 저장되는 디렉토리
tmp 시스템 사용중에 발생한 임시데이터가 저장된다. (부팅 시 초기화)
srv FTP나 Web등 시스템에서 제공하는 서비스의 데이터가 저장되는 디렉토리
run 실행중인 서비스와 관련된 파일이 저장되는 디렉토리
proc 프로세스 정보 등 커널 관련 정보가 저장되는 디렉토리
mnt 파일 시스템을 임시로 연결(mount)하는 디렉토리
etc 리눅스 설정을 위한 각종 파일들을 가지고 있는 디렉토리

퍼미션

리눅스의 퍼미션

리눅스는 파일의 권한 정보를 위와 같은 사진으로 나타낸다.

파일 권한 : [- - -][- - -][- - -] 이렇게 세 구역으로 총 9글자이다. 구역은 순서대로 각각 소유자, 소유 그룹, 게스트 사용자를 지목하며, 구역에 입력된 값에 따라 지목된 대상의 권한이 정해진다.

  • r - 읽기( 4 ) : 조회
  • w - 쓰기( 2 ) : 등록, 수정, 삭제
  • x - 실행( 1 ) : 실행

이렇게, 구역의 세글자는 읽기, 쓰기, 실행 순으로 권한정보를 입력한다. 다음 예시를 보자.

rwxrw---x    >> 소유자는 읽기, 쓰기, 실행 / 그룹은 읽기, 쓰기 / 외부 사용자는 실행 권한을 가진다

 

이러한 퍼미션은 8진수 숫자로도 표현 할 수있다.

rwxrw---x    >> r(4) + w(2) + x(1) / r(4) + w(2) / x(1)  >>  7/6/1  >>  761

8진수 표기 문자 표기
0 ---
1 --x
2 -w-
3 -wr
4 r--
5 r-x
6 rw-
7 rwx

 

 이러한 퍼미션은 명령어를 통해 변경할 수 있다. 이는 간단한 예시만 들고, 자세히는 실습에서 다루겠다.

ex1) 옥탈 모드 (Octal Mode)

        # chmod 600 main.py      // main.py의 퍼미션을 관리자에게만 읽기(r), 쓰기(w)를 부여한다.

ex2) 심볼릭 모드 (Symbolic Mode)

        # chmode u+x file1          // file1의 소유자에게 실행 권한을 추가한다.

        # chmode g+x, o+x file1   // file1의 그룹과 외부 사용자에게 실행 권한을 추가한다.

        # chmode u-rx file1          // file1의 소유자에게 읽기, 실행 권한을 제거한다.

        # chmode a=rwx file1      // file1의 소유자, 그룹, 외부 사용자 모두(a)의 권한을 초기화 하고 읽기, 쓰기, 실행 으로 설정한다