Linux Master

[Rocky Linux8로 리눅스 마스터 1급 정복하기] Part 01. 리눅스 실무의 이해 (Ch01. 리눅스의 개요)

유자바 2025. 1. 17. 19:44

 

Chapter01. 리눅스의 개요

 

1.1 운영체제의 개요

 

운영체제(OS; Operating System)란?

컴퓨터 HW와 컴퓨터 사용자 간의 매개체 역할을 하는 시스템 SW로 사용자가 프로그램을 실행할 수 있는 환경을 제공
- 좁은 의미: HW와 SW 간의 다리 역할을 하는 커널(Kernel)
- 넓은 의미: 커널, 미들웨어, SW 실행 환경과 사용자 인터페이스 프레임워크를 모두 포괄

 


1.1.1 운영체제의 이해

운영체제의 주요 역할

 컴퓨터의 하드웨어 제어

 작업의 순서를 정하고, 입출력 연산 제어

 프로그램의 실행을 제어하고, 데이터와 파일의 저장을 관리

 사용자들 간의 하드웨어 자원을 공유하도록 도움

 시스템 자원을 스케줄링해 효율적으로 활용할 수 있게 도움

 입출력을 쉽게 하는 기능 제공

 응용 프로그램의 작성과 실행을 편리하게 도움

 오류 발생을 막고, 복구를 지원

 데이터의 조직화, 네트워크 통신 처리 기능 수행

 편리한 사용자 인터페이스 제공

 

최근 운영체제의 주요 특징

다중 사용자 시스템 (Multi-User System)

다중 작업 시스템 (Multi-Tasking System)

강력한 네트워크 지원

편리한 사용자 인터페이스 제공

계층적 파일 시스템 운영

가상 메모리 지원

고성능의 프로세서에 최적화

개방형 운영체제화

뛰어난 이식성 지원

가상화 기술 지원

 


1.1.2 운영체제의 종류

 

주요 서버 및 데스크톱 운영체제

유닉스 (UNIX)

윈도우 (Windows)

macOS

 

리눅스 기반 모바일 운영체제

구글의 안드로이드(Android)

바다(Bada) OS

마에모(Maemo)

모블린 (Moblin)

미고 (MeeGo)

리모 (Limo)

타이젠 (Tizen)

 

스마트TV 운영체제

애플: MacOS 기반의 iOS

구글: 리눅스 기반의 안드로이드

삼성: 리눅스 기반 바다OS, 타이젠

LG: 리눅스 기반의 넷캐스트 OS, webOS

 

IVI(In-Vehicle Infotainment)

MS의 Windows Enbedded Automotive

QNX

③ GENIVI

안드로이드

MeeGo/TIzen IVI

 

웹 운영체제

크롬 OS

 


1.2 리눅스 기초

 

1.2.1 리눅스의 철학

리눅스 등장에 영향을 준 요소와 관련 용어

GNU: 유닉스와 호환되면서 더 강력한 OS를 만들고자 한 프로젝트

FSF (Free Software Foundation): 리처드 스톨먼이 설립한 자유 소프트웨어 재단

GNU GPL (General Public License): GNU 정신에 입각해 자유 SW를 보호하며 카피레프트를 담보할 수 있는 법률적 허가권

커널 (Kernel): OS의 핵심으로 시스템 HW 제어, 자원 활용도를 높이기 위한 스케줄링과 실행 중인 프로그램 관리, 자료 관리 등을 수행

 

리눅스와 GNU/Linux

- GNU 시스템과 리눅스를 결합함으로써 하나의 완성된 자유 OS를 만듦

- 리눅스를 시스템 커널로 채용한 GNU 시스템을 GNU/Linux라 부름

 

리눅스와 주요 라이선스

GPL (General Public License): 리눅스는 GNU 프로젝트와 연계하여 발전했기에 FSF의 GPL을 따름

