■ 리눅스란?
리눅스는 컴퓨터 운영체제(Operating System) 중 하나이며, 소프트웨어로 서버를 구축하기에 좋은 운영체제이다. 리눅스는 일반적으로 리눅스 배포판 안에 패키치 처리되며 멀티유저, 멀티태스킹을 지원하는 유닉스와 유사한 운영체제이다. 리눅스는 오픈소스를 사용한다. 그 이유는 여러 사람이 GNU/Linux를 개선하는데 자발적으로 참여하기 위해 오픈소스를 사용한다.
■ 리눅스 사용 목적
주된 이유는 서버 구축이다. 많은 클라우드 서비스에서 대부분 리눅스를 기본 서버로 사용한다. 서버에는 웹서비스만 있는게 아니라 온갖 종류의 서버 프로그램을 만들 수 있다. 또 다른 이유로 운영체제의 학습을 위해 사용한다. 리눅스로는 윈도우와는 또 다른 차원에서 많은 일을 해볼 수 있다. 그러기 위해서 대부분의 시간을 GUI가 아니라 명령어 라인을 사용하게 되는데 리눅스의 학습을 보통 Bash Shell에서 시작하는 이유이다.
■ 리눅스 구조
■ 하드웨어(Hardware)
- 컴퓨터 하드웨어는 케이스, CPU, RAM, GPU, 모니터, 키보드, 메인보드 등과 같은 컴퓨터의 물리적 부품을 의미한다.
■ 커널(Kernel)
- 컴퓨터 운영체제의 핵심이 되는 컴퓨터 프로그램으로 시스템의 모든 것을 통제하며 운영체제의 다른 부분 및 응용프로그램 수행에 필요한 여러가지 서비스를 제공한다. 사용자가 실행시키는 응용프로그램(application)과 하드웨어 사이의 관리자 역할을 수행하며 셸과 연관되어 셸에서 명령하는 작업을 수행하고 수행된 결과를 셸로 보내는 역할을 수행한다.
■ 셸(Shell)
- 셸은 운영체제 상에서 다양한 운영체제 기능과 서비스를 구현하는 인터페이스를 제공하는데 사용자가 입력하는 명령을 대신 해석해서 커널에 전달하여 실행해주는 프로그램이다. 셸은 사용자가 입력한 문자열을 해석하고 해당 명령어를 찾아 커널에 작업을 요청하게 된다. 그리고 커널에서 작업을 수행한 결과를 다시 셸로 보내면 셸은 그 결과를 사용자에게 알려주는 형식이다.
■ 응용프로그램(Application)
- 응용 소프트웨어 또는 애플리케이션은 운영체제에서 실행되는 모든 소프트웨어를 뜻하는데 리눅스는 각종 프로그래밍 개발도구, 문서 편집 도구, 네트워크 관련 도구 등 매우 다양한 응용프로그램을 제공함
■ 리눅스 장점
[1] 다중 사용자 및 다중 처리 시스템
- 멀티유저
- 하나의 시스템에 다수의 사용자들이 동시에 접속하여 사용 가능함
[2] 완전히 공개된 시스템
- 운영체제의 핵심인 커널(Kernel)뿐만 아니라, 운영체제 프로그램에 내장되어 배포되는 대부분의 모든 응용프로그램들의 소스가 공개된 오픈소스 프로그램
[3] 뛰어난 네트워크 환경
- 가장 널리 쓰이는 이더넷을 포함해 SLIP, PPP, ATM 등의 다양한 네트워크 환경을 지원하여 TCP/IP, IPX 등 대부분의 네트워크 프로그램을 지원
[4] 다양한 파일 시스템 지원
- DOS의 FAT, Windows의 FAT32 및 NTFS, CD-ROM에 사용되는 ISO 9660, OS/2의 HPFS 등의 상용 유닉스에 파일 시스템 지원
[5] 뛰어난 이식성
- 리눅스는 약간의 어셈블리어와 대부분의 C언어로 작성되어 있다. C를 컴파일할 수 있으며, 어셈블리어 부분만 새롭게 만들고 C부분을 다시 컴파일 함으로써 쉽게 다른 시스템이나 환경 등에 이식하여 사용할 수 있음
[6] 유연성과 확장성
- 리눅스는 상업용 유닉스(UNIX)의 모든 특성을 가지며 유닉스의 표준인 포직스(POSIX)를 준수하고 있으며 커널, 장치 드라이버, 라이브러리, 응용프로그램, 개발도구 등 리눅스의 소스코드를 쉽게 접할 수 있음
[7] 안전성과 보안성
- 리눅스는 커널 소스가 공개되어 있어 Window 운영체제 같은 폐쇄형 운영체제에 비해 보안 취약점이 쉽게 노출될 가능성이 있으나, 공개용 소프트웨어를 지지하는 수많은 프로그래머들이 상용 운영체제보다 빠르게 오류 수정과 보안 관련 패치에 대응해 안정성을 확보한 버전을 발표하고 있음
[8] 가격대 성능비
- 기업환경에서 서버로 사용되는 유닉스를 x86 시스템에 최적화시켜 효율적인 방식으로 설계하였기 때문에 PC급 서버에서도 Enterprise서버와 유사한 성능을 발휘할 수 있음
[9] 다양한 응용프로그램 제공
- 리눅스에는 운영체제의 핵심인 커널을 비롯해 다양한 응용프로그램을 제공, 셸과 기본 명령어, X Window 시스템(KDE, GNOME 등의 GUI), 편집기(vi 등), 서버 및 클라이언트 프로그램(웹, 메일, FTP 등), 개발도구(C, Java, Python 등), 보안도구(nmap, tcpdump 등), 게임 등을 포함하여 배포하고 있음
[10] 다양한 배포판 존재
- 리눅스는 서버, 개발용, PC용 등 다양한 목적으로 사용 가능하고, 이에 따른 다양한 배포판이 존재함
ex. 레드햇(Redhat), 데비안(Debian), 우분투(Ubuntu), 수세(SUSE) 등
■ 리눅스 단점
[1] 기술 지원의 부족
- 리눅스에 사용되는 대부분의 응용프로그램은 비상업적인 제품인데 전 세계에 흩어져 있는 개발자들이 일일이 기술지원을 하는 것은 불가능함
[2] 특정 하드웨어 대한 지원 부족
- 리눅스가 다른 운영체제에 비해 이식성, 확장성 등이 뛰어나지만 여전히 특정한 하드웨어에 대한 설치가 어렵고 모든 플랫폼에서 작동하는 만능 운영체제는 아님
[3] 사용자의 숙련된 기술 요구
- 현재 리눅스에서는 X-Window 기반 환경이 보편화되면서 초기 텍스트 기반의 명령어를 입력하는 환경에 비해 쉬워졌지만, 아직도 중요한 설정은 명령어를 입력하거나 관련 환경설정 파일을 편집기를 사용해서 수정을 해야 되기 때문에 지식이 없는 일반 사용자들은 사용에 어려움이 있음
■ 리눅스 특징
[1] 계층적인 파일 구조
- 리눅스의 파일 구조는 /(root)를 기준으로 그 하위 디렉터리에 usr, var, bin 등이 존재하고 다시 usr 디렉터리 밑에는 local, src 등의 디렉터리가 존재하고 이러한 구조를 계층적 파일구조(Tree)라고 부름
[2] 장치 파일화
- 장치란 하드디스크, 키보트, 프린트, 화면출력장치 등 시스템에 설치된 여러가지 하드웨어적 자원을 말하는데 리눅스는 이러한 장치들을 모두 파일화하여 사용함. 특정 하드웨어에 명령을 수행하려면 해당하는 장치 파일에 명령을 내리는 형식임.
[3] 가상 메모리 사용
- 가상 메모리란 하드디스크의 일부를 메모리처럼 사용되는 것을 말한다. 하드디스크는 데이터가 저장되는 공간이고, RAM(메모리)는 작업공간이라 할 수 있다. 프로그램을 실행시키면 작업공간에 해당하는 메모리로 공간이 이동되는데, 메모리의 공간이 작으면 큰 프로그램은 실행시킬 수 없게 된다. 이러한 문제점을 극복하기 위해 사용되는 것이 가상 메모리이고, 리눅스에서는 이 영억을 스왑(Swap)이라고 부른다.
[4] 동적 라이브러리 지원
- 동적 공유 라이브러리(Dynamic Shared Library)는 실행파일 내부에 넣어두지 않고, 프로그램을 실행할 때 가져다 사용하므로 메모리의 효율성이 높음
[5] 가상 콘솔
- 가상 콘솔(Virtual Console)은 하나의 모니터를 장착한 시스템에 여러개의 가상화면을 제공해서 사용하게 하는 기능이다. 리눅스는 기본적으로 6개의 가상 콘솔을 제공한다.
[6] 파이프
- 파이프는 프로세스의 통신을 위해 도입한 것으로 어떤 프로세스의 표준출력이 다른 프로세스의 표준입력으로 쓰이게 하는 것을 말한다. 파이프는 " | " 기호를 사용함
[7] 리다이렉션(Redirection)
- 리다이렉션은 어떤 프로세스의 입출력을 표준 입출력이 아닌 다른 입출력으로 변경할 때 사용한다. 출력결과를 파일로 저장하거나 파일의 내용을 프로세스의 입력으로 사용하는 기법이다.
■ 리눅스 배포판
[1] 우분투(Ubuntu)
: 데비안 리눅스를 기반으러 개발되어 사용 편의성에 초점을 맞춘 리눅스 배포판이다. 데스크탑, 서버 버전 모두 무료로 다운로드하여 이용할 수 있으며, 우분투는 개인 사용자와 데스크탑 환경에 최적화되도록 사용자 편의를 중점으로 개발되어 개인용, 데스크탑 환경에 최적화되어 있다.
[2] 페도라(Fedora)
: 페도라 프로젝트가 개발한 운영체제로 레드햇의 후원과 개발 공동체의 지원 아래 개발된 일반적인 목적을 가진 RPM기반의 소프트웨어가 결합된 운영체제이다. 유료로 판매되는 레드햇에 들어갈 기능을 테스트하는 성격이 강하다. 레드햇에서 개발되는 기술을 가장 먼저 탑재되어 최신의 기술을 가장 먼저 사용할 수 있지만 선택적인 업데이트에 따라서 에러가 발생하기도 하며 기본적인 에러가 많다.
[3] 칼리(Kali)
: 백트랙처럼 수많은 해킹과 관련된 도구와 설명서가 포함되어 있는 배포판으로 해킹 및 정보 보안을 테스트하기 위해 만들어졌으며 무료로 다운로드 및 사용이 가능하다. 배포판 중 서버의 안정성이 가장 높으며 포함하고 있는 패키지도 다양하지만, 유명한 소프트웨어와 상용이 불가능하고 전문지식이 요구된다.
[4] 레드햇(RedHat)
: 레드햇 기업이 개발한 리눅스 배포판으로 유로로 기술지원을 하는 기업용 레드햇 인터프라이즈 리눅스와 페도라로 나뉘어 있다. 서버의 안전성이 높고 설치가 쉽다. 폭 넓은 하드웨어를 지원하고 대규모 데이터베이스 환경에서도 안정적으로 동작하지만, 설치 후 관리가 어렵고 최신 기술 사용 시 유료로 지원된다.
[5] 리눅스 민트(Linux Mint)
: 민트는 우분투와 달리 독점 소프트웨어인 자바와 플래시 웹 플러그인 등을 기본적으로 포함하여 설치하고 바로 사용 가능하다. 우분투에 비해 GUI의 외형적 아름다움에 집중하여 GUI가 뛰어나다. 하지만 우분투에 비해 세계 다국어 지원이 미흡하다.
[6] 센트OS(CentOS)
: 레드햇 엔터프라이즈 리눅스와 완벽하게 호환되는 무료 기업용 컴퓨팅 플랫폼을 제공할 목적으로 만들어진 리눅스 운영체제 중 하나이다. 유료 리눅스인 레드햇 엔터프라이즈를 그대로 빌드하여 상표권만 제거한 리눅스가 센트OS이다. 전 세계 점유율 1위를 차지하고 무료로 사용 가능하지만, 문제 발생 시 지원이 없고 시스템 설정이 어렵다.