박봉달의 개발생활

[리눅스마스터 1급:#4] 리눅스의 기초 본문

Qualification/리눅스 마스터 1급

[리눅스마스터 1급:#4] 리눅스의 기초

박봉달 2020. 12. 29. 15:36
728x90

안녕하세요

박봉달입니다!

오늘은 리눅스 마스터 1급 공부 셋째날의 기록을 남겨보도록 하겠습니다.

서적은 이기적 리눅스마스터 1급 이론서+기출문제를 기본으로 하고 있습니다.


1. 리눅스 개요

▶ 리눅스의 정의 및 의의

1) 리눅스의 정의

- 1991년 리눅스 토발즈에 의해 오픈소스로 개발되었고 개인용 컴퓨터, 서버, 메인 프레임, 모바일 기기, 임베디드 기기를 위한 유닉스 호환 운영체제이다

2) 리눅스의 의미

- 개발 당시엔 지금과 같은 파일 관리, 네트워크 관리, X Windows, 개발자 도구 등의 패키지를 포함하는 운영체제의 형태는 아니었고, 단지 리눅스 커널만을 의미했다

- 현재는 FSF(Free Software Foundation)가 GNU 프로젝트를 통해 리눅스 커널 기반으로 다양한 라이브러리와 어플리케이션이 포함된 배포판을 제공하고 있으며 이를 GNU/Linux라 부른다

▶ 리눅스의 일반적 특징

1) 이식성

- 대부분의 코드가 C언어로 작성되어있고, 최소한의 플랫폼에 종속적인 부분만 어셈블리언어로 작성되어있어 다양한 하드웨어에 쉽게 이식 가능

- 처음엔 인텔 x86 CPU를 기본 지원 하였으나, 최근에는 어떤 운영체제보다 다양한 CPU아키텍처에 적용되고 있다

2) 자유 소프트웨어

- 리눅스는 전 세계 개발자들의 기여를 통해 진화하고 있다

- 리눅스의 소스코드는 자유롭게 사용, 수정, 배포 가능하다. 단, 수정된 프로그램의 실행 복사본은 언제는 소스코드와 함께 배포되어야 한다

- 리눅스의 소프트웨어들은 상당수 GPL(General Purpose License)이나 LGPL(Library/Lesser General Purpose License) 라이선스를 따른다

3) 멀티 유저

- 다수의 사용자가 네트워크를 통해 CPU, 메모리, 저장소 등 자원에 접근 가능

4) 멀티 프로그래밍

- 다수의 프로그램을 메모리에 적재하고 실행 가능

5) 계층적 파일 시스템 (Hierarchical File System)

- 리눅스는 시스템과 사용자를 위한 표준화된 디렉터리 구조를 정의한다

- 장치 관련은 /dev, 사용자 파일은 /usr 이하에 위치

 

6) 셸(Shell)

- 다양한 기능 수행을 위한 명령어 기반 프로그램 제공. 사용자는 프로그램 통해 커널에게 명령 내리고 셸은 명령어를 해석하여 프로그램 실행함

- 셸은 명령어 해석 기능과 프로그래밍 기능 그리고 사용자 환경 설정 기능을 제공한다.

7) 보안

- 유닉스의 보안 모델을 이어받아 임의접근제어(Discretionary Access Control)를 제공하고 이를 향상한 확장 임의접근제어(Extended DAC)를 제공

- 리눅스는 네트워크 정책에 따라 노드나 라우터로 동작 가능하며 트래픽을 서버로 안전하게 전달 가능하다. 이를 위해 netfilter, iptables, ebtables, arptables 등 모듈 제공한다

- 네트워크 스택은 IPSec을 사용하여 IP통신시 안전하게 데이터 통신 가능

- 강제접근제어(Mandatory Access Control)를 강화한 SELinux(Security Enhanced Linux)가 존재한다

▶ 리눅스의 기술적 특징

1) 모놀리딕 커널 (monolithic kernel)

- 파일 시스템, 프로세스 간 통신, 입출력 기능, 장치 관리, 프로세스 처리기 등 운영체제가 제공하는 서비스를 하나의 커널로 구현하여 제공하는 방식

- 단일 커널로 운영체제의 기능 제고되기에 일부 기능 변경하려면 커널을 다시 컴파일해야하는 수고가 발생

- 리눅스는 기본적으로 모놀리딕 커널이긴 하지만 동적 로드가 가능한 커널 모듈과 동적 설정을 위한 프로퍼티 기능 제공 통해 유연성 확보

2) 장치의 파일화

- 시스템의 자원을 파일로 다룬다. 파일은 디렉터리, 일반 파일, 특수파일로 나눌수 있고 특수파일은 다시 장치 파일, 파이프, 소켓 등으로 나눈다

