검수요청.png검수요청.png

리눅스

해시넷
Asadal (토론 | 기여)님의 2020년 10월 16일 (금) 16:02 판 (같이 보기)
이동: 둘러보기, 검색
리눅스(Linux)
리눅스(Linux)

리눅스(Linux)는 유닉스(UNIX)를 기반으로 제작한 무료 오픈소스 운영체제(OS)이다. 1991년 11월에 핀란드 헬싱키 대학의 학생이었던 리누스 토르발스(Linus Torvalds)가 컴퓨터 운영체제에서 작동하던 유닉스를 386PC 기종의 개인 컴퓨터에서도 작동할 수 있도록 만들었다. 리눅스는 레드햇 리눅스(RHEL), 센트오에스(CentOS), 우분투(Ubuntu) 등 다양한 배포판이 존재하며 리눅스를 기반으로 안드로이드타이젠 등의 운영체제가 파생되었다.

개요

리눅스 또는 지엔유(GNU)/리눅스라고도 불리는 시스템은 핀란드의 컴퓨터 공학과 학생이던 리누스 토르발스(Linus Torvalds)가 만든 리눅스 커널과 지엔유 프로젝트의 유닉스 운영체제의 합작품이다. 운영체제의 가장 중요한 부분이 바로 커널이며 지엔유/리눅스 시스템에서 리눅스는 커널 부분을 말한다. 시스템의 나머지 부분은 기타 프로그램으로 구성되며, 지엔유 프로젝트가 많은 부분을 개발했다. 리누스 토르발스는 헬싱키대학에 재학 중이던 시절 학교 수업 중 교육용 유닉스(UNIX)인 미닉스(Minix)를 배우면서 보다 나은 미닉스를 만들어보기 위해 취미 삼아 운영체제를 만들기 시작했다. 고가의 장비를 소유할 수 없는 처지였기에 대형 컴퓨터에서 사용하는 유닉스 소스 코드를 수정해 개인 컴퓨터에서도 사용할 수 있는 공개 운영체제(OS)로 개발하고 자신의 이름을 따서 '리눅스 0.01 버전'이라고 지었다. 리눅스는 안정성과 신뢰도를 높이는 운영체제로 인정받으면서 인터넷에 소스가 공개된 무료 프로그램이기 때문에 누구나 사용할 수 있으며 컴퓨터 전문가가 언제든 이를 개선할 수 있어 전문가 중심으로 보급됐다. 리눅스는 오픈소스를 주장하는 소프트웨어 공유 운동단체인 지엔유(GNU) 프로젝트의 지원과 전 세계 프로그래머의 공동 참여하에 전 세계 서버용 운영체제의 27%를 점유할 만큼 급성장했다.[1]

등장배경

리눅스의 모태가 되는 유닉스는 다중 사용자와 멀티태스킹 기능을 효과적으로 수행할 수 있는 운영체제를 만들기 위한 프로젝트에 참여한 미국 벨 연구소의 켄 톰슨(Ken Tompson)에 의해 1969년에 개발되었다. 이후 마이크로소프트사의 제닉스와 네덜란드 브리제 대학의 전산과 교수, 앤드루 타넨바움(Andrew S. Tanenbaum)이 만들어낸 미닉스(MIMIX)는 유닉스를 토대로 설계하여 컴퓨터에서 멀티태스팅을 구현하기에 적절한 운영체제였기에 학생들에게 소스 코드와 함께 무료로 배포되었다. 그리고 헬싱키 대학의 리누즈 토르발스는 유닉스의 커널을 컴퓨터에서 사용 가능한 커널로 만들었다. 커널은 운영체제의 핵심으로 모든 작업에 우선하여 작동하는 프로그램으로 인터럽트 처리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, 프로그래밍 인터페이스 제공 등 운영체제의 기본적인 기능들을 제공하는 핵심부문이다. 1991년, 리누즈 토르발스에 의해 최초 리눅스 0.01 버전이 제작되었을 때 리눅스의 모습은 하드디스크 드라이버와 파일 시스템뿐이었으며 그 기능 또한 아주 미약했다. 그 때문에 0.01 버전은 발표되지도 않았으며, 최초로 공개된 0.02 버전을 통해 배쉬(bash)를 기반으로 한 지엔유 메이크(gnu-make), 지씨씨(gcc), 컴프레스(compress) 등의 명령을 실행 할 수 있을 정도로 발전했지만, 이때까지도 리눅스는 교육용 이상을 가치를 갖지 못하는 단순한 형태였다. 이후 인터넷의 수많은 개발자의 관심을 받아 코드 및 버그 수정을 통해 이때부터 리눅스는 발전하기 시작했다.[2]

역사

1960년

아이비엠360(IBM360) 으로 대표되는 메인프레임이 지배하던 시기로 벨연구소의 켄 톰슨의 유닉스가 개발되었다. 1960년대 후반, 소프트웨어라는 상품으로 포장되어 판매되는 상품으로 인식되기 시작했지만, 유닉스의 모든 소스 코드는 공개되어 있었다.

1983~1991년

1983년 9월, 리처드 스톨만은 지엔유 프로젝트(GNU project)를 시작했다. 지엔유 프로젝트의 목적은 프리웨어로만 구성된 완전한 하나의 유닉스 시스템을 만드는 것이다. 1989년, 지엔유는 시스템 라이브러리, 컴파일러, 텍스트 에디터, 셸 등의 커널을 제외한 시스템의 핵심적인 부분을 완성했다. 1990년 시작된 허드(Hurd) 커널은, 초기에는 비에스디(BSD) 커널을 기반으로 개발하려 했으나, 원래의 비에스디 커널을 개발했던 버클리 프로그래머들과의 협력이 이루어지지 않아 실패했다. 1987년 리처드 스톨만은 허드를 마하(Mach)라는 마이크로 커널을 기반으로 개발하려 했으나 마하는 예상외로 복잡한 구조로 되어 있어서, 허드의 개발은 지체되었다.[3]