GNU GPL의 다섯 가지 의무
1) 컴퓨터 프로그램은 어떠한 목적으로든지 사용할 수 있다. 다만 법으로 제한한 행위는 할 수 없다.
2) 컴퓨터 프로그램의 실행 복사본은 언제나 프로그램의 소스 코드와 함께 판매하거나 소스 코드를 무료로 배포해야 한다.
3) 컴퓨터 프로그램의 소스 코드를 용도에 따라 변경할 수 있다.
4) 변경된 컴퓨터 프로그램 역시 프로그램의 소스 코드를 반드시 공개 배포해야 한다.
5) 변경된 컴퓨터 프로그램 역시 반드시 똑같은 라이선스인 GPL 라이선스를 적용해야 한다.

LGPL (Library/Lesser General Public License)

     - GPL 라이선스의 강력한 카피레프트 조건과 단순한 사용 허가를 위한 절충안

     - GPL은 자유 소프트웨어를 만들 때만 사용해야 함 But, LGPL은 독점 소프트웨어에도 사용 가능

     - 따라서 LGPL을 사용해서 개발한 뒤 GPL 라이선스로 변경 가능하지만, GPL을 LGPL로 임의 변경이 불가능 

BSD (Berkeley Software Distribution) 라이선스

     - 공개 소프트웨어 라이선스로 해당 소프트웨어를 누구나 개작 가능하고, 수정한 것을 제한 없이 배포 가능

     - 다만, 수정본의 재배포는 의무가 아니기 때문에 2차 파생물에 대한 원시 코드의 비공개를 허용

     - 즉, BSD 라이선스를 갖는 프로그램은 소스 코드를 공개하지 않는 상용 소프트웨어에서도 사용 가능

아파치 (Apache) 라이선스

     - 아파치 라이선스 버전 2.0에 따르면 누구든 자유롭게 아파치 소프트웨어를 다운 받아 상업적 목적으로 이용 가능

     - 재배포 시 소스 코드 도는 수정한 소스 코드를 포함해 반드시 공개하지 않아도 됨

     - 다만, 재배포할 경우 아파치 라이선스 2.0을 포함하고 아파치 소프트웨어 재단에서 개발된 소프트웨어임을 명확히 해야 함

     - 대표적으로 Apache HTTP Server, Hadoop, Hbase, Tomcat 등이 있음

MPL(Mozilla Public License) 라이선스

     - BSD와 GPL 라이선스의 혼합적 성격

     - MPL 소스 코드 수정 시 코드 공개는 필수

     - but, MPL 소스 코드와 다른 코드를 결합해 만든 프로그램이라면 MPL이 아닌 코드는 공개하지 않아도 됨

     - Firefox, Mozilla Application suite, Mozilla Thunderbird 등에 적용되어 있음

     - 썬마이크로시스템즈의 라이선스인 CDDL 탄생에 영향을 줌

MIT 라이선스

     - BSD 라이선스를 기초로 작성해 기본 조건은 BSD와 유사

     - 라이선스와 저작권 관련 명시를 지키면 됨

     - 소프트웨어를 누구나 개작할 수 있고, 수정본의 재배포 시 소스 코드 비공개가 가능

     - X Window System, JQuery, Node.js, Ruby on Rails 등이 해당 라이선스가 적용되어 있음

라이선스 무료 이용 배포 소스 코드 취득 및 수정 2차적 저작물 
소스 코드 공개
독점 소프트웨어와
결합
GPL 무료 허용 가능 공개 불가능
LGPL 무료 허용 가능 공개 가능
BSD 무료 허용 가능 비공개 가능 가능
Apache 무료 허용 가능 비공개 가능 가능
MPL 무료 허용 가능 공개 가능
MIT 무료 허용 가능 비공개 가능 가능

 


1.2.2 리눅스의 역사

리눅스의 탄생과 역사

