1. 리눅스 개요
[1] 리눅스의 정의 및 의미
1) 리눅스의 정의
1991년 리누스 토발즈에의해 오픈소스로 개발, 개인용 컴퓨터, 서버, 메인프레임, 모방리긱, 임베디드 기기를 위한 유닉스 호환 운영체제
2) 리눅스의 의미
- 처음에는 지금과 같은 다양한 패키지를 포함X 단순 리눅스 커널만을 의미
- 나중에 FSF(Free Software Foundation)가 GNU프로젝트를 통해 리눅스 커널 기반으로 다양한 라이브러리와 애플리케이션이 포함된 리눅스 배포판을 제공
[2] 리눅스의 일반적 특징
1) 이식성
- 대부분 코드가 c언어로 작성 -> 다양한 하드웨어에 쉽게 이식 가능
2) 자유 소프트웨어(Free Software)
- 전세계 개발자들의 기여를 통해 진화
- 리눅스 소스코드는 자유롭게 사용,수정,배포가능
- 단, 수정된 프로그램의 실행복사본은 언제나 소스코드와 함께 배포되어야함
- 리눅스 SW들은 상당수 GPL(General Purpose License)이나 LGPL(Library/Lesser General Purpos License)라이선스를 따름
3) 멀티유저
- 다수의 사용자가 네트워크를 통해 자원접근가능
4) 멀티프로그래밍
- 다수의 프로그램을 메모리에 적재,동시실행가능
5)계층적 파일 시스템
- 표준화된 디렉터리구조를 정의
6) 셸(Shell)
- 리눅스의 다양한 기능을 수행할 수 있도록 명령어 기반 프로그램 제공
- 명령어 해석, 프로그래밍, 사용자 환경설정 기능 제공
7) 보안
- 임의접근제어(Discretionary Access Control), 확장 임의접근제어(Extended DAC)제공
- 네트워크상의 노드나 라우터로 동작할 수 있음
- 트래픽을 서버로 안전하게 전달
- IPSec제공 -> IP통신시 안전하게 데이터 송수신
- 강제접근제어(MAC)을 강화한 SELinux가 존재
[3] 리눅스의 기술적 특징
1) 모놀리딕 커널
- 파일 시스템, 프로세스 간 통신, 입출력 기능, 장치관리, 프로세스 처리기 등 운영체제가 제공하는 서비스를 하나의 커널로 구현하여 제공하는 방식
- 단일 커널로 OS의 기능 제공-> 커널 일부기능 변경 시 커널을 다시 컴파일해야하는 불편함있음
- 리눅스는 기본적으로 모놀리딕 커널이긴 하지만 동적로드가 가능한 커널 모듈과 동적 설정을 위한 프로퍼티 기능제공을 통해 커널의 유연성 확보
2) 장치의 파일화
- 리눅스는 시스템자원 모두 파일로 다룸
- 파일은 디렉터리, 일반파일, 특수파일 로 나눔
- 특수파일은 다시 장치 파일, 파이프, 소켓 등으로 나눔
- 장치의 유형에 따라 문자 장치파일과 블록 장치파일과 같은 장치파일을 제공
- 프로세스간 통신을 위해 파이프 파일을 제공
- 응용 프로그램이 소켓 프로그래밍이 가능하도록 소켓파일 제공
3) 다양한 파일 시스템의 지원
- ext2, ext3, ext4와 같은 리눅스 자체 파일 시스템 제공
- FAT32, NTFS와 같은 윈도우용 파일 시스템도 제공
- 네트워크 파일 시스템인 SMB, CIFS의 파일 시스템도 지원
- 시스템 충돌 및 전원문제로 복구 가능한 저널링 파일시스템 지원
4) 가상메모리
- 물리적인 메모리의 크기를 극복하기위한 메모리관리 기법
- 프로세스들이 접근하는 메모리를 가상 메모리에 매핑하고 가상 메모리는 페이지를 통해 물리 메모리에 매핑
- 동작 중인 메모리만 물리메모리에 로드, 사용빈도 낮은 메모리는 디스크에 저장
- 이를 요구 페이징(Demand Paging)이라고함
5) 스왑(Swap)
- 물리 메모리 사용량이 가득차서 프로그램을 메모리에 로드할 수 없는 경우 메모리에 대한 접근 또는 실행빈도가 낮은 데이터나 프로그램들으 디스크로 옮기고 물리 메모리를 확보하여 프로그램을 메모리에 다시 로드할 수 있다
- 메모리 -> 디스크 = 스왑 아웃
- 디스크 -> 메모리 = 스왑 인
- 디스크상의 공간을 스왑공간이라고 부르며 이를 위한 전용파일이나 전용 파티션이 존재해야함
- 최대 절전 기능을 사용하기 위해 스왑파티션이 필요
- 메모리 데이터는 휘발적 특성이 있기때문에 비휘발성 특성을 갖는 디스크에 데이터를 저장하는것이 필요
- 스왑 빈도를 변경하기 위해서는 /etc/sysctl.conf의 vm.swapiness를 설정
- 만약 10으로 설정한다면 메모리의 가용량이 10%일때 스왑을 시도
- free명령어로 스왑영역의용량확인 가능, 메모리 상태확인도 가능
- 동적으로 스왑의 크기를 조절X -> 하드디스크의 공간을 차지한다는 단점도 있음
6) 동적라이브러리와 정적 라이브러리
- 동적라이브러리를 메모리에 한번 적재하면 여러프로세스가 동일한 라이브러리 공유
- 정적라이브러리는 공유 X, 사용할때마다 여러프로세스가 동일한 라이브러리 중복 적재
- 동적라이브러리는 메모리 효율 좋음, 실행속도 느림, 배포에 제약존재
- 정적라이브러리는 메모리 효율 꽝, 실행속도 빠름, 배포제약 없음, 파일크기 큼
- 로더는 환경변수 LD_LIBRARY_PATH와 환경설정 파일 /etc/ld.so.conf 를 검색하여 동적라이브러리를 로드
- 빠른 동적 라이브러리 경로검색을 위해 /etc/ld.so.cache 파일을 유지하는데 ldconfig 명령을 통해 생성
- 즉, /etc/ld.so.conf. 팡리 변경시 ldconfig 명령어를 통해 /etc/ld.so.cache 파일의 갱신이 필요하다
7) 파이프
- 프로세스의 표준 출력을 다른 프로세스의 표준 입력으로 보낼 수 잇는 프로세스 간 통신방식
- 터미널에서 사용할 수 있는 파이프 기호는 '|' 이다
8) 리다이렉션
- 프로세스의 표준 입출력을 파일, 화면, 장치 등에서 입력을 받거나 출력할 수 있도록 입출력을 재지정할 수 있는 매커니즘
9) 가상 콘솔
- 하나의 화면에 여러개의 콘솔을 사용할 수있는 기능
- 이 콘솔은 텍스트 기반터미널 or X윈도우와 같은 그래픽 화면 일 수도있다
- 리눅스는 총 6개의 콘솔제공. Ctrl + Alt + F1 ~ F6 을 통해 콘솔을 생성할수있다
- 특히 X 윈도우의 경우 Ctrl + Alt + F7 이다
- 콘솔 간 전환을 위해서는 Alt + 각 펑션키(F1~F6)을 눌러 빠르게 이동가능
[4] 리눅스의 장단점
1) 리눅스의 장점
- 오픈소스라 경제적
- 전세계 수많은 개발자가 보안성 강화중이라 안정적
- 네트웤프로토콜지원
- 커스터마이징가능
2)리눅스의 단점
- 이슈를 해결해줄 체계적인 기술지원 네트워크가 없다
- 최신 하드웨어 기기에 대한 디바이스 드라이버 지원이 느리다
2. 리눅스와 GNU 그리고 오픈소스 라이선스
[1] 리눅스와 GNU(GNU's not Unix)
1) GNU GPL(General Public License) 라이선스를 갖는 리눅스
- 리눅스는 GNU GPL 라이선스를 갖는다. 누구나 리눅스의 소스코드를 자유롭게 사용,변경, 배포 가능
- 유닉스 소스코드를 일체 사용하지 않고 모든 소스를 새롭게 작성
- GNU GPL에 따라 배포되는 SW를 자유 소프트웨어 라고 부름
- GPL 라이선스를 갖는 코드를 가져다 쓰는 경우 해당 소프트웨어도 GPL 라이선스로 배포되어야 한다는 제약이 있다
- 이것은 개발자들이 서로 기술공유를 통해 자유 소프트웨어 개발과 기술 발전을 추구하기 위한 의도이다
- 리눅스운영체제는 가격이 무료인 운영체제를 추구하는 것이 아니며 일반 저작권을 반대하기 위한 것도 아닌 소스코드의 자유로운 공유를 통한 기술발전 및 소프트웨어 산업 발전을 목적으로 한다
2) GNU(GNU's Not Unix)
- GNU는 재귀적 약어로써 GNU's Not Unix 즉 'GNU는 유닉스가 아니다'라는 뜻을 갖는다
- 리차드 스톨만을 주축으로 자유 소프트웨어를 갈망하는 개발자들이 모여 만듬
- GNU는 유닉스와 호환은 되지만 다른 운영체제라
3) 자유소프트웨어의 정의
- 자유0 : 프로그램을 어떠한 목적이든 실행할 수 있는 자유
- 자유1 : 프로그램의 작동원리를 연구하고 이를 자신의 필요에 맞게 변경시길수 있는 자유
- 자유2 : 이웃을 돕기 위해 프로그램을 복제 및 배포할수있는 자유
- 자유3 : 프로그램을 향상하고 이를 공동체 전체의 이익을 위해 다시 환원할 수 있는 자유
4) 카피레프트
- 카피레프트는 저작권을 뜻하는 카피라이트의 반대의미를 갖는다
- 자유 소프트웨어를 사용자가 자유롭게 사용할 수 있도록 법률적 보장을 위해 만들어진 개념
[2] 오픈소스
- 오픈소스는 소프트웨어나 하드웨어의 저작자 권리를 지키면서 원시코드를 누구나 열람할 수 있도록 한 소프트웨어를 말한다
- 오픈소스는 자유소프트웨어와 비슷한 맥락을 갖고있다. 다만 자유 소프트웨어 진영에서는 오픈소스라는 용어가 주는 의미가 소스를 공개한다는 의미에 치중되어 있고 자유소프트웨어가 추구하는 모든 소프트웨어는 자유롭게 사용할 수 있다는 취지를 잘 반영하지 못하기 때문에 오픈소스 대신 자유소프트웨어라는용어를 사용해줄 것을 주장하고있다
[3] 다양한 오픈소스 라이선스
라이선스 | 필수사항 | 허락조건 | 금지조건 |
GPL | 수정 또는 GPL활용 시 모두 GPL로 공개 라이센스 및 저작권 명시 변경사항안내 |
상업적 이용 가능 배포가능 수정가능 특허신청가능 사적이용가능 |
보증책임 없음 2차 라이센스 |
LGPL | 수정한 코드 LGPL로 공개 단순활용시 공개의무 없음 라이센스 및 저작권 명시 |
상업적 이용가능 배포가능 수정가능 특허신청가능 사적이요가능 2차라이센스 |
보증책임없음 |
BSD | 라이센스 및 저작권 명시 | 상업적이용 가능 배포가능 수정가능 사적이용가능 2차라이센스 |
보증책임없음 |
Apache | 라이센스 및 저작권 명시 변경사항 안내 |
상업적이용가능 배포가능 수정가능 특허신청가능 사적이용가능 2차라이센스 |
보증책임 없음 상표권 침해금지 |
MPL | 수정한 소스코드 MPL로 공개 단순 활용시 공개의무 없음 라이선스 및 저작권 명시 특허기술이 구현된 프로그램의 경우 관련 사실을 LEGAL 파일에 기록하여 배포 |
상업적 이용 가능 배포 가능 수정 가능 특허 신청 가능 사적 이용 가능 2차 라이선스 |
보증책임 없음 상표권 침해 금지 |
MIT | 라이선스 및 저작권 명시 | 상업적 이용 가능 배포 가능 수정 가능 사적 이용 가능 2차 라이선스 |
보증책임 없음 |
3. 리눅스의 역사와 리눅스 배포판
[1] 리눅스의 역사
1) 1984~1991 : 리차드 스톨만의 자유 소프트웨어 운동 시작
2) 1991~1993 : 리누스 토발즈의 리눅스 커널 및 배포판 릴리즈
3) 1994 : 리눅스 커널 정식 1.0 버전 출시
4) 1998 : 오픈소스 소프트웨어의 태동
5) 2003~2005 : 다양한 배포판의 보급
6) 2007 : GPLv3의 발표로 GPL라이선스 완성
7) 2011~ : 전세계 개발자와 함께하는 리눅스 커널의 지속적인 발전
[2] 리눅스 배포판의 분류 및 특징
1) 슬랙웨어 : 가장 오래되고 가장 유닉스다운 리눅스 배포판
- Slackware
- openSUSE
- Vector Linux
2) 데비안 : 기업,재단보다는 자발적 커뮤니티에 의한 배포판, APT패키지 관리자를 통한 패키지 설치 및 업그레이드 편리
- 우분투
- Raspbian
- ChromeOS
3) 레드헷 : 고객 유료 서비스를 통한 수익창출을 추구, 일반 사용자를 위한 무료배포판제공
- RHEL(RedHat Enterprise Linux)
- Fedora
- CentOS
- Oracle Linux
- Scientific Linux
4) 안드로이드 계열
- 안드로이드
- AOSPA(Android Open Source Project)
5) 국내계열
- 하모니카
- 넘버원 리눅스
- 구름OS
4 활용 분야
[1] 서버, 메인프레임
1) 웹서버를 호스팅하는 대부분의 서버들은 리눅스 이용
2) 낮은비용,오픈소스 특징이라 꾸준히 리눅스 채용
3) 대부분의 슈퍼컴퓨터에서도 리눅스 배포판 이용
[2] 스마트 디바이스
1) 스마트폰, 태블릿 컴퓨터, 스마트TV, IVI(In-Vehicle Infotainment) 시스템 등에 리눅스탑재
2) 안드로이드 리눅스 커널 기반
3) webOS, FireFoxOS 도 리눅스 기반
[3] 임베디드 디바이스
1) 하드웨어 제어를 통해 특정기능 수행, 컴퓨터 시스템 내에 존재
2) 운영체제가 없이 펌웨어만으로 동작하는 시스템과 운영체제를 통해 구동되는 시스템으로 나뉨
3) 소형IoT,Android Things, Ubuntu core,라즈베리파이 등 등에 사용
[4] 게이밍 디바이스
1) 2013년 밸브사에서 게임을 위한 스팀 리눅스 버전 출시
2) 수많은 스팀 게임이 리눅스에 포팅되고 있다
[5] 리눅스 클러스터
1) 고계산용 클러스터(HPC : High Performance Cluster)
- 과학계산용, 고성능 계산능력 제공이 목적
- 고가의 메인프레임X -> 중소형급시스템을 여러대 묶어 효율성을 높이는 기술로서 리눅스가 사용
2) 부하분산 클러스터(LVS : Linux Virtual Server)
- 로드 밸런서를 운영하여 대규모트래픽을 여러대의 서버로 분산하는 기술
3) 고가용성 클러스터(High Availability Cluster)
- 오류로인해 끊기지않는 시스템
- 부하 분산 클러스터와 혼합하여 주노드(Primary Node)가 부하분산처리하고 부 노드(Backup Node)가 주노드의 상태를 체크하고 있다가 이상이 발견되면 서비스를 이어받아 서비스를 지속가능하게 하는 서버 구축 방법
'서버&백엔드 > 🐧 Linux' 카테고리의 다른 글
[Kali Linux] SSH를 통해 원격으로 리눅스서버 접속 (0) | 2023.07.15 |
---|---|
[리눅스마스터 1급] X 윈도우 (1) | 2023.07.09 |
[리눅스마스터 1급] 리눅스의 구조 (0) | 2023.07.09 |
[리눅스마스터 1급] 리눅스와 하드웨어 (0) | 2023.06.29 |
[리눅스마스터 1급] 운영체제의 개요 (0) | 2023.06.26 |