- 장치 유형에 따라 문자 장치 파일과 블록 장치 파일 제공

- 프로세스 간 통신 위해 파이프 파일 제공

- 응용 프로그램이 소켓 프로그램이 가능하도록 소켓 파일 제공

3) 다양한 파일 시스템의 지원

- 리눅스는 ext2, ext3, ext4 같은 리눅스 자체 파일 시스템을 제공

- 리눅스는 FAT32, NTFS 같은 윈도우용 파일시스템도 제공 네트워크 파일 시스템인 SMB, CIFS같은 파일시스템 지원

- 시스템 충돌 및 전원 문제로 복구 가능한 저널링 파일 시스템 지원

4) 가상 메모리

- 물리적인 메모리의 크기를 극복하기위한 기법

- 프로세스들이 접근하는 메모리를 가상 메모리에 매핑하고 가상메모리는 페이지를 통해 물리 메모리에 매핑한다.

- 동작중인 프로세스가 사용하는 메모리만을 물리 메모리에 로드하며, 사용빈도가 낮은 메모리는 디스크에 저장, 이를 요구 페이징(Demand Paging)이라고 한다.

- 이러한 가상 메모리는 넓은 주소 공간과 각 페이지에 대한 보호 메커니즘, 이미지와 데이터 파일을 프로세스의 주소 공간에 매핑하는 메모리 매핑, 프로세스 간 공유 메모리 기능을 제공

5) 스왑

- 물리 메모리 사용량이 가득 차 프로그램을 메모리에 로드할 수 없는 경우, 메모리에 대한 접근 또는 실행 빈도가 낮은 데이터나 프로그램들을 디스크에 옮기고 물리 메모리를 확보하여 프로그램을 메모리에 다시 로드할 수 있다. 디스크로 옮기는 동작을 스왑 아웃이라고 하며 디스크에서 다시 메모리로 옮기는 작업을 스왑 인이라고 한다.

- 이때 디스크상의 공간을 특별히 스왑 공간이라고 부르며 이를 위한 전용 파일이나 전용 파티션이 존재해야한다

- 최대 절전 기능을 사용하기 위해 스왑 파티션이 필요하다. 전원 공급이 사라지면 메모리는 내용이 사라지는 휘발성 특징을 갖기 때문에 비휘발성 디스크에 데이터 저장이 필요하다

- 스왑 빈도를 변경하기 위해선 /etc/sysctl.conf의 vm.swapiness를 설정한다. 10으로 설정하면 가용량이 10%일때 스왑을 시도할 것이다.

- free 명령어로 스왑 영역의 용량 확인 가능. 물론 메모리 상태도 확인 가능

- 물리 메모리의 한계를 극복하고 효율적인 메모리 사용 장점이 있지만, 동적으로 스왑의 크기를 조절할 수 없어 하드디스크의 용량 차지가 있다

6) 동적 라이브러리와 정적 라이브러리

- 동적 라이브러리를 메모리에 한번 적재하고 나면 여러 프로세스가 매번 동일한 라이브러리를 로드할 필요 없이 공용으로 라이브러리를 사용할 수 있다.

- 정적 라이브러리는 실행 프로그램이 컴파일될 때 링크되어 프로세스가 실행될 때 정적 라이브러리도 함께 메모리에 로드된다. 정적 라이브러리를 이용하는 프로세스를 메모리에 적재할 때마다 정적 라이브러리는 매번 메모리에 중복으로 상주하게된다.

- 동적 라이브러리는 메모리 실행 프로그램의 크기가 작고 메모리를 효율적으로 사용할수 있는 반면 실행속도가 느리고 배포에 제약이 존재

- 정적 라이브러리는 실행속도가 빠르고 배포에 제약이 없으나 실행 파일의 크기가 상대적으로 크다.

7) 파이프

- 프로세스의 표준 출력을 다른 프로세스의 표준 입력으로 보낼 수 있는 프로세스 간 통신 방식이다

- 터미널에서 사용할 수 있느 파이프 기호는 '|'이다

8) 리다이렉션

- 프로세스의 표준 입출력을 파일, 화면, 장치 등에서 입력을 받거나 출력할 수 있도록 입출력을 재지정할 수 있는 매커니즘이다.

9) 가상 콘솔

- 하나의 화면에서 여러개의 콘솔을 사용할 수 있는 기능 제공. 이 콘솔은 텍스트 기반 터미널 일 수도 있고 X윈도우와 같은 그래픽 화면일 수 있다

- 리눅스는 총 6개의 콘솔을 제공하고 Ctrl + Alt + F1~F6을 통해 콘솔을 생성할 수 있다

- 콘솔간 전환을 위해선 Alt+각 펑션키를 눌러 빠르게 이동 가능하다.