[1987] 미닉스(교육용 유닉스) 개발 > [1991.09.17] 포직스(POSIX)에 호환되는 운영체제 커널인 리눅스 버전 0.01을 공개 > 리눅스를 GNU 프로그램에 적용시키는 작업 수행 > [1994] 리눅스 커널 버전 0.1 발표 > [1996] 리눅스 커널 버전 2.0 발표 > [1999] redhat에서 리눅스 커널 버전 2.2 기반의 서버를 제작 판매하면서 서버 시장에 리눅스가 진출 > 현재는 다양한 분야로 영역을 넓혀가고 있음

 

리눅스 배포판

 리눅스 배포판의 개요

     - 초기 리눅스 == 커널

     - 리눅스 커널과 GNU 프로젝트의 라이브러리와 도구들이 포함되면서 하나의 운영체제로 발전 > 이 OS를 GNU/Linux라 부름

     - GNU 정신을 바탕으로 만들어진 리눅스는 누구나 패키징해 자유로운 배포가 가능해 다양한 배포판이 존재

② 최초의 리눅스 배포판

     - 소프트랜딩 리눅스 시스템(SLS)이 최초의 리눅스 배포판

     - 리눅스 커널, GNU의 프로그램, 기본적인 유틸리티, X 윈도 시스템 등을 포함해 하나의 운영체제로 완성

     - 하지만 버그가 있었고, 이는 다른 리눅스 배포판의 등장을 알림

     - 슬랙웨어, Yggdrasil Linux, 데비안 프로젝트가 등장하며 SLS은 다른 리눅스 배포판에 의해 대체됨

 리눅스 배포판의 분류

     - SLS의 문제: 버그 | 패키지 관리

     - 패키지 관리 기법에 따라 3가지로 분류됨

        - 슬랙웨어

           - SW를 최상단에서 수정해 배포하는 형식, 내장 프로그램을 유저가 사용하기 편하지만 새로운 패키지 적용 및 수정은 힘듦

           - SuSE, Porteus, VectorLinux, Salix OS 등이 포함

        - 데비안

           - dpkg 및 apt라는 독자적 패키지 관리 도구 사용

           - Knoppix, Corel, Lindows, Ubuntu, Linux Mint, Elementary OS 등이 포함

           - 정보 보안 테스트를 위한 백트랙과 칼리도 이 계열에 속함

        - 레드햇

           - rpm, dnf(구 yum)라는 패키지 관리 도구 제공

           - RHEL, CentOS, Fedora, Oracle Linux, Scientific Linux, Rocky Linux, Mandriva Linux, Mandrake 등이 포함

④ 새로운 계파의 리더

     - 특정 계파의 리더 역할을 수행하는 배포판은 수세와 우분투

        - 수세

           - 슬랙웨어를 그대로 가져다 언어만 수정해 배포하는 형식이라 패키지 관리에 문제가 있었음

           - 이를 보완하기 위해 YaST, ZYpp라는 독자적 패키지 관리 도구 사용

           - SUSE Linux Enterprise, Open SUSE, Gecko Linux, Linkat 등이 포함

        - 우분투

           - 데비안의 패키지 관리 기법인 dpkg, apt를 그대로 사용해 X윈도의 기반이 되는 데스크톱 환경과 관련이 있음

           - 우분투는 유저의 편의성에 초점이 맞춰져 있어 초기 버전은 GNOME 기반 유니티를 제공