그러던 중 1991년, 리눅스라는 이름의 또 다른 커널이 극적으로 등장했다. 리눅스는 핀란드 헬싱키 대학의 대학원생인 리누스 토르발스가 취미 삼아 개발한 커널이었다. 리누스 토르발스는 원래 앤드루 스튜어트 타넨바움 교수가 운영 체제 디자인을 가르치기 위해 만든 교육용 유닉스인 미닉스를 사용하고 있었다. 타넨바움이 미닉스를 다른 사람이 함부로 개조하지 못하도록 제한을 두자, 미닉스의 기능에 만족하지 못했던 토르발스는 새로운 운영 체제를 개발하고자 했다. 리눅스는 본래 운영 체제 위에서 실행되는 터미널 에뮬레이터였다. 초기에는 시리얼 포트를 이용한 간단한 신호를 주고받는 작업밖에 할 수 없었지만, 리누스 토르발스는 디스크의 파일도 읽고, 쓰게 개발시켰다. 이처럼 완전한 파일 제어가 가능해지자, 리누스 토르발스는 이것을 포직스(POSIX)에 호환되는 운영 체제 커널로 발전시키기로 마음먹고 이를 기반으로 리눅스를 개발하기 시작했다. 초창기 리눅스는 설치와 부팅을 하기 위해서는, 미닉스와 같은 다른 운영 체제가 필요했다. 그러나 리로(lilo)와 같은 부트로더가 개발되고, 지엔유 프로젝트가 만들어낸 모든 유틸리티를 리눅스에서 사용할 수 있게 됨에 따라, 리눅스는 빠른 속도로 미닉스를 능가하게 되었다.[3] [2]

1993~1997년

1993년 12월 말경에 리눅스 커널 0.99 버전이 발표되었으며, 이와 거의 동시에 아파치 웹서버 프로젝트(Apache Web Server Project)가 시작되었다. 리눅스 커널 1.0 정식 버전이 공식적으로 발표되고 이때부터 리눅스 커널 1.0 버전을 기반으로 한 많은 배포판이 나오게 되었다. 1994년, 리눅스 커널 1.0을 기반으로 한 리눅스 배포판을 개발하기 위해 레드햇(Redhat)이 설립하게 되었다. 1996년 6월 9일, 리눅스 커널 2.0 버전을 공식적으로 발표했다. 리눅스 커널 2.0의 가장 큰 특징은 에스엠피(SMP) 기능으로 당시 한 개의 프로세서만을 사용할 수 있었던 리눅스에 다중프로세서를 장착하여 사용할 수 있는 계기가 되었고 이것은 리눅스가 컴퓨터뿐 아니라 서버용으로 그 가능성을 가지게 되었다. 1997년 3월 에릭 레이몬드(Eric Raymond)가 "성당과 시장"이라는 논문을 발표했다. 그리고 이구엘 드 이카자가 이끌고 레드햇이 후원하는 지놈(GNOME) 데스크톱 프로젝트가 시작되었다.[4]

1998~2007년

오픈소스(Opensource)라는 용어가 탄생하여 사용되었다. 이때까지는 자유 소프트웨어라는 용어를 사용했으나 "자유"라는 용어에 한계를 느낀 에릭 레이몬드를 주축으로 한 오픈소스 운동가들에 의해 "자유 소프트웨어"라는 용어 대신 "오픈소스 소프트웨어"라는 용어를 사용하게 되었다. 넷스케이프사가 에릭 레이몬드의 논리를 수용하여 당시 인기 있었던 웹브라우저인 커뮤니케이터(Communicator)의 소스 코드를 공개한다고 발표했다. 1999년, 2001년에 각각 리눅스 커널 2.2버전과 2.4 버전이 발표되었다. 2.4 버전에는 리눅스에서 사용 가능한 프로세스가 16개까지 확장했으며 당시 아이비엠(IBM), (SUN), 에이치피(HP) 등이 주축이던 엔터프라이즈급 대형 시스템에도 리눅스가 사용될 수 있다는 것을 입증했다. 2003년, 리눅스 커널 2.6 버전이 발표되었다. 아울러 리눅스가 대형 엔터프라이즈급 시스템에서도 본격적으로 사용하게 되었다. 2007년, 많은 논의 토론 끝에 지피엘(GPL) 3 정식 버전이 발표되었다. 오픈소스 라이센스의 종류에는 약 50 여가지 이상이 있으며 어떤 라이센스를 채택할 것인가는 오픈소스를 처음 개발했던 개발자나 단체에서 결정하게 된다. 하지만 지피엘 1과 지피엘 2, 그리고 지피엘 3은 가장 대표적인 오픈소스 소프트웨어의 공식적인 라이센스로서 가장 많은 오픈 소스들이 GPL을 라이센스로 채택하고 있으며 이후 다양한 분야에 리눅스가 도입되고 있다.[4]

특징

