자격증/리눅스마스터 1급

[리눅스마스터1급] 1-1-2) 리눅스의 기초

MoonWol 2025. 2. 7. 17:16

1. 리눅스 개요


1.1 리눅스의 정의 및 의미

  1. 리눅스의 정의
    • 1991, 리누스 토발즈에 의해 오픈소스로 개발
    • 유닉스 호환 운영체제
  2. 리눅스의 의미
    • 처음에는 다양한 패키지를 포함하는 운영체제의 형태가 아닌 리눅스 커널만을 의미
    • FSF(Free Software Foundation)가 GNU 프로젝트를 통해 리눅스 커널 기반으로 다양한 기능이 포함된 리눅스 배포판을 제공
    • → GNU/Linux

1.2 리눅스의 일반적 특징

  1. 이식성(Portability)
    • 대부분의 코드가 C언어로 작성되어 있음 → 다양한 하드웨어에 쉽게 이식 가능
    • 처음에는 인텔 x86 CPU를 기본으로 지원 → 최근에는 다양한 CPU 아키텍처에 적용
  2. 자유 소프트웨어(Free Software)
    • 리눅스는 단일 기업에 의해 운영X, 전세계 개발자들의 기여를 통해 진화
    • 소스코드 자유롭게 사용, 수정, 배포 가능
    • 리눅스의 소프트웨어들은 상당수 GPL(General Purpose License)이나 LGPL(Library/Lesser Genenral Purpose License)를 따름
  3. 멀티 유저(Multi-User)
    • 다수의 사용자가 네트워크를 통해 한 시스템의 CPU, 메모리 저장소 등의 자원에 접근, 사용 가능
  4. 멀티 프로그래밍(Multiprogramming)
    • 다수의 프로그램 메모리에 적재하고 동시 실행 가능
  5. 계층적 파일 시스템(Hierarchical File System)
    • 표준화된 디렉터리 구조 정의

6. 셸(Shell)

  • 명령어 기반 프로그램 → 명령어 해석 기능, 프로그래밍 기능, 사용자 환경설정 기능 제공
  • 사용자는 셸을 통해 커널에게 명령을 내리고, 셸은 명령어를 해석하여 그에 맞는 프로그램 실행

 

7. 보안(Security)

  • 임의 접근 제어(DAC; Discretionary Access Control)을 제공하고 이를 확장한 확장 임의접근제어(Extended DAC) 제공
  • 네트워크 모듈 제공 (netfilter, iptables, ebtables, arptables)
  • ⇒ 네트워크 정책에 따라 동작, 네트워크 트래픽 서버로 안전하게 전달
  • 네트워크 스택은 IPSec을 제공하여 IP 통신시 안전하게 데이터 송수신 가능
  • 강제접근제어(MAC; Mandatory Access Control)를 강화한 SELinux(Security Enhanced Linux) 존재

 

 