⑤ 주요 리눅스 배포판의 특징

     - 슬랙웨어

        - 내장된 SW 패키지들은 최상단에서 최대한 수정되어 배포

        - 최신 리눅스 배포판과 다르게 그래픽 기반 설치 절차가 없고, 패키지 의존성도 자동으로 해결하지 않음

        - 모든 설정이나 관리를 편집기를 통해 텍스트 파일을 직접 수정해야 하므로 리눅스에 숙달된 사용자를 위한 리눅스

     - 데비안

        - GNU GPL 라이선스 기반이고, 다양한 커널의 버전이 있지만 정식 지원되는 버전은 GNU/Linux 뿐임

        - 데비안은 슬랙웨어와 달리 패키지 관리가 편함

        - 초기에는 dpkg라는 패키지 도구를 사용했고, 최근에는 기능이 더 확장된 apt를 사용

     - 레드햇

        - 쉬운 설치와 독자적 패키지 관리로 인해 가장 인기 있는 리눅스 배포판

        - rpm, yum이라는 패키지 관리 도구를 제공해 손쉽게 설치, 관리, 업그레이드가 가능

        - Red Hat Linux 9까지만 소스 공개를 포함해 무상 배포했고, 현재는 RHEL이라는 유료판을 만들어 배포함

        - 일반 사용자를 위한 fedora를 만들어 자유롭게 사용 가능하도록 함

     - 수세

        - 슬랙웨어 기반의 SuSE Linux가 처음 출시됨

        - 하지만 슬랙웨어의 단점인 패키지 관리 기법을 보완하기 위해 YaST라는 유틸리티를 제공

        - 여러 소유권 변경이 있었고, 현재는 SUSE Linux Enterprise Server15 SP5 버전이 배포되고 있음

     - 우분투

        - 데비안 GNU/Linux를 기반으로 만들어진 운영체제

        - 그놈 데스크톱 환경 기반의 그래픽 셸인 유니티를 사용하는 것이 가장 큰 특징으로, 개인 장치에 가장 인기 있는 리눅스 배포판

        - 가상 서버, 도커같은 컨테이너도 지원하면서 시장을 확대하고 있음

     - 기타 배포판

        - CentOS Stream 비롯하여 Gentoo Linux, Linux Mint, Rocky Linux 등 300가지 이상의 배포판이 존재

     - 국내 리눅스 배포판

        - 한컴에서는 한컴 구름 OS를 배포하고 있음

 

💡 RHEL 복제판과 Rocky Linux

① 레드햇의 초기 리눅스 운영체제(RHL, RHEL, CentOS)
    레드햇은 초기 무료 리눅스 운영체제인 RHL을 출시해 왔지만, RHL를 단종시키고 2002년 상업화 버전은 RHEL을 선보이기 시작했다. 이로 인해 많은 반발에 부딪히고, RHL의 단종과 함께 Fedora라는 무료 리눅스 운영체제를 선보였다. 하지만 Fedora는 RHEL에 올라갈 프로그램을 미리 검증하는 용도로 쓰여 안정성이 검증되지 않는 프로그램이 탑재되는 문제가 발생했다. 이러한 이유로 RHEL의 복제판이 탄생되었고, RHEL에 GNU GPL 라이선스가 적용되어 소스가 모두 공개되었다. 이러한 특징으로 인해 CentOS 프로젝트가 시작되었다.

② 레드햇과 CentOS의 관계 및 Rock Linux 등장 배경
    CentOS는 RHEL 2.1 AS 버전에서 분기되면서 시작되었다. 2014년 레드햇이 이 프로젝트에 합류했고, 2018년 IBM이 레드햇을 인수했다. 2020년 레드햇은 CentOS 개발을 종료하고, CentOS Stream으로 배포한다고 선언했다. CentOS Stream은 RHEL의 테스트 버전으로 Fedora - RHEL - CentOS Stream 순서의 배포판 개발 단계를 완성했다. CentOS가 원래 취지와 다르게 이용되자 CentOS 설립자는 Rocky Linux 프로젝트를 시작했고, RHEL의 복제판에는 Oracle Linux를 비롯해 Rocky Linux, AlmaLinux가 존재하게 되었다.

③ Rocky Linux
    레드햇이 대중에게 RHEL을 제공하지 않아 이에 대한 대응으로 RHEL와 호환되는 Rocky Linux를 개발을 진행했다. 레드햇 계열 리눅스는 레드햇의 입장에 따라 매우 유동적으로 변화할 수 있어 어떤 방향으로 진행되는지 지켜봐야 한다.

 