주요 기능

  • 다중 시스템 : 하나의 시스템에 다수 사용자들이 동시 접속하여 사용할 수 있으며 각 접속자는 다수의 응용 프로그램을 실행할 수 있다.
  • 하드웨어 호환성 : 운영체제의 핵심인 커널의 소스가 공개되어 있어서 하드웨어 지원이 필요한 경우 전문적인 사용자들에 의해 직접 하드웨어 드라이버가 제작되고 추가되어서 널리 알려진 하드웨어 대부분을 지원한다.
  • 네트워킹 : 이더넷(Ethernet), 에프디디아이(FDDI), 아이에스디엔(ISDN), 아마추어 무선 통신(HAM) 등의 수많은 네트워킹 기능을 사용하기 위한 드라이버를 지원하고 서로 다른 시스템(운영체제) 간 통신을 위한 프로토콜을 제공한다.
  • 파일 시스템 : 일반적으로 운영체제는 자신 고유의 파일 시스템만을 지원하기 때문에 다른 시스템의 데이터는 읽을 수 없지만, 리눅스는 일반적으로 사용되는 다른 운영체제의 파일 시스템도 지원한다. 대표적인 파일 시스템으로 "FAT, VFAT, NTFS, ISO9660" 등을 지원하며 리눅스는 이엑스티(EXT) 2~4를 사용한다.
  • 이식성 : 리눅스는 약간의 어셈블리와 대부분의 씨언어로 작성되어 있다. 따라서 씨언어를 컴파일 할 수 있으면 어셈블리 부분만 새롭게 만들고 다시 컴파일함 으로써 쉽게 다시 시스템에 이식할 수 있다.
  • 유연성 및 확장성 : 충분히 인증받고 실무에서 많이 사용된 상업용 유닉스(UNIX)의 모든 특성이 있으며 유닉스의 표준인 포직스(POSIX)를 준수하고 있기에 시스템 자원을 효율적으로 사용할 수 있다.
  • 가성비 : 기업환경에서 서버로 사용되는 유닉스를 64비트(x86) 시스템에 최적화시켜 효율적인 방식으로 설계하였기 때문에 일반 컴퓨터급 서버에서도 엔터프라이즈급의 성능을 발휘할 수 있다.
  • 응용 프로그램 : 기본적으로 엑스 윈도우(X Window)를 제공하고 리눅스에서 운영체제의 핵심인 커널을 비롯하여 다양한 서버와 개발도구 및 응용 프로그램을 제공한다.
  • 배포판 : 리눅스 서버용, 개인용, PC용 등 다양한 목적으로 사용할 수 있고, 이에 따른 다양한 배포판이 존재한다. 따라서 사용자는 자신의 편의에 맞춰 배포판을 선택하여 사용할 수 있다.
  • 안정성 : 리눅스는 커널 소스가 공개되어있기 때문에 다른 상용 운영체제와는 달리 버그와 보안 결점의 보고와 그에 관련된 버그 패치가 매우 빨리 이루어진다. 보안상의 취약점이 쉽게 노출된 가능성이 있으나, 공개용 소프트웨어를 지지하는 수많은 전문 프로그래머들이 상용 운영체제보다 빠르게 오류 수정과 보안 관련된 패치를 발표하고 있다.
  • 신뢰성 : 레이드(RAID) 기술과 저널링 파일 시스템을 사용하여 서버의 데이터를 보호해 데이터 신뢰성을 보장한다.[5][6]

리눅스 구조

리눅스는 유닉스를 기반으로 제작한 운영체제로, 운영체제는 사람이 사용하는 응용소프트웨어가 컴퓨터의 하드웨어를 사용할 수 있도록 하기위한 시스템프로그램이다. 즉 운영체제는 사람이 사용하는 응용프로그램이 제대로 작동되기 위해서 이런 하드웨어를 사용 및 설치해야 하며 이를 사용하는 사람과의 인터페이스 역할을 한다. 운영체제는 커널과 셸, 파일 시스템, 시스템소프트웨어, 애플리케이션 등으로 크게 5부분으로 구성되며 운영체제 운영을 위해 필요한 요소는 커널과 셸, 파일 시스템이며 이중 운영체제의 가장 핵심이 되는 것은 커널이다. 리눅스에서 이러한 커널을 리눅스 커널이라고 부른다. 커널은 항상 메인 메모리에 상주하면서 컴퓨터 시스템 자원들을 관리하며 하드웨어를 추상화 시켜 사용자 레벨 프로세스에 서비스를 제공한다. 즉, 커널은 주로 하드디스크, 메모리와 같은 하드웨어 자원을 효율적으로 관리하는 데 필요한 요소다.

이러한 관리가 일어나기 위해서는 어떤 명령이 실행되는 프로그램이 실행되어야 한다. 그리고 보통 명령의 실행은 유저의 입력에 의한 것이 대부분이며 이때 유저의 입력을 어떻게 받아서 처리할 것인지를 결정하고 도와주는 것이 셸이다. 셸은 운영체제상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다. 리눅스 명령어를 해석하는 명령어 해석기로 사용자와 리눅스 운영체제 간의 인터페이스와 셸 프로그래밍 언어를 해석한다. 키보드와 같은 단말 장치를 통해서 유저의 입력을 받아 여러 프로그램이나 명령을 실행하는 것이다. 유저는 셸과 대화를 나누고 다시 셸은 커널과 대화를 나누는 방식이다. 결국 이러한 셸을 사용하면 유저는 복잡한 커널 단위의 연산을 알 필요 없이 셸 상의 인터페이스로 시스템 자원들을 쉽게 관리할 수 있다.[7] [8]