▶ 리눅스의 장단점

1) 리눅스의 장점

- 오픈소스이기 때문에 상용 운영체제 대비 라이선스 비용이 들지 않아 경제적이다

- 오픈소스 정신을 지지하는 개발자들이 공개된 리눅스 커널 소스를 수정하고 개량함으로써 운영체제를 더욱 안정적으로 개선하고 보안성을 강화하고 있다

- 리눅스는 이더넷, SLIP, PPP등의 다양한 네트워크 환경을 지원하며 TCP/IP, IPX 등의 네트워크 프로토콜도 지원한다

- 리눅스는 서버, 개발용, PC등 다양한 목적으로 사용할 수 있고, 이에 따른 다양한 배포판이 존재한다. 또한 임베디드 리눅스와 같이 특정 하드웨어에 맞게 커널의 기능을 더하거나 덜어내어 제품에 맞게 커스터마이징도 가능하다

2) 리눅스의 단점

- 여러 사용자의 이슈를 해결해줄 수 있는 체계적인 기술지원 네트워크가 없다

- 오픈소스 소프트웨어가 풍부하게 있지만 마이크로소프트 오피스와 같은 리눅스용 상용 소프트웨어가 부족한 것은 사실이다

- 최신 기기에 대해 드라이버 지원이 느리다.


2. 리눅스와 GNU

▶ 리눅스의 장단점

1) GNU GPL 라이선스를 갖는 리눅스

- 리눅스는 유닉스의 주요 아키텍처에서 아이디어를 얻고 유닉스의 POSIX 표준을 따르고 있으나 자유 소프트웨어 구현을 위해 유닉스 소스코드를 일체 사용하지 않고 모든 소스를 새롭게 작성했다

- 리눅스는 GNU GPL 라이선스를 갖는다

- GNU GPL에 따라 배포되는 소프트웨어를 특히 자유 소프트웨어라고 한다.

- GNU GPL에 따라 리눅스를 자유롭게 복제, 개작, 배포할 수 있지만 GPL 라이선스를 갖는 코드를 가져다쓰는 경우 해당 소프트웨어도 GPL 라이선스를 갖는 코드를 가져다쓰는 경우 해당 소프트웨어도 GPL 라이선스로 배포되어야한다는 제약이 있다

2) GNU(GNU's not Unix)

- GNU는 재귀적 약어로써 GNU는 유닉스가 아니다 라는 뜻을 갖는다

- GNU는 유닉스와 호환된다는 의미와 그렇지만 다른 운영체제라는 이중적 의미를 갖고있다

3) 자유소프트웨어의 정의

- 자유 소프트웨어는 4가지 종류의 자유를 내포한다

자유 0) 프로그램을 어떠한 목적을 위해서라도 실행할 수 있는 자유

자유 1) 프로그램의 작동 원리를 연구하고 이를 자신의 필요에 맞게 변경시킬 수 있는 자유

자유 2) 이웃을 돕기 위해서 프로그램을 복제 및 배포할 수 있는 자유

자유 3) 프로그램을 향상하고 이를 공동체 전체의 이익을 위해 다시 환원할수 있는 자유

- 소스코드 없이 자유1과 자유 3을 지키는 것은 비현실적이기 때문에 소스코드의 제공이 필요하다

4) 카피레프트

- 카피레프트는 저작권을 뜻하는 카피라이트의 반대 의미를 갖는다

- 자유 소프트웨어를 사용자가 자유롭게 사용할 수 있도록 법률적 보장을 위해 만들어진 개념이 카피레프트이다

- 카피레프트를 실제 구현한 라이선스가 GNU GPL 라이선스이다

▶ 오픈소스

1) 오픈소스

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

- 오픈소스 소프트웨어를 장려하기위해 1998년 설립되었다

- 오픈소스 자유 소프트웨어는 전체적으로 비슷한 맥락을 가지고 있다

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

1) GPL (General Public License)

- GPL은 GNU 프로젝트로 배포된 프로그램의 라이선스로 이용하기위해 자유 소프트웨어 재단에서 만든 자유 소프트웨어 라이선스로 소프트웨어의 실행, 연구, 공유, 수정의 자유를 사용자에게 보장한다

- GPL은 가장 널리 알려진 카피 레프트를 구현한 라이선스이다

- GPL은 총 3가지 버전이 존재한다

GPL 버전

발표일

주요 내용

GPLv1

1989년 1월

- 바이너리 형태의 프로그램을 GPLv1로 배포시에는 사람이 이해 가능한 소스코드를 함께 배포해야한다는 조건

- GPLv1 프로그램을 수정한 프로그램도 원래 프로그램과 마찬가지로 라이선스를 가져야함

GPLv2

1991년 6월