1.3 리눅스의 기술적 특징

  1. 모놀리딕 커널(monolithic kernel)
    • 파일 시스템, 프로세스 간 통신, 입출력 기능, 장치 관리, 프로세스 처리기 등 운영체제가 제공하는 서비스를 하나의 커널로 구현하여 제공하는 방식
    • 단일 커널 → 동적 로드 가능한 커널 모듈과 동적 설정을 위한 프로퍼티 기능을 제공해 커널의 유연성 확보
  2. 장치의 파일화
    • 리눅스는 시스템의 자원을 모두 파일로 다룸
    • 파일은 디렉터리, 일반 파일 특수 파일로 나뉨
    • 특수 파일
      • 장치 파일 : 장치 유형에 따라 문자 장치 파일과 블록 장치 파일과 같은 장치 파일 제공
      • 파이프 : 프로세스 간 통신을 위한 파일
      • 소켓 : 응용 프로그램의 소켓 프로그래밍을 위한 파일
  3. 다양한 파일 시스템의 지원
    • 리눅스 자체 파일 시스템 제공(ext2, ext3, ext4)
    • 윈도우용 파일 시스템 제공(FAT32, NTFS)
    • 네트워크 파일 시스템 지원 (SMB, CIFS)
    • 시스템 충돌 및 전원문제로 복구 가능한 저널링 파일 시스템(journaling file system) 지원
  4. 가상 메모리
    • 물리적인 메모리의 크기를 극복하기 위한 메모리 관리 기법
    • 프로세스들이 접근하는 메모리를 가상 메모리에 매핑, 가상 메모리는 페이지를 통해 물리 메모리에 매핑
    • 요구 페이징(Demand Paging) : 시스템에서 동작 중인 프로세스가 사용하는 메모리만을 물리 메모리에 로드, 사용빈도가 낮은 메모리는 디스크에 저장
    • 넓은 주소 공간과 각 페이지에 대한 보호 메커니즘, 이미지와 데이터 파일을 프로세스의 주소 공간에 매핖ㅇ하는 메모리 매핑, 프로세스 간 공유 메모리 기능을 제공
  5. 스왑(Swap)
    • 물리 메모리 사용량이 가득 차서 프로그램을 메모리(주기억장치)에 로드할 수 없는 경우, 메모리에 대한 접근 또한 실행 빈도가 낮은 데이터나 프로그램들을 디스크(보조기억장치)로 옮기고 물리 메모리를 확보하여 프로그램을 메모리에 다시 로드 = 예비 공간 역할을 하는 영역
    • swap out : 메모리 → 디스크 / swap in : 디스크 → 메모리
    • swap space : 디스크 상의 공간, 디를 위한 전용 파일이나 파티션 존재해야 함
    • → 동적으로 크기를 조정할 수 없어 하드디스크의 공간을 차지하기도 함
    • swap parition : 최대 절전 기능을 사용하기 위해 필요함.
    • /etc/sysctl.conf의 vm.swapiness ⇒ 스왑 빈도 변경을 위해 수정해야 함(메모리 가용량 제한 기준 설정)
    • free : 메모리 상태, 스왑 영역 용량 확인
  6. 동적 라이브러리와 정적 라이브러리
    • 동적 라이브러리 : 메모리에 한 번 적재하면 매번 라이브러리 로드할 필요 없이 공용으로 라이브러리 사용 가능⇒ 실행 속도가 상대적으로 느리고 배포에 제약 존재
    • ⇒ 메모리 실행 프로그램의 크기가 작고, 메모리 효율적으로 사용 가능
    • 정적 라이브러리 : 실행 프로그램이 컴파일될 때 링크되어 프로세스가 실행될 때 정적 라이브럴리도 함께 메모리에 로드됨⇒ 실행 파일의 크기가 상대적으로 더 큼
    • ⇒ 실행 속도가 빠르고, 배포에 제약이 없음
    • 로더는 환경변수 LD_LIBRARY_PATH와 환경변수 파일 /etc/ld.so.conf.를 검색해서 동적 라이브러리를 로드
  7. 파이프(Pipe)
    • 프로세스의 표준 출력을 다른 프로세스의 표준 입력으로 보낼 수 있는 프로세스 간 통신 방식
    • |
  8. 리다이렉션(redirection)
    • 프로세스의 표준 입출력을 파일, 화면, 장치 등에서 입력받거나 출력할 수 있도록 입출력을 재지정할 수 있는 매커니즘
  9. 가상 콘솔(virtual console)
    • 하나의 화면에서 여러 개의 콘솔을 사용할 수 있는 기능 제공

1.4 리눅스의 장단점

  1. 리눅스의 장점
    • 오픈소스
      • 결제적
      • 전세계 개발자들의 업데이트 → 안정적으로 개선, 보안성 강화
    • 다양한 네트워크 환경(Ethernet, SLIP, PPP 등) 제공 + 네트워크 프로토콜(TCP/IP, IPX 등) 지원
    • 서버, 개발용, PC용 등 다양한 목적으로 사용 가능
    • 임베디드 리눅스와 같이 제품에 맞게 커스터마이징 가능
  2. 리눅스의 단점
    • 체계적인 기술 자원 네트워크 X
    • 마이크로소프트 오피스와 같은 리눅스용 상용 소프트웨어 부족
    • 최신 하드웨어 기기에 대한 디바이스 드라이버 지원이 느림

2. 리눅스와 GNU 그리고 오픈소스 라이선스


2.1 리눅스와 GNU(GNU’s not Unix)

  1. GNU GPL 라이선스(General Public License)를 갖는 리눅스
    • GNU GPL 라이선스을 갖는다 ⇒ 리눅스의 소스 코드는 누구나 자유롭게 사용, 변경, 배포가 가능하다
    • 자유 소프트웨어(Free Software) : GNU GPL에 따라 배포되는 소프트웨어
    • 소스코드의 자유로운 공유를 통한 기술 발전 및 소프트웨어 산업 발전을 목적으로 함
  2. GNU(GNU’s Not Unix)
    • GNU는 유닉스와 호환된다는 의미와 그렇지만 다른 운영체제라는 이중적 의미를 갖고 있음
    • GNU C 컴파일러(gcc), 문서편집기(GNU Emacs), X 윈도우(GNOME), 파일압축(tar), 셸(bash), 부트매니저(Grub)과 같은 다양한 응용 프로그램을 개발
  3. 자유 소프트웨어(Free Software)의 정의
    • 자유 소프트웨어는 4가지 종류의 자유를 내포한다.
      • 자유1. 프로그램을 어떠한 목적을 위해서도 실행할 수 있는 자유
      • 자유2. 프로그램의 작동 원리를 연구하고 이를 자신의 필요에 맞게 변경시킬 수 있는 자유
      • 자유3. 이웃을 돕기 위해서 프로그램을 복제 및 배포할 수 있는 자유
      • 자유4. 프로그램을 향상하고 이를 공동체 전체의 이익을 위해 다시 환원할 수 있는 자유
    • 1,3을 지기키 위해 소스코드의 제공이 필요하다
  4. 카피레프트(Copyleft)
    • 사용자가 자유 소프트웨어를 자유롭게 사용할 수 있도록 법률적 보장을 위해 만들어진 개념
    • 카피레프트를 실제 구현한 라이선스가 GNU GPL 라이선스