파일 시스템(File system)이란 파일(자료)을 사용자가 쉽게 접근 및 발견 할 수 있도록 운영체제가 시스템의 디스크 상에 일정한 규칙을 가지고 보관하는 방식으로 리눅스 운영체제의 경우에는 파티션을 나누고 정리하는 데 주로 사용된다. 운영체제가 파일들을 일정한 규칙을 연속적으로 사용하여 디스크의 파티션상에 저장하게 되면 저장장치 내에서 파일 저장을 저장하는 게 용이해지고 파일을 검색과 관리를 효율적으로 할 수 있다. 리눅스는 대표적으로 "이엑스티 3,4(ext3, ext4), 아이에스오 9660(iso9660), 스왑(swap), 엔에프에스(nfs), 엑스에프에스(xfs)" 등의 파일 시스템을 사용하고 있다. 이러한 파일 시스템에서 사용하는 파일이란 자기테이프, 청공카드, 또는 주기억장치나 디스크처럼 물리적인 하드웨어 저장공간에 저장되는 데이터의 집합을 말하며 데이터 정보의 논리적인 저장 단위로도 볼 수 있다.[9]

디렉토리 구성

리눅스의 파일 시스템은 루트 파일 시스템(/) 아래에 계층적으로 모든 파일과 디렉토리가 만들어진다. 각 리눅스 배포판마다 차이는 있지만, 대부분의 배포판에서 다음과 같은 디렉토리들을 루트 아래에 두고 있으며 각 디렉토리의 역할은 다음과 같다.

디렉토리
/boot 시스템 부팅에 필요한 리눅스 커널과 여타 시스템 운용 패키지를 보관하는 디렉토리다.
/bin 지유아이(GUI)를 실행하는 파일들과 같은 운영체제 관련 바이너리 파일들을 보관하는 디렉토리다.
/dev 저장장치, 사운드카드, 그래픽카드, 유에스비(USB) 장치 등의 시스템에 연결된 모든 장치들의 연결점을 구성하는 디렉토리다.
/var 자료 데이터가 변경될 때 저장하는 디렉토리다. 시스템의 작동 로그들과 네트워크, 보안 관련 로그 등 각종 로그 파일이 저장되는 디렉토리다.
/media 유에스비 메모리, 외장형 씨디 드라이브 등 분리 가능한 저장장치가 자동으로 마운팅되는 지점을 구성하는 디렉토리다.
/opt 운영체제의 일부가 아닌 소프트웨어를 설치 및 보관하는 역할을 가진 디렉토리다.
/etc 사용자 계정과 암호화된 패스워드를 비롯한 시스템 환경 설정에 필요한 파일을 저장하는 디렉토리다.
/home 일반 사용자들이 각 계정의 홈 디렉토리로 사용한다.
/lib 시스템 운영 및 프로그램을 실행할 때 필요한 라이브러리를 저장하는 디렉토리다. 수많은 애플리케이션들에 의해 공유되는 라이브러리를 보관하는 디렉토리다.
/mnt 외부 저장장치(디바이스를) 수동으로 마운트 하는데 사용하는 디렉토리다.
/proc 리눅스에서 실행되고 있는 프로그램, 프로세스와 시스템 정보를 사용자에게 제공하기 위한 디렉토리다.
/sbin 슈퍼 유저(root)에 의해 사용되는 시스템 관리 유틸리티 바이너리 파일을 보관하는 디렉토리다.
/tmp 임시파일을 자동으로 보관되는 디렉토리다.
/sys 시스템 및 특별한 운영체제 파일들이 있는 디렉토리다.
/usr 사용자가 접근할 수 있는 프로그램들을 보관하기 위한 디렉토리다.[9]

가상 메모리

리눅스는 가상 메모리(virtual memory)를 지원한다. 가상 메모리 기술은 메모리 사용량이 늘어남에 따라, 디스크 일부를 마치 확장된 주기억장치(RAM)처럼 사용할 수 있게 해주는 기술이다. 이 기술에 따르면, 커널은 실제 메모리에 올라와 있는 메모리 블록 중에 당장 쓰이지 않는 것을 디스크에 저장하는데, 이를 통해 사용 가능한 메모리 영역을 훨씬 늘릴 수 있게 된다. 만일 디스크에 저장되었던 메모리 블록이 다시 필요하게 되면 그것은 다시 실제 메모리 안으로 올려지며, 대신 다른 블록이 디스크로 내려가게 된다. 그러나 이런 과정이 일어나고 있다는 것이 사용자에게는 전혀 보이지 않으며, 프로그램들에도 그저 많은 양의 메모리가 있는 것처럼 보일 뿐이어서 점유하고 있는 메모리가 디스크에 있는지 실제 메모리에 있는지 전혀 신경 쓸 필요가 없게 된다. 그러나 하드디스크를 읽고 쓰는 시간은 주기억장치보다 훨씬 느리기 때문에, 프로그램의 실행은 그만큼 더디게 된다.