1.2.3 리눅스의 특징

리눅스의 특징

 다중 사용자 및 다중 처리 시스템

     - 멀티 유저, 각 유저는 멀티태스킹이 가능

 완전히 공개된 시스템

     - 커널뿐 아니라 같이 내장되어 배포되는 대부분의 응용 프로그램이 소스가 공개되어 있음

 뛰어난 네트워크 환경

     - 이더넷, SLIP, PPP, ATM 등 다양한 네트워크 환경 지원

     - TCP/IP, IPX, AppleTalk 등 대부분의 네트워크 프로토콜을 지원

 다양한 파일 시스템 지원

     - 리눅스 고유 파일 시스템인 ext2, ext3, ext4 등을 사용하고, 다른 OS와 달리 다양한 파일 시스템 지원

     - Rocky Linux 8에서는 XFS를 기본 파일 시스템으로 사용

 뛰어난 이식성

     - 약간의 어셈블리와 대부분 C로 작성되어 C언어를 컴파일할 수 있다면 다른 시스템에 쉽게 이식할 수 있음

유연성과 확장성

     - 리눅스 원시 코드에 쉽게 접근 가능하고, 리눅스에서 만들어진 프로그램은 다른 시스템에 쉽게 이식 및 배포가 가능

 뛰어난 안정성과 보안성

     - 리눅스는 커널 소스가 공개되어 있어 windows 같은 폐쇄형 운영체제에 비해 보안상 취약점이 쉽게 노출될 가능성이 있음

     - 하지만 전문 프로그래머들이 상용 운영체제보다 빠르게 오류를 수정하고 보안 패치를 발표하고 있음

 우수한 가격대 성능비

     - 기업 환경 서버로 사용되는 유닉스를 x86 시스템에 최적화하여 효율적인 방식으로 설계해 pc급에서도 엔터프라이즈 급의 성능 발휘

다양한 응용 프로그램의 제공

     - 커널, 셸, 기본 명령어, X Window 시스템, 편집기, 서버 및 클라이언트 프로그램, 개발 및 보안 도구 등 다양한 응용 프로그램을 제공

 다양한 배포판의 존재

     - 국외에는 레드햇, 데비안, 우분투, 수세 등이 있고, 국내는 한컴구름OS, SULinux 등이 있음

 

리눅스의 단점

 기술 지원의 부족

     - 리눅스에서 사용되는 대부분의 응용 프로그램들이 비상업적인 오픈 소스기 때문에 사용하면서 발생하는 문제는 유저가 해결해야 함

 특정 하드웨어에 대한 지원이 부족

     - 리눅스가 다른 운영체제에 비해 이식성, 확장성이 뛰어나지만, 여전히 특정 하드웨어에는 설치가 어렵고 모든 플랫폼에서 작동하는건x

 사용자의 숙련된 기술이 요구

     - x-window 기반 환경이 보편화되면서 초기 텍스트 기반의 명령어 입력은 쉬워졌음

     - but 아직도 중요한 설정은 명령어를 입력하거나 관련 환경 설정 파일을 편집기로 수정해야 함

 

리눅스의 기술적인 특징

 계층적 파일 구조

     - 리눅스 파일 구조는 /(root)를 기준으로 하위 디렉터리에 usr, var, home 등이 존재, usr 디렉터리 및에 local, src 등이 존재

     - 이런 구조를 계층적 파일 구조라 하고, 트리 구조라고도 함

 장치의 파일화

     - HDD, 키보드, 프린터, 화면 출력 장치 등 시스템에 설치된 여러 가지 하드웨어적 자원을 장치라 함

     - 이런 장치들을 모두 파일화하여 사용해 특정 HW에 명령을 수행하려면 해당 장치 파일에 명령을 내려야 함

     - ex) eject /dev/cdrom

 가상 메모리 사용

     - 하드디스크의 일부를 메모리처럼 사용

     - 메모리 공간이 작으면 큰 프로그램은 실행시킬 수 없고, 이런 문제를 극복하기 위해 사용되는 것이 가상 메모리이고, '스왑'이라 함