2.2 오픈소스(Open Source)

소프트웨어나 하드웨어의 저작자 권리를 지키면서 원시 코드를 누구나 열람할 수 있도록 한 소프트웨어

2.3 다양한 오픈소스 라이선스

  1. GPL (General Public License) 라이선스
    • 소프트웨어의 실행, 연구, 공유, 수정의 자유를 최종 사용자에게 보장
  2. LGPL(Library/Lesser General Public License) 라이선스
    • GNU GPL 라이선스의 강력한 카피레프트 조건과 BSD 라이선스의 사용허가서나 MIT 라이선스의 단순 사용허가를 절충하여 만든 자유 소프트웨어 재단의 자유 소프트웨어 라이선스
    • 프로그램 자체에는 카피레프트를 적용하나 이 프로그램을 이용하는 프로그램에게는 카피레프트를 적용하지 X
  3. BSD(Berkley Software Distribution) 라이선스
  4. 아파치(Apache) 라이선스
  5. MPL(Mozilla Public License) 라이선스
  6. MIT(Massachusetts Institute of Technology) 라이선스

 

 

 

3. 리눅스의 역사와 리눅스 배포판


3.1 리눅스의 역사

  1. 1984년~1991년도 : 리차드 스톨만의 자유 소프트웨어 운동 시작
    • 1985년, 리차드 스톨만은 자유 소프트웨어 재단(FSF : Free Software Foundation)을 설립
  2. 1991년 10월~1993년 : 리누스 토발즈의 리눅스 커널 및 배포판 릴리즈
  3. 1994년 : 리눅스 커널 정식 1.0 버전 출시
  4. 1998년 : 오픈소스 소프트웨어의 태동
  5. 2003년~2005년 : 다양한 배포판의 보급
  6. 2011년 이후 : 전세계 개발자와 함께하는 리눅스 커널의 지속적인 발전
  7. 2020년 이후 : CentOS의 개발 중단에 따른 로키 리눅스(Rocky Linux) 등장

 

3.2 리눅스 배포판의 분류 및 특징

3.3 리눅스 배포판 세부 설명

 

4. 리눅스의 활용 분야


1) 서버, 메인 프레임

  • 웹서버를 호스팅하는 대부분의 서버들은 리눅스를 이용
  • 메인 프레임에서도 낮은 비용과 오픈소스 모델이라는 장점
  • 대부분의 슈퍼 컴퓨터에서도 리눅스 배포판을 이용

2) 스마트 디바이스

  • 스마트폰, 태블릿 컴퓨터, 스마트 TV, IVI(In-Vehicle Infortainment) 시스템 등에 리눅스가 탐재
  • 안드로인드는 스마트폰용 운영체제 중 가장 인기 있는 운영체제이며 리눅스 커널을 기반으로 함
  • webOS, FireFoxOS도 리눅스 기반

3) 임베디드 디바이스

  • 임베디드 시스템 : 하드웨어의 제어를 통해 특정 기능을 수행하며 컴퓨터 시스템 내에 존재하는 전자 시스템
    • 운영체제가 포함되지 않고 펌웨어만으로 동작하는 시스템 vs. 운영체제를 통해 구동되는 시스템
  • 이러한 운영체제에 주로 리눅스 커널을 포팅하고 해당 시스템을 위한 특수 기능을 수행하는 응용 프로그램을 개발하여 디바이스를 완성

4) 게이밍 디바이스

  • 밸브 사는 개인용 컴퓨터에서 게임을 즐길 수 있도록 스팀 리눅스 버전을 출시
  • → 수많은 스팀 게임이 리눅스에 포팅
  • VOGL, OpenGL, Shield, Proton 등

5) 리눅스 클러스터

  1. 고계산용 클러스터(HPC : High Performance Cluster)
    • 과학 계산용으로 주로 활용, 고성능 계산 능력을 제공하기 위한 목적
    • 큰 계산을 위해 고가의 메인 프레임을 사용하기보다는 중소형급 시스템 여러 대를 묶어 효율성을 높이는 기술로서 리눅스가 사용

2. 부하분산 클러스터(LVS : Linux Virtual Server)

  • 로드 밸런서(Load Balancer)를 운영하여 대규모의 트래픽을 여러 대의 서버로 분산하는 기술로 대규모의 서비스를 제공하는 웹서비스에서 널리 사용됨

 

3. 고가용성 클러스터(High Availability Cluster)

  • 부하 분산 클러스터와 혼합하여 주 노드(Primary Node)가 부하 분산 처리를 수행하고 부 노드(Backup Node)가 주 노드의 상태를 체크하고 있다가 이상이 발견되면 서비스를 이어 받아 서비스를 지속 가능하게 하는 서버 구축 방법
  • 이중화 기술이라고도 하며 시스템의 다운으로 인한 장애 시간을 제로로 만드는 것을 궁극적 목표로 함

 

 

 


PDF 파일을 원하시는 분은 댓글에 메일 남겨주세요!