특정 이유로 GPL 프로그램 배포 시 소스코드 공개를 불허하려 한다면 프로그램 바이너리 공개도 하지 못하도록 라이선스 보완

GPLv3

2007년 6월

주요 변경사항은 소프트웨어 특허에 대한 대처, 다른 라이선스와의 호환성, 원시코드 구성법, 디지털권리관리 관련 내용 추가

2) LGPL(Library/Lesser General Public License) 라이선스

- GNU GPL 라이선스의 강력한 카피레프트 조건과 BSD 라이선스의 사용허가서나 MIT 라이선스의 단순 사용허가를 절충하여 만든 자유 소프트웨어 재단의 자유 소프트웨어 라이선스이다

- LGPL은 프로그램 자체에 카피레프트를 적용하나 이 프로그램을 이용하는 프로그램에게는 카피레프트를 적용하지 않는다

- LGPL 프로그램을 응용 프로그램에 정적 혹은 동적으로 링크하는 경우 해당 응용 프로그램은 소스코드를 공개할 필요가 없다

- LGPL 프로그램의 소스코드를 수정하였다면 2차적 파생 저작물에 해당하므로 수정한 LGPL 프로그램의 소스코드도 제공해야한다

- LGPL 프로그램의 소스코드를 수정하여 개발하고 GPL 라이선스로 변경하는 것은 가능하나 반대는 불가하다

3) BSD(Berkley Software Distribution) 라이선스

- 수정본의 재배포는 의무사항이 아니며 따라서 2차적 파생물에 대한 원시 소스코드 비공개가 가능하다

조항

조항 세부 설명

일반 조항

-BSD 라이선스가 적용된 프로그램을 사용하는 경우 해당 저작권자의 이름과 BSD라이선스의 내용을 같이 배포해야한다

- BSD라이선스가 적용된 프로그램으로 인해 발생한 법률상/도의상 피해에 대해 그 책임을 저작권자에게 물을 수 없다

3조항 이상

저작권자의 이름을 광고에 사용할 수 없다

4조항 이상

광고에서 BSD 소프트웨어를 사용, 포함된 경우 저작권자를 표기해야한다

4) 아파치 라이선스

- 아파치 소프트웨어 재단에서 만든 소프트웨어 라이선스이다

- 누구나 아파치 라이선스가 적용된 소프트웨어에서 파생된 프로그램을 제작할 수 있고 저작권을 양도, 전송 가능

5) MPL 라이선스

- BSD라이선스와 GPL 라이선스의 혼합적인 성격을 가지고 있다

- 모질라 파이어폭스, 선더버드 및 소프트웨어에 적용되었다

6) MIT 라이선스

- GNU GPL 라이선스 엄격함을 피할 수 있어 사용자에게 인기가 있다

라이선스

필수사항

허락조건

금지조건

GPL

- 수정한 소스코드 혹은 GPL 소스코드를 활용한 소프트웨어 모두 GPL로 공개

- 라이선스 및 저작권 명시

- 변경사항 안내

- 상업적 이용 가능

- 배포 가능

- 수정 가능

- 특허신청 가능

- 사적 이용 가능

- 보증 책임 없음

- 2차 라이선스

LGPL

- 수정한 소스코드 LGPL로 공개

- 라이선스 및 저작권 명시

- 상업적 이용 가능

- 배포 가능

- 수정 가능

- 특허신청 가능

- 사적 이용 가능

- 2차 라이선스

- 보증 책임 없음

BSD

라이선스 및 저작권 명시

- 상업적 이용 가능

- 배포 가능

- 수정 가능

- 사적 이용 가능

- 2차 라이선스

- 보증 책임 없음

Apache

- 라이선스 및 저작권 명시

- 변경사항 안내

- 상업적 이용 가능

- 배포 가능

- 수정 가능

- 특허신청 가능

- 사적 이용 가능

- 2차 라이선스

- 보증 책임 없음

- 상표권 침해 금지

MPL

- 수정한 소스코드 MPL로 공개

- 라이선스 및 저작권 명시

- 상업적 이용 가능

- 배포 가능

- 수정 가능

- 특허신청 가능

- 사적 이용 가능

- 2차 라이선스

- 보증 책임 없음

- 상표권 침해 금지

MIT

라이선스 및 저작권 명시

- 상업적 이용 가능

- 배포 가능

- 수정 가능

- 사적 이용 가능

- 2차 라이선스

- 보증 책임 없음


오늘은 리눅스 운영체제의 특징에 대해 알아보았습니다.

리눅스 마스터 1급 공부 셋째날의 포스트를 이것으로 마치고,

내일 다시 돌아오도록 하겠습니다!

읽어주셔서 감사합니다!

좋은 정보 가지고 계신 분이 계시다면

댓글 부탁드려요 :)

728x90
반응형