RedHat Linux >> Fundamentals of the GNU/Linux
|
[목차] |
제1장 리눅스 소개
1. 유닉스란 무엇인가 ?
일찍이 유닉스는 거대한 at&t사 부속 bell 연구소에서 개발되었습니다. 1970년대에 digital equipment pdp 컴퓨터를 위해 개발된 유닉스는, 멀티프로세서 서버와 슈퍼컴퓨터를 능가하는 pc워크스테이션으로부터 다양한 하드웨어 플랫폼을 포함하여 매우 인기 있는 다중 사용자, 다중 작업 운영체제가 되었습니다.
엄밀히 유닉스는 x/open에 의해 관리되는 상표이며, x/open 설명서인 xpg4.2 표준에 따르는 컴퓨터 운영체제입니다. 또한 이 문서는 spec1170으로 알려져 있으며 유닉스 운영체제 기능들의 명칭, 인터페이스, 작동 등을 규정하고 있습니다.
유닉스와 비슷한 많은 시스템들은 sun sparc에서 돌아가는 solaris와 같은 상업적인 것과 freebsd, 리눅스와 같은 자유로운 것, 두 가지로 구분됩니다. x/open 설명서는 최근에 발표되어 아직 그에 따르는 시스템이 많지 않습니다. 예전에 서로 다른 유닉스 기종간의 호환성에 있어서 posix가 많은 도움이 되었지만, 아직도 문제는 남아 있습니다. x/open 설명서의 발표로 인해 많은 유닉스와 이와 비슷한 시스템들이 하나로 통합될 가능성이 커졌습니다.
2. 리눅스란 무엇인가 ?
이미 잘 알려진 사실이지만 리눅스는 자유롭게 배포되는 유닉스와 비슷한 커널(운영체제의 핵심부)입니다. 리눅스는 유닉스에 기반을 두었으므로 리눅스와 유닉스 프로그램들은 서로 비슷합니다. 그러므로 유닉스에서 짜여진 판매되는 많은 상용 응용프로그램들도 바이너리의 변형 없이 작동됩니다.
리눅스는 헬싱키 대학의 리누스 토발즈와 인터넷을 통한 유닉스 프로그래머들의 참여로 개발되었습니다. 그리고 리눅스는 소규모 유닉스인 Andy Tanenbaum의 미닉스에 영감을 얻어 취미로 시작되었으나 점차 규모가 커져 그 자체만으로도 완벽한 유닉스 시스템이 되었습니다. 또한 리눅스 커널은 AT&T나 다른 어떤 업체의 소스코드도 사용하지 않았습니다.
3. 리눅스 배포판
사실상 리눅스는 커널을 가리키는 말입니다. 모든 사람들은 커널 소스를 얻어 컴파일할 수 있고 설치할 수 있으며 그런 이후에 자유롭게 배포된 다양한 소프트웨어들을 설치해 완벽한 유닉스 시스템으로 만들 수 있습니다. 커널과 그 이외의 다양한 프로그램으로 이루어져 있는 것을 리눅스 시스템이라 부릅니다. 이 대부분의 유틸리티들은 FSF의 GNU 프로젝트로부터 만들어진 것입니다. 리눅스 시스템이 독자적인 소스 코드로부터 나온 것은 의미 있는 시작이었습니다. 이제는 많은 사람들이 커널, 다양한 프로그래밍 도구, 유틸리티들이 한데 묶여 있는 배포판을 CD-ROM형태로 가지고 있습니다. 그리고 이 배포판들은 X 윈도우 시스템을 실행하며 완벽한 유닉스 환경을 가지고 있습니다. 그리고 보통 배포판에는 텍스트 파일로 리눅스 설치를 도와 주는 설치 프로그램이 들어있습니다. 잘 알려진 배포판으로는 슬렉웨어(Slackware), 래드햇(RedHat), 데비안(Debian), Linux-FT가 있으며, 이외에도 다양한 종류가 있습니다.
4. GNU 프로젝트와 FSF
리눅스는 수많은 사람들이 공동으로 협력하여 만들어왔습니다. 운영체제의 커널 그 자체는 개발 시스템의 극히 작은 일부분일 뿐입니다. 상용 유닉스는 전통적으로 시스템 서비스와 도구 등의 응용 프로그램을 함께 제공합니다. 허나 리눅스는 이러한 부가적인 프로그램들이 수많은 프로그래머들의 자발적인 기여에 의해 만들어진 것입니다.
리눅스 공동체는 자유 소프트웨어의 개념에 따릅니다. 여기서 말하는 자유 소프트웨어란 모든 제한으로부터 자유로우며, GNU 공동 라이센스를 준수하는 소프트웨어를 말합니다. 비록 소프트웨어를 얻을 때 금전적 대가를 지불할 수도 있겠지만, 그 후에는 원하는 데로 사용할 수 있습니다. 소프트웨어는 주로 소스의 형태로 배포됩니다.
FSF(Free Software Foundation)는 유닉스와 기타 다른 시스템에 너무나도 유명한 편집기인 Emacs를 제작한 리차드 스톨만씨에 의해 제창되었습니다. 리차드 스톨만씨는 자유 소프트웨어의 개척자이고 GNU 프로젝트를 시작하였으며 유닉스에 적합한 개발 환경과 운영체제 제작을 시작하였습니다. 이렇게 만들어진 운영체제는 유닉스와는 다르게 만들어졌지만 유닉스 응용 프로그램을 지원할 것입니다. GNU라는 단어는 GNU's Not Unix라는 말의 줄임 말이다.
이미 GNU 프로젝트는 유닉스와 완벽히 호환되는 소프트웨어들을 제작하였습니다. 이러한 모든 프로그램들은 GNU 소프트웨어라 불리고 GNU 공공 라이센스(GPL:General Public License) 정신에 의거해 배포됩니다. GPL은 "copyright"에 반대되는 개념인 "copyleft"의 개념에 의해 구현되며, 자유 소프트웨어의 사용에 제한을 두는 것을 막기 위한 것입니다. GPL 하에 배포되는 소프트웨어는 다음을 포함하고 있다.
◎ gcc : C 컴파일러 ◎ g++ : C++ 컴파일러 ◎ gdb : 소스코드 수준의 디버거 ◎ gnumake : Unix make의 GNU 버전 ◎ bison : 유닉스의 yacc와 호환되는 파서 생성기 ◎ bash : 쉘 명령어 처리기 ◎ emacs : 텍스트 편집기, 통합환경
5. 리눅스의 저작권에 대하여
리눅스는 GNU의 GPL아래 저작권이 보호되어졌습니다. 이는 때때로 GPL 또는 copyleft라 부릅니다. 이런 Copyleft 라이센스는 FSF에 의해서 프로그래머들이 공개 소프트웨어를 만들 수 있게 하기 위해 붙여졌습니다. 여기서 "공개"란 전혀 비용이 들지 않는다는 뜻입니다. GPL은 아래의 방법으로 공개 소프트웨어를 보호하고 있습니다.
◎ 최초의 저자가 소프트웨어의 판권을 갖는다. ◎ 다른 사람들이 소프트웨어를 사용할 수 있고 수정할 수 있으며 때로는 다른 프로그램에 기초가 될 수 있다. ◎ 다른 사람들이 다시 재 배포할 수 있으며 수정도 가능하다. 단 다시 재 배포할 때 배포한 곳에 배포한 소프트웨어에 대한 판권을 주장할 수 없다. ◎ 만약 소프트웨어를 판매한다면, 어떠한 비용도 없이 완전한 소스코드를 제공해 주어야 한다. 다른 사람이 그 소프트웨어를 수정하고 다시 그것을 희망한다면 다시 팔 수 있도록 해야 한다. 그리고 이를 저지할 수는 없다.
리눅스 소프트웨어의 최초의 저자는 아마 그 어떠한 수익도 보지 못했을 것입니다. 이는 GNU GPL에 의하여 허가된 것입니다. 이는 공개 소프트웨어가 돈을 만들어 내지 않기 때문입니다. 소프트웨어의 최초의 저자와 그것들에 대한 사용 또는 매매 사이를 이해하는 것은 간단합니다.
GNU GPL이 책임지는 공개 소프트웨어는 절대적으로 어떠한 보증도 없습니다. 소프트웨어 상인들은 소프트웨어에 대하여 일반적으로 보증을 지원합니다. 만약 우리가 그런 지원이 되지 않는 소프트웨어를 샀다면, 보증은 없습니다. 그리고 만약 우리가 시스템을 엉망으로 만들어 놓는 공개 소프트웨어의 일부를 사용하게 되면, 만든 저자나 판매한 자에게도 책임이 없고 그것은 오직 자신만의 책임이 됩니다.
GPL이 맡고 있는 공개 소프트웨어는 셰어웨어가 아닙니다. 여기에는 어떠한 공유점도 없습니다. 이 두 가지 용어사이에서 왜 공개 소프트웨어가 그래야만 하는가는 정확히 설명할 수는 없습니다. 완전한 GNU GPL은 위의 것을 종합해 볼 때 우리는 자유롭게 리눅스를 배포하고 싶은 만큼 배포할 수 있습니다. 그리고 또 그것을 수정하고, 자신의 리눅스 버전으로 다시 배포할 수 있습니다. 그러나 이렇게 하는데 있어서 다른 사람이 가지고 있는 이와 동일한 권리를 제거할 수는 없습니다.
6. 리눅스 시스템에서 얻을 수 있는 것
리눅스는 리누스 토발즈에 의해 처음 개발된 유닉스의 공개 버전이고 무료로 배포가 가능했습니다. 리눅스는 많은 유닉스 프로그래머들에 의해 계속해서 개발되어졌고, 놀랄만한 속도로 인터넷을 통하여 배포됐습니다. 그리고 누구라도 리눅스의 커널부분을 만들고, 개발하고 시스템을 변경시킬 수 있도록 개발했습니다.
유닉스와 유닉스처럼 작동하는 시스템들은 거대하며, 자원이 부족하고, 디스크 중심의 시스템으로 오랫동안 인식되어 왔습니다. 그러나 리눅스는 이와 반대입니다. 작으며, 빠르고, 호환성이 있습니다.
리눅스를 그렇게 강력하고 유명하게 만든 중요한 요소를 알아보면 :
◎ 완전한 다중작업을 하고 완전한 32비트를 지원 - 유닉스의 다른 모든 버전처럼 리눅스도 같은 시간에 많은 프로그램들이 동시에 실행되는 완전한 다중작업 시스템입니다. 또한 리눅스는 인텔 계열의 특별한 보호 모드를 이용하는 완전한 32비트의 운영체제입니다. ◎ X 윈도우 시스템 - X 윈도우 시스템은 유닉스 시스템을 기반한 산업 중심의 그래픽 시스템입니다. X 윈도우 시스템의 완전한 버전은 XFree86으로서 알려져 있고 리눅스에서 사용 가능합니다. X 윈도우 시스템은 많은 응용 프로그램들을 지원하는 매우 강력한 그래픽 인터페이스입니다. ◎ TCP/IP 지원 - 이것은 세계의 수백만의 대학과 기업의 컴퓨터를 링크하는 프로토콜의 집합입니다. 이더넷의 연결로 인터넷, LAN에 리눅스 시스템을 통하여 접근할 수 있습니다. 또한 SLIP(Serial Line Internet Protocol) 또는 PPP(Point to Point Protocol)를 이용하여 모뎀을 가지고 전화선으로 인터넷에 접속할 수 있습니다. ◎ 가상메모리와 공용 라이브러리들 - 리눅스는 하드 드라이브의 한 부분을 가상메모리로 사용할 수 있어 실제 사용 가능한 RAM의 메모리의 전체 크기를 확장시킵니다. 또한 리눅스는 프로그램 실행 시 라이브러리에서 서브루틴을 찾아주는 표준 서브루틴을 사용하도록 공유 라이브러리를 구현합니다. 이것으로 각각의 응용프로그램들은 이런 일반적인 루틴들의 복사본을 따로 저장하지 않기 때문에 시스템의 많은 공간을 절약합니다. ◎ 리눅스 커널은 AT&T 또는 기존의 자원으로부터의 코드를 사용하지 않습니다. - 리눅스에서 사용되는 많은 소프트웨어는 공개입니다. 사실상 리눅스에 있는 많은 유틸리티들은 메사추세츠, 캠브리지대학의 공개 소프트웨어 협회(FSF)의 GNU 계획에 의해서 개발되어져 왔습니다. 아무튼 리눅스 애용자, 해커, 프로그래머 그리고 최근의 전 세계의 상업적인 회사들이, 리눅스의 소프트웨어가 성장하는데 공헌을 하고 있습니다. ◎ 리눅스는 상업적 버전 유닉스가 할 수 있는 거의 모든 것을 지원합니다. - 사실상, 리눅스에서 발견되는 특징들은 오히려 기존의 유닉스 시스템에서 사용할 수 없는 것도 있습니다. ◎ GNU 소프트웨어의 지원. - 리눅스는 GNU의 프로젝트에 의해 만들어진 여러 분야의 소프트웨어를 지원합니다.( GNU C, C++ 컴파일러 등등) ◎ 리눅스는 IEEE의 POSIX.1 표준과 호환성이 있습니다. - 리눅스는 소프트웨어의 이식성을 고려하며 개발되어졌습니다. 그러므로 다른 유닉스 시스템 표준의 중요한 특징들을 모두 지원합니다. ◎ 가상메모리 지원 - 리눅스는 가상메모리 관리자를 만들어 시스템의 메모리를 제한이나 분할 없이 사용합니다. ◎ 네트워킹, 다중 작업 그리고 다른 특징들에 대한 지원이 이미 되어있습니다. - 우리는 이런 기술이 윈도우 NT와 같은 곳에서 새로운 기술이라고 선전되는 것을 볼 수 있습니다. 사실상 유닉스(그리고 리눅스)는 이런 새로운 기술이라고 하는 것들을 이미 1980년대 초에 구현하였습니다. ◎ 리눅스는 상업적으로 사용이 가능한 대부분의 유닉스 시스템보다 싸면서 유닉스와 거의 같은 일을 합니다. - 리눅스는 인터넷에서 무료로 사용이 가능합니다. 또한 적은 가격으로 CD-ROM 타이틀 또는 플로피 디스크로 구할 수 있습니다.
리눅스 사용시 가장 큰 이점은 신뢰할 수 있고 안정된 커널을 가지고 일할 수 있는 것입니다. 커널의 모든 소스코드를 우리는 사용할 수 있고 필요에 따라 고칠 수 있습니다. 커널 코드를 보는 것 자체가 교육적인 경험입니다.
리눅스의 개발은 매우 빠르게 진행될 것이라는 것은 의심의 여지가 없습니다. 왜냐하면 소스코드를 공짜로 이용할 수 있기 때문입니다. 또한, 해킹그룹들의 확장으로, 리눅스는 어디에나 있는 운영체제로 성장해 나갈 것입니다.
리눅스는 해커의 프로젝트였고, 코드를 공유하고 프로그램을 좋아하는 많은 프로그래머들에 의해 쓰여졌습니다. 이런 해커들의 태도는 유닉스에 익숙하지 않은 사람들의 기세를 꺾을 수 있었지만, 부작용 또한 많았습니다. 문서의 결핍, 불분명한 명령어, 다른 분명치가 않은 프로그램과의 의존성 등등. 그러나 많은 사람의 손을 거쳐 안전한 리눅스의 소프트웨어로 별문제가 없게 되었습니다. 이는 새로운 소프트웨어가 초판에 겪는 어려움이기도 합니다.
리눅스 사용에 대한 도움은 상업적인 유닉스 버전처럼 전화가 아닌, 인터넷 상의 뉴스그룹 또는 다른 리눅스 모임의 구성원으로부터 도움을 얻을 수 있습니다.
상업적인 유닉스와 리눅스 사이에는 확실한 구별이 있습니다. 상업적 버전의 유닉스는 고객들을 위해서 설계되었지만, 반면에 리눅스는 사용자 시스템들에 대하여 보증을 하지 않습니다. 이것은 리눅스의 진정한 소유자가 사용자 자신이라는 것을 의미합니다.
실제로 초보자의 문제는 기초적인 유닉스 시스템 관리에 대한 지식 부족입니다. 유닉스 시스템을 실행하고 셋업 하는 것을 대부분의 유닉스 사용자들은 경험이 얼마정도 쌓여도 직접하지 않습니다. 그러므로 우리는 이것을 스스로 알아내야 합니다. 쉬운 일은 아니지만 리눅스를 처음 설치한 후에, 자신이 유닉스 시스템에 훌륭한 관리자가 되는 것이 중요합니다.
기타 리눅스 관리자가 알아야 할 것들, ◎ 유닉스 시스템의 몇 가지 기능이 리눅스 시스템에서는 유효하지 않을 수 있습니다. 이 문제에 있어서는 스스로, 또는 다른 사람이 애플리케이션을 만들거나, 그것에 대체할 만한 프로세스를 찾는 것입니다. ◎ 소프트웨어를 이용함으로써, 사용자 컴퓨터의 하드웨어를 지원하지 않을 수 있습니다. 이를 위해서는 역시 자기 스스로가 드라이버를 만들던지, 다른 곳에서 구해야만 합니다. ◎ 우리는 리눅스 시스템을 관리하기 위해 시간을 쓰고 노력을 기울여야 합니다. 그리고 많은 경험을 통하여 문제를 바로잡는 요령을 터득해야 합니다. 아무튼 일반적인 문제를 발견하고 해결책을 만들어 갈 수 있는 좋은 방법은 경험입니다.
표준적인 리눅스 배포라 할지라도 리눅스가 올바르게 작동하도록 하기 위해 때때로 손으로 바로잡아야 되는 작은 문제들이 있습니다. 만약 이전에 유닉스에 경험이 있다면 이런 문제들을 발견하는데 어려움이 없을 것입니다. 만약 유닉스에 경험이 없다면 유닉스 시스템을 실행하고 사용해 나가면서 이해하는 것이 많은 도움을 줄 것입니다.
참고 : 리눅스를 286에서 실행할 수 있을 까? 아니오 - 리눅스는 인텔 80386칩의 보호모드-함수를 사용합니다. 그리고 리눅스는 실제적으로 32비트의 운영체제입니다. 386이전의 CPU는 리눅스를 실행할 수 없습니다. 왜냐하면 보호모드가 없기 때문입니다.
7. 해커와 크래커 해커란 어떤 인물일까 ? "해커란 말이지, 해킹기술을 구사하는 사람이야 !" 라는 바보 같은 대답을 한다면, 여러분을 보는 눈초리가 달라질 것입니다. 그럼 Guy L.Steele.의 hacker's dictionay를 살펴보겠습니다.
Hacker : 1. A person who enjoys learning the details of computer systems and how to stretch their capabilities - as opposed to most users of computers, who prefer to learn only the minimum amount necessary.
2. One who programs enthusiastically or who enjoys programming rather than just theorizing about programming.
- Guy L.Steele. et al. The Hacker's Dictionary
"해커란, 주어진 환경만을 사용하는 일반 사용자와는 구분되어 자신의 지적 욕구를 충족하기 위해 자신의 컴퓨터 시스템이 할 수 있는 모든 것을 찾아보고 만들어 가는 사람들을 의미합니다. 그리고 프로그래밍에 대한 광적인 집착력을 가진 사람으로 거듭되는 시행착오 속에서 정보 공간에 잠입할 수 있는 능력을 갖춘 사람을 말합니다." 초기의 해커들은 순수한 정열을 지니고 컴퓨터 실력을 발전시키는 사람들이었음을 알 수 있습니다. 그러나 현실로써 받아들여지는 해커의 의미는 왜곡되었습니다. 크래커들과 같이 취급당하기 때문입니다. 불법적인 침입에 파괴적인 행위들을 하는 사람들로 말입니다. 그럼 해커의 역사를 살펴보겠습니다. 그래야만 해커들이 얼마나 순수한 가슴으로 창작적인 행위를 했는지 알 수가 있기 때문입니다.
해커라는 단어는 1960년대 미국 M.I.T 대학생들을 시작으로 전파되기 시작하였습니다. 그들은 컴퓨터를 광적으로 좋아하고 그들의 이상을 컴퓨터에 걸었습니다. 밤낮으로 컴퓨터에 매달려 새로운 프로그램을 만들고 토론하며 창조와 정의를 부르짖었습니다. 이것은 바로 대학 내의 대형 컴퓨터를 이용하다가 컴퓨터의 무한한 능력을 깨닫고, 그 위용을 일반 사회에 전달해야겠다는 정열과 의지로 일어났습니다. 그러한 결과 스티브워즈니악, 리차드 스톨만, 스티브잡스와 같은 위대한 해커라 일컬어지는 인물이 탄생했으며 그들의 영향을 받아 현재와 같은 컴퓨터 환경을 구축하게 된 것입니다. 초기에 그들은 구식 대형 컴퓨터를 이용하고 전화를 공짜로 사용하는 방법을 전파시켰으며 스스로 그러한 장비를 만들어 팔기까지 했습니다. 과거의 순수한 열정을 지닌 해커들은 거의 '히피'족이나 다름없는 이상을 이야기했습니다. 시간이 지나고 세상이 변하면서 초기의 해커들의 숫자는 점차 줄어들었고 대다수 변질되어 본래 해커의 의미인 '정보의 공유화'가 아닌 '정보 엿보기'가 되어갔습니다. 하지만 해커들이 남긴 업적은 대단했습니다. 그들은 아무나 널리 복사해서 사용할 수 있도록 "Copyright"에 반대되는 개념인 "Copyleft"를 사용했으며 그 누구라도 출처만 밝히고 공익적인 것에 이용된다면 자신의 자료를 사용해도 된다고 적어놓았습니다. 그 결과 대표적으로 "Linux"같은 공개 유닉스 운영체제가 탄생하여 오늘날까지 널리 사용되고 있으며 그로 인해 보다 더 좋은 각종 공개 프로그램들이 속속 생겨나고 있는 것입니다. 해커들은 이것을 'GNU'라는 헌장으로 만들어 지키고 있습니다. 여러분이 진정한 해커가 되고자 한다면 "GNU"헌장(부록참고)을 꼼꼼히 그리고 수긍할 때까지 읽어보기 바랍니다. 단지 남에게 과시하고 골탕 먹이기 위해서 해킹을 한다면 해커가 될 자격이 없는 사람임에 틀림없을 것입니다.
|
[목차] |