💡 스와핑 (swapping)
    : 메모리에 프로그램들이 많이 올라가 있어 공간이 꽉 차도 가상 메모리 설정하면 추가로 새로운 프로그램을 실행시킬 수 있다. 이것이 가능한 이유는 메모리에 올라와 있지만 사용하지 않는 프로그램을 하드 디스크에 설정된 가상 메모리 공간으로 보내고, 빈 공간에 새로운 프로그램을 로딩하기 때문이다. 또한 가상 메모리에 있는 내용을 사용하려면 다시 메모리로 올리고, 그 대신 메모리에 있던 다른 내용이 하드 디스크에 저장된다. 이처럼 메모리와 하드 디스크 사이 데이터 교환을 스와핑이라 한다.

- 스왑의 확인
   : 설치 후 스왑 용량의 확인은 free 명령어로 할 수 있고, 기본 블록 단위로 출력되므로 -h 옵션을 사용해 용량 단위로 확인 가능

 동적 라이브러리 지원

     - 루틴: 프로그램에서 특정한 기능을 수행

     - 라이브러리: 루틴을 모아놓은 것

     - 프로그램 개발 시 라이브러리 중에서 필요한 루틴들만 받아 링크시킴

        - 이렇게 하면 같은 기능을 하는 루틴들이 실행 파일마다 들어가 실행 파일의 크기가 커지고 메모리도 남는 문제가 발생

     - 그래서 같은 루틴을 공유하는 공유 라이브러리를 지원

        - 정적 라이브러리는 컴파일할 때 필요한 라이브러리를 프로그램에 넣음

        - but, 동적 공유 라이브러리는 실행 파일 내부에 넣어두지 않고 프로그램을 실행할 때 가져다 사용해 메모리 효율성이 높음

 가상 콘솔

     - 가상 콘솔: 하나의 모니터를 장착한 시스템에 여러 개의 가상 화면을 제공해 사용하게 하는 기능

     - 기본적으로 리눅스는 6개의 가장 콘솔을 제공

 파이프

     - 프로세스의 통신을 위해 도입한 것으로, '|' 기호를 사용

     - ex) ls | sort | more : ls 명령의 출력물은 sort를 통해 정렬되고, 다시 more을 통해 한 화면씩 출력됨

 리다이렉션

     - 어떤 프로세스의 입출력을 표준 입출력이 아닌 다른 입출력으로 변경할 때 사용

     - 종류

        - >: 프로세스 출력을 표준에서 다른 출력으로 변경

        - >>: 프로세스 출력을 지정한 출력에 추가

        - <: 프로세스 입력을 표준 입력에서 다른 입력으로 변경

        - <<: 기호 뒤에 지정한 문자열이 입력으로 들어올 때까지 대기, 입력으로 들어오면 해당 문자열이 나오기 전까지 대기하던 표준 입력을 출력으로 보냄

 

리눅스 활용 분야

리눅스 동향

 리눅스 클러스터링

     - 고계산용 클러스터

     - 부하분산 클러스터

     - 고가용성 클러스터

임베디드 시스템

 클라우드 컴퓨팅

     - 클라우드 컴퓨팅의 정의

     - 클라우드 컴퓨팅에서 제공하는 서비스

 클라우드와 온프레미스

     - 클라우드 컴퓨팅

     - 온프레미스

     - 클라우드 서비스 모델

     - 온프레미스 vs 클라우드 서비스 모델 비교

     - 클라우드 배치 모델

 빅데이터

     - 빅데이터의 정의

     - 빅데이터의 관련 기술

 사물인터넷

     - 사물인터넷의 정의

     - 사물인터넷 플랫폼