이렇듯 가상적인 메모리로 쓰이는 하드디스크의 영역을 `스왑 영역(swap space)'이라고 한다. 리눅스는 스왑 영역으로 일반적인 파일을 사용할 수도 있고 별도의 스왑을 위한 파티션을 사용할 수도 있다. 스왑 파티션은 속도가 빠르지만, 스왑 파일은 그 크기를 자유롭게 조절할 수 있다. 스왑 영역이 얼마나 많이 필요한지를 미리 알고 있다면 그만큼 스왑 파티션을 잡으면 된다. 그러나 스왑 영역이 얼마나 필요할지 확실히 모른다면, 우선 스왑 파일을 사용해서 시스템을 가동해 보고 필요한 공간이 얼마인지 파악한 후에 스왑 파티션을 구성한다. 또한 리눅스에서는 여러 개의 스왑 파티션과 스왑 파일을 섞어서 사용할 수 있다. 이 방법을 이용하면, 언제나 큰 용량의 스왑 영역을 잡을 필요 없이 그때그때 필요한 만큼만 스왑을 늘려줄 수 있음으로 편리하다.[10]

라이브러리

라이브러리는 컴파일된 오브젝트(객체) 코드를 담고 있는 파일로, 응용 프로그램이 호출할 수 있는 함수들이 들어 있다. 연관된 함수들을 하나의 오브젝트 라이브러리에 담으면 프로그램 생성과 유지보수가 편리해진다. 현대 유닉스 시스템은 정적 라이브러리와 동적 라이브러리라는 두 가지 오브젝트 라이브러리를 제공한다.

정적 라이브러리

정적 라이브러리는 컴파일된 오브젝트 모듈의 체계적인 묶음이다. 정적 라이브러리의 함수를 쓰기 위해서는, 프로그램을 빌드하는 과정 중 링크 과정에서 해당 정적 라이브러리를 명시함으로써 해당 라이브러리에 포함된 여러 함수를 프로그램 내 코드에 필요한 정의를 복사해서 넣는다. 이러한 프로그램을 정적으로 링크된 프로그램이라고 한다. 정적으로 링크된 각 프로그램은 라이브러리에서 추출된 오브젝트 모듈들의 복사본을 각각 포함하고 있어서, 오브젝트 코드가 중복되어 디스크 공간이 낭비되고, 같은 라이브러리 함수를 쓰는 프로그램들이 동시에 실행될 때 또한 메모리가 낭비된다는 단점이 있다. 또한, 정적 라이브러리는 라이브러리 함수를 수정해야 하는 상황이 발생했을 경우, 정적 라이브러리만 수정하는 것으로 끝나는 것이 아니라 이미 이러한 라이브러리를 사용한 모든 프로그램을 찾아내서 새로이 링크 작업을 거쳐 실행 파일을 생성하여야 한다는 치명적인 단점이 있으나, 한번 실행 파일을 생성하면, 정적 라이브러리가 추후 제거되더라도 이미 생성된 실행 파일을 실행하는 데는 아무런 문제가 없다는 장점으로 인해 많은 단점에도 불구하고 사용되고 있다.[11]

정적 라이브러리 생성
  • 오브젝트 파일을 생성한다.
gcc -c sum.c sub.c mul.c div.c 
  • 오브젝트 파일을 하나로 모아서 라이브러리를 생성한다.(.a파일 생성)
ar rc libmycalc.a sum.o sub.o mul.o div.o
  • 라이브러리를 링크한다.[12]
gcc -o testStaticCalc main.c -L./ -lmycalc 
동적 라이브러리

동적 라이브러리는 다른 말로 공유 라이브러리라고도 불리며 정적 라이브러리의 문제를 해결하기 위해 만들어졌다. 프로그램이 동적 라이브러리와 링크되면, 라이브러리 오브젝트 모듈을 실행 파일로 복사하는 대신, 링커는 실행 파일이 실행 시에 해당 공유 라이브러리가 필요하다는 정보만 기록해 둔다. 이후 실행 파일이 실제로 실행되어 메모리에 올라가면, 동적 라이브러리에 속한 함수가 필요할 때 라이브러리 정보를 참조하여 실제 동적 라이브러리를 참조하여 필요한 정보를 메모리에 올리게 된다. 이후 다른 프로그램이 실행되며 같은 라이브러리 함수를 참조하고자 하면, 이미 메모리에 존재하는 동적 라이브러리 정보를 참조하여 바로 링크 작업을 하게 된다. 이러한 특성 때문에 공유 라이브러리라고도 불리고 있다. 또한 동적 라이브러리는 수정이 필요할 경우 라이브러리만을 수정하여도 기존의 프로그램들이 수정된 라이브러리를 사용한다는 점에서 유지보수가 매우 쉬운 편에 속한다. 하지만 수정이 잘못되거나, 삭제될 경우 이 라이브러리를 사용하는 프로그램 또한 오작동, 혹은 실행이 불가능해진다는 단점이 있어서 무조건 정적 라이브러리보다 좋은 것은 아니다.[11]

동적 라이브러리 생성
  • 오브젝트 파일을 생성한다.
gcc -fPIC -c sum.c sub.c mul.c div.c 
  • 오브젝트 파일을 하나로 모아서 라이브러리를 생성한다.(.so파일 생성)
gcc -shared -o libmysharedcalc.so sum.o sub.o mul.o div.o
  • 라이브러리를 링크한다.[12]
gcc -o testSharedCalc main.c -L./ -lmysharedcalc

가상 콘솔

가상 콘솔(Virtual console)은 '가상의 모니터'로 하나의 모니터를 장착한 시스템에 여러 개의 가상 화면을 제공하여 하나의 서버에 다수의 사용자가 접속할 수 있는 기능이다. 시스템을 관리하다 보면 화면 1개만으로는 여러 개의 작업을 하기에 불편함이 있다. 따라서 가상의 화면 6개를 제공하는 가상 콘솔을 통해 사용의 편의성을 확보할 수 있다. 가상 콘솔 이동 및 전환 단축키는 컨트롤(Ctrl) 키와 알트(Alt)키 그리고 F1키부터 F6키(Ctrl + Alt + F1 ~ F6)까지 사용한다. 리눅스는 기본적으로 6개의 가상 콘솔을 제공하지만, 리눅스 배포판, 서버, 데스크톱에 따라 가상 콘솔 개수가 다르기도 하다. 사용자가 6명일 경우 루트(root) 사용자부터 각각 'tt1 ~ tt6'의 사용자 번호를 갖게 된다. 'tty'명령어는 표준 출력에 해당하는 터미널의 장치 파일 이름을 출력해준다. 보통 현재 사용 중인 터미널의 파일명을 확인할 때 사용한다.[13]

[root@localhost ~]# tty
/dev/tty1                // 'dev/' 폴더안에 사용중인 터미널 파일명(tty1)을 알려준다.

리눅스 배포판

리눅스의 창시자인 리누스 토르발스가 만든 것은 바로 운영체제의 핵심 부분인 커널이다. 하지만 커널만으로는 최종 사용자(유저)가 사용할 수 없음으로 리눅스 커널에 'csh, bash, tcsh' 등의 사용자 셸, 지씨씨(gcc)와 같은 개발도구 및 지엔유 유틸리티, 그래픽 환경을 위한 엑스 윈도우(X Window) 시스템 등 외부 프로그램을 포함하여 패키징한 전체 운영체제를 리눅스 배포판이라고 하며 유닉스 계열 운영체제와는 달리 유닉스에 기반을 두지 않고 기술적으로 독립적인 환경에서 유닉스를 모방하여 개발되었다. 보통 리눅스라고 하면 리눅스 커널을 의미하기도 하지만 배포판을 의미하기도 한다. 현재 수백 가지 종류의 배포판이 출시되어 있으며 각각의 특징과 장단점이 있음으로 사용자는 자신의 목적에 맞는 배포판을 선택하여 사용할 수 있다.

회사 차원에서 관리하고 배포하는 레드햇 리눅스, 우분투, 수세 리눅스 등도 있고, 커뮤니티 차원에서 관리하고 배포하는 데비안, 페도라 등이 있다. 오늘날에는 전 세계적으로 약 300여 가지의 배포판이 존재하며 주요 리눅스 배포판 종류는 다음과 같다.[14] [15]


블록라인.png
이 그림에 대한 정보
데비안 로고.png
데비안
레드햇 로고.png
레드햇 리눅스
붉은별 로고.png
붉은별
센트오에스 로고.png
센트오에스
엑스윈도우 로고.png
엑스윈도우
우분투 로고.png
우분투
페도라 로고.png
페도라
  • 데비안(Debian) : 데비안 프로젝트에서 만들어 배포하는 공개 운영체제로서 리눅스 커널을 탑재한 데비안 지엔유(GNU)/리눅스, 지엔유 허드(Hurd) 커널을 탑재한 데비안 지엔유/허드, 프리 비에스디(FreeBSD) 커널을 탑재한 데비안 지엔유/케이프리비에스디, 넷비에스디(NetBSD) 커널을 탑재한 데비안 지엔유/넷비에스디 등으로 나뉜다. 이중 공식 데비안 리눅스 배포판은 데비안 지엔유/리눅스이다. 데비안의 특징은 패키지 설치 및 업그레이드의 단순함에 있으며, 인스톨을 한 후, 패키지 매니져인 에이피티(apt) 등을 이용하면 소프트웨어의 설치나 업데이트에서 다른 패키지와의 의존성을 확인하고 보안 관련 업데이트를 등을 자동으로 처리한다. 데비안이라는 이름은 데비안 프로젝트의 창시자인 이안 머독(Ian Murdock)과 그의 부인인 데브라(Debra)의 이름에서 유래됐다. 데비안은 네트워크 결합 스토리지부터 전화기, 노트북, 데스크톱 및 서버까지 다양한 하드웨어에서 사용할 수 있으며 안정성과 보안에 중점을 두어서 많은 리눅스 배포판의 기반으로 쓰이고 있다.[16] 가기.png 데비안에 대해 자세히 보기
  • 레드햇(Red Hat) : 레드햇 리눅스는 미국에 본부를 둔 레드햇사가 개발하던 리눅스 배포판으로 현재는 다음과 같이 2개로 나뉜다. 하나는 레드햇사가 유료로 기술지원을 하는 기업용 레드햇 엔터프라이즈 리눅스(RHEL)이고, 다른 하나는 페도라 프로젝트에서 개발하고 있는 오픈 소스 기반의 페도라이다. 레드햇 리눅스는 지원 없이 무료로 사용하거나 기술지원을 받는 리눅스 배포판으로 알려져 있는데, 페도라 프로젝트는 레드햇과는 다른 독립적인 조직으로 레드햇사는 스폰서로서만 참가하고 있다. 하지만 페도라 프로젝트가 개발하는 리눅스 배포판의 개발에 엔지니어를 파견하고 있으며, 현재까지 주요 행보를 보면 무료 리눅스 배포판을 독립시키고 레드햇은 기업용 유료 리눅스 배포판인 레드햇 엔터프라이즈 리눅스의 개발과 지원에 전념하고 있다. 가기.png 레드햇에 대해 자세히 보기
  • 붉은 별(Red star) : 붉은 별은 북한의 조선 컴퓨터 중심(KCC)이 개발한 리눅스 기반의 운영체제(OS)이다. 페도라(Fedora) 리눅스를 참조하여 2001년부터 개발을 시작하여 2008년 붉은 별 1.0 버전을 출시했다. 이후 출시된 붉은 별 2.0은 리눅스 기반이지만 바탕화면은 미국 마이크로소프트(Microsoft)의 윈도우(Windows) 운영체제와 유사하다. 2014년 출시된 붉은 별 3.0은 미국 애플(Apple)의 오에스텐(OS X) 운영체제와 유사한 사용자 인터페이스(UI)를 가지고 있다. 웹브라우저는 파이어폭스(FireFox)를 참조하여 개발한 '내 나라'를 사용한다. 북한의 개인 컴퓨터 운영체제는 대부분 미국 마이크로소프트의 윈도우를 사용하며, 붉은 별 운영체제는 기밀보안이 필요한 일부 국가기관이나 서버용으로 사용하고 있다.[17] 가기.png 붉은별에 대해 자세히 보기
  • 센트오에스(CentOS) : 센트오에스는 Community ENTerprise Operating System 약자이다. 상용 리눅스 배포판인 레드햇(Red Hat Enterprise Linux)의 소스 코드를 바탕으로 완벽한 호환을 목표로 개발된 오픈소스 리눅스 배포판이다. 센트오에스는 레드햇과 설치단계부터 운영하는 방법 등이 거의 비슷하다. 눈에 띄는 것은 페도라(Fedora)와 마찬가지로 업데이트용 프로그램인 얌(yum)이 포함되어 있다. 커맨드 프롬프트에서 얌 업데이트하는 것만으로도 시스템을 업데이트 할 수 있다. 최근 레드햇의 업데이트는 중단되었고, 레드햇 엔터프라이즈의 경우 유료 고객지원을 받아야 하므로 레드햇 사용이 쉽지 않다. 레드햇을 사용해 봤다면 센트오에스를 설치하거나 운영하는 데 어려움이 없을 것이며, 레드햇 기반의 리눅스 운영자라면 업데이트 측면과 안정성 측면에서 권장할 만한 운영체제다. 센트오에스 프로젝트는 오픈스택(open stack) 등 새로운 오픈 소스 기술을 지원하여 첨단 커뮤니티 플랫폼으로 확장해 나가고 있다. 64 비트 x86 시스템 아키텍처만을 지원하고 있으며, 아마존 웹 서비스(AWS) 및 구글(Google) 클라우드에 대한 일반적인 초기 이미지도 제공하고 있다.[18] 가기.png 센트오에스에 대해 자세히 보기
  • 엑스윈도우(X Window) : 엑스 윈도우는 마이크로소프트의 윈도우(Windows) 시스템과 이름은 비슷하지만, 별개의 운영체제(OS)이다. 윈도우는 모니터 위의 화면을 여러 개의 다중화면으로 나누어 각기 다른 작업을 수행할 수 있게 해주는 방법이다. 윈도우의 종류에는 여러 가지가 있으나 미국 매사추세츠 공과대학교(MIT)에서 개발한 엑스 윈도우가 거의 표준화되어 있다. 엑스윈도우 체계는 유닉스(UNIX) 워크스테이션의 그래픽 사용자 인터페이스(GUI)를 위한 기초 수단으로서 확고한 지위를 누리고 있다. 윈도우 체계는 컴퓨터와 사용자 간의 대화를 위한 사용자 인터페이스 기능을 제공한다. 그래픽 출력을 위해 클라이언트 서버 모델을 사용하며 간단하게, 클라이언트가 무언가 그래픽적인 요구를 엑스 서버로 전달하면, 엑스 서버가 요청을 처리하여 전달해준다. 그러므로 이론상으로는 원격으로 다른 시스템에 설치된 프로그램을 내 컴퓨터에 깔지 않고도 엑스윈도우를 통해 출력할 수 있다.[ 가기.png 엑스윈도우에 대해 자세히 보기
  • 우분투(Ubuntu) : 데비안 지엔유/리눅스(Debian GNU/Linux)에 기초한 컴퓨터 운영체제로서 고유한 데스크톱 환경인 유니티를 사용하는 리눅스 배포판이다. 영국에 기반을 둔 회사인 캐노니컬의 지원을 받고 있으며 일반적으로 여섯 달마다 새 판이 하나씩 나오는데 이것은 지놈(GNOME)의 새 판이 나오는 시기와 비슷하다. 우분투는 데비안 지엔유/리눅스와 견주어 볼 때 사용자 편의성에 많은 초점을 맞추고 있다. 남아프리카공화국 출신의 영국인인 마크 셔틀워스(Mark Shuttleworth)가 개발한 오픈소스 기반의 리눅스 운영체제로, 우분투는 남아프리카의 반투어로 "네가 있기에 내가 있다"는 뜻으로서 '다른 사람에 대한 인간적 배려'를 의미한다. 기존의 데비안을 포크하여 개발했다. 가기.png 우분투에 대해 자세히 보기
  • 페도라(Fedora) : 리눅스 커널에 기반한 운영체제와 레드햇이 지원하는 페도라 프로젝트 및 후원과 개발 공동체의 지원 아래 개발된 배포판이다. 일반적인 목적을 가진 알피엠(RPM) 기반의 소프트웨어가 결합한 운영체제이며 6개월 간격으로 새로운 버전이 배포되며 지원 기간은 버전마다 13개월이다. 페도라는 페도라 스핀(Fedora Spins)이라 불리는 다양한 방법을 통해 배포될 수 있다. 이 다양한 방법들은 소프트웨어 패키지의 특정한 조합과 최종 사용자가 사용하기 원하는 소프트웨어들을 먼저 고려한다. 페도라 스핀은 여러 개발 공동체에 의해 개발되었다. 페도라 배포판에 포함된 상용리눅스 배포판을 위한 추가 패키지들은 페도라에 기반한 레드햇 엔터프라이즈 리눅스와 이와 호환되는 센트오에스의 안정성을 높이는데 기여를 하기 위한 자발적인 참여의 일환이다. 소프트웨어의 개발이 안정적으로 이루어지기 위해서는 새 버전으로 계속 교체되어야 한다는 문제점이 있다.[19] 가기.png 페도라에 대해 자세히 보기

문제점 및 대안

리눅스에서 사용되는 대부분의 응용 프로그램들이 비상업적인 제품이다. 따라서 전 세계에 흩어져 있는 개발자들이 일일이 기술지원을 하는 것이 불가능하다. 이로 인해 사용하면서 발생하는 문제는 모두 사용자의 몫이지만 리눅스 관련 전문 커뮤니티와 같은 사이트를 이용하는 등으로 어느 정도 대처가 가능하다. 윈도우 사용자를 대상으로 만든 프로그램들은 리눅스 환경에서 구동되지 않을 수 있다. 그러나 그러한 프로그램들을 대체할 리눅스 전용 프로그램들은 계속해서 나오고 있다. 리눅스는 윈도우 기반 환경이 보편화 되면서 초기 텍스트 기반의 명령어를 입력하는 환경에 비해 쉬워졌지만, 아직도 중요한 설정 명령어를 입력하거나 관련 환경 설정 파일을 편집을 사용해서 수정해야 한다. 다른 운영체제에 비해 사용자의 숙련된 기술이 요구된다. 기초 명령어부터 시작해서, 시스템 및 서버 관리 등의 무한한 자유도가 보장되지만 그를 위해서는 학습해야만 한다. 적응된다면 아주 강력한 운영체제임은 분명하다.[5] [20]

평가 및 전망

리눅스 재단에 따르면 퍼블릭 클라우드 컴퓨팅 워크로드의 90%, 세계 스마트폰의 82%, 임베디드 기기의 62%, 슈퍼컴퓨터 시장의 99%가 리눅스로 작동한다. 리눅스는 서버 운영체제의 유닉스를 기반으로 탄생하였고, 리눅스가 탄생한 년도에는 데스크톱보다는 서버가 대를 이루는 시기였기 때문에 초기에는 주로 서버로 이용되었다. 그러나, 비용 부담이 없고 소스가 공개된 자유 소프트웨어라는 점이 아주 이점이 되었다. 현 리눅스 활용 분야는 서버, 데스크톱 및 개발, 임베디드 분야로 나뉘고 있다. 리눅스는 전통적인 서버 및 데스크톱 분야뿐만 아니라 모바일 기기, 자동차, 가전기기 등 다양한 분야에 활용되어 클라우드 컴퓨팅 인프라 구축과 빅데이터사물인터넷(Iot) 환경에서도 중추적인 역할을 수행할 것으로 보인다. 사물인터넷, 클라우드 기술, 슈퍼컴퓨터, 인공지능(AI)을 지배하고 있는 리눅스는 상당한 가속도로 증가하고 있다. 최소형 기기부터 가장 강력한 슈퍼컴퓨터까지 리눅스는 앞으로 그 어느 때보다도 중요성이 더해질 것이다.[21] [22]

각주

  1. pmg 지식엔진연구소, 〈리눅스〉, 《시사상식사전》, 박문각
  2. 2.0 2.1 ,〈리눅스의 역사와 발전과정〉, 《티스토리》, 2009-11-18
  3. 3.0 3.1 리눅스 위키백과 - https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4#%EC%84%A4%EA%B3%84
  4. 4.0 4.1 ,〈리눅스 서버관리 실무 바이블 3.0〉, 《박성수》, 2009-07-01
  5. 5.0 5.1 ITmaker, 〈리눅스의 특징〉, 《네이버 블로그》, 2019-07-14
  6. Kloong, 〈Linux Master 1 - 시작, 리눅스의 개요(1)〉, 《티스토리》, 2013-08-08
  7. twinJH , 〈리눅스/유닉스의 시스템 구조(커널과 쉘)〉, 《티스토리》, 2012-12-16
  8. 꿈꾸는개발자, 〈리눅스의 구조와 특징 소개〉, 《네이버 블로그》, 2016-01-28
  9. 9.0 9.1 파일시스템〉, 《인코돔》, 2019-08-30
  10. 3DMP , 〈리눅스에서의 가상메모리란?〉, 《티스토리》, 2017-01-28
  11. 11.0 11.1 , 〈정적 라이브러리와 동적 라이브러리〉, 《티스토리》, 2019-09-22
  12. 12.0 12.1 , 〈[https://d-yong.tistory.com/5 정적 라이브러리(static library)와 공유 라이브러리(shared library)]〉, 《티스토리》, 2018-01-14
  13. IT 양햄찌(jhnyang) , 〈가상 콘솔(Virtual Consoles)이란?〉, 《티스토리》, 2019-02-05
  14. 리눅스 배포판 위키백과 - https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%B0%B0%ED%8F%AC%ED%8C%90
  15. 리눅스 배포판 레스티프 - https://www.lesstif.com/linux-infra-book/%EB%A6%AC%EB%88%85%EC%8A%A4-%EB%B0%B0%ED%8F%AC%ED%8C%90-20775246.html
  16. 브이핏 , 〈리눅스 개요〉, 《네이버 블로그》, 2016-03-02
  17. 붉은별(운영 체제) 위키백과 - https://ko.wikipedia.org/wiki/%EB%B6%89%EC%9D%80%EB%B3%84_(%EC%9A%B4%EC%98%81_%EC%B2%B4%EC%A0%9C)
  18. 오픈 나라 공식 홈페이지 - http://www.opennaru.com/
  19. 코드 마스터가 되고 싶은 김뽀삐, 〈UNIX시스템 1.리눅스 소개-리눅스 배포판〉, 《티스토리》, 2018-09-30
  20. 양디 , 〈리눅스 장정과 단점〉, 《티스토리》, 2016-02-24
  21. ITmaker, 〈리눅스 활용분야〉 , 《네이버블로그》 , 2019-07-22
  22. 리눅스 나무위키 - https://namu.wiki/w/%EB%A6%AC%EB%88%85%EC%8A%A4#s-1

참고자료

같이 보기


  검수요청.png검수요청.png 이 리눅스 문서는 소프트웨어에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.