박봉달의 개발생활
[리눅스마스터 1급:#4] 리눅스의 기초 본문
안녕하세요
박봉달입니다!
오늘은 리눅스 마스터 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급 공부 셋째날의 포스트를 이것으로 마치고,
내일 다시 돌아오도록 하겠습니다!
읽어주셔서 감사합니다!
좋은 정보 가지고 계신 분이 계시다면
댓글 부탁드려요 :)
'Qualification > 리눅스 마스터 1급' 카테고리의 다른 글
[리눅스마스터 1급:#6] 리눅스의 기초 : 개념 정리 (0) | 2021.01.02 |
---|---|
[리눅스마스터 1급:#5] 리눅스 클러스터와 배포판 버전 (CentOS, Ubuntu 등) (0) | 2020.12.31 |
[리눅스마스터 1급:#3] 운영체제의 사례 (0) | 2020.12.29 |
[리눅스마스터 1급:#2] 리눅스의 개요 : 운영체제 (0) | 2020.12.28 |
[리눅스마스터 1급:#1] 2021년 리눅스 마스터 시험일정, 방향 설정 및 공부 계획 (0) | 2020.12.27 |