안 녕 하 세 요. 리 / 사 / 연 입 니 다. 리눅스 인스톨 그리고 시작하기 2.0이 나온 지도 벌써 6개월이 흘러 버렸네요. 지난번 저희가 번역한 "리눅스 설치와 시작하기"를 여기에 다시 게시하겠습니 다. 박준석님의 "유닉스, 리눅스, 해커"는 좀더 포괄적인 내용을 담고 있습니다. 함께 한번쯤 읽어보시면 도움이 많이 될 듯싶네요. 내용은 원문의 "Linux Installation and Getting Started Version2.0"의 순서와 같습니다. 참고하시기 바랍니다. 리눅스 설치와 시작하기 (Linux Installation and Getting Started Version 2.0) Version 2.0 1994년 1월 24일 이 책은 리눅스의 설치와 리눅스를 처음 사용하는 사람들, 그리고 유닉스 초보자와 전문적인 지식을 가진 사람들을 위한 것이다. 이 책에는 리눅스를 구할 수 있는 방법, 리눅스를 설치하는 방법, 처음 유닉스를 사용하는 사 람들을 위한 사용법 그리고 시스템 관리에 관한 것들이 포함되어 있다. 이 책 을 보면 모든 리눅스 프로그램을 쉽게 사용할 수 있다. 리눅스 설치에 관심이 있거나 혹은 리눅스를 사용하고 싶은 사람은 이 책을 읽기를 권한다. 서 문 "여러분 모두는 복잡한 미로에 빠져 있다." 여태껏 만들어진, 가장 복잡하고 아주 우리를 겁먹게 하는 시스템인 리눅스 를 접하기 전에 먼저 알아 둘 것은 이 프로그램은 80386, 80486에서 돌아가 는 운영체계(OS)이다. 리눅스는 세계의 어떤 공개 프로그램보다도 성공적 인 프로그램이다. 리눅스는 PC를 사용하는 모든 사람들의 가슴을 설레게 할 만한 프로그램이다. 리눅스는 유닉스 연구자, 해커, 그리고 컴퓨터 광신자들이 뒤범벅이 되어 탄 생된 운영체계이다. 리눅스는 유닉스의 복잡한 체계를 그대로 반영하고 있다. 숲은 길고도 험하다. 여러분은 황량하고 칠흑같이 어두운 마법의 세계에 들 어 왔다. 괴물들은 모두 나무 뒤에 숨어 있고 금시라도 달려들려고 한다. 여 러분이 가고자하는 길에만 몰두하라. 그럼 여러분은 공포에서 벗어 날수 있을 것이다. 바로 여러분의 손에 리눅스 안내 책자를 들라. 이 책을 가지면 초보자건 리눅스에 조금 익숙한 사람이건 결코 리눅스에 겁먹을 필요가 없다. 자기만의 리눅스 시스템을 갖추는 것은 아주 재미가 있을 것이다. 의자에 기대어 편히 앉아 이 책을 읽어 보라. 이 책은 첫번째 판을 수정한 것이다(Second Edition). 첫번째 판에서는 특별히 인기있는 SLS(Softlanding Linux System)에 대하여 한정되어 있었다. 시간이 흐르는 동 안 리눅스는 여러모로 다양해지고 몇 개로 나뉘어 졌다. 두번째 판은 완벽 한 리눅스의 설치와 어떤 종류의 리눅스라도 사용하기를 원하는 사람들을 위 해서 쓰여졌다. 첫번째 판에서 처음 3개의 장이 새로운 2개의 장으로 바뀌었 고, 첫번째 판보다 더 포괄적이게 되었다. 부록은 수정되었고 여러 부분이 리 눅스의 기능향상으로 인해 다시 고쳐졌다. 독자에게 이 책은 리눅스를 자기 시스템에 설치하기를 원하는 PC사용자는 다 볼 수 있다. 우리는 여러분이 PC나 운영체계(OS:예를 들어 MS-DOS)에 관한 기초지식이 있다고 본다. 그러나 리눅스나 유닉스에 대해서는 잘 모를 것이라 가정한다. 이 책은 처음 리눅스를 사용하는 사람들에게 매우 유용한 정보들이 있다. 그러나 좀더 전문적인 지식을 얻기 위해서는 다른 서적을 참고하라. 우리는 유닉스 초보자인 여러분에게 시중에 나와있는 좋은 유닉스 관련 서적을 구입 하기를 권한다. (관련서적의 일부는 부록 A에 실어 놓았다.) 구 성 이 책에는 다음과 같은 내용이 있다. 1장, 리눅스의 소개; 이 장에는 "리눅스란 무엇인가 ?", "리눅스는 무엇을 할 수 있나 ?", "리눅스 에 필요한 hardware는 무엇인가 ?" 에 대한 답이 있다. 리눅스 사용 도중에 도움이 필요하거나 짜증이 날 때 아주 유용한 도움을 준다. 2장, 리눅스 구하기와 설치; 이 장에는 "리눅스는 어떻게 설치하는가 ?","리눅스는 어떻게 구하는가 ?" 에 대한 설명이 있다. 그리고 하드드라이브의 재분할(reartitton), 화일 시스템 (filesystem)만들기, 리눅스를 하드드라이브에 로드하는 방법 등에 대한 설명이 있다. 3장, 리눅스 배워보기; 이 장에는 유닉스 초보자에게 리눅스 사용에 대한 완벽한 설명이 있다. 여러 분이 한번쯤 유닉스를 다루었다면 아주 친밀한 내용이 될 것이다. 4장, 시스템 관리; 이 장에서는 리눅스하의 시스템 관리에 있어서 중요한 개념을 설명한다. 시스템 운영 도중의 전문적인 문제점에 관해 알고 싶어하는 UNIX System 관리자들에게도 흥미로운 내용이 될 것이다. 5장, 발전된 특징; 이 장에는 X Window나 TCP/IP networking등의 리눅스의 전문 분야에 관심 이 있는 독자를 위한 내용이 있다. 감사드리는 분들 이 책을 만들기 위해 긴 시간과 많은 사람의 노력이 있었다. 특별히, 저는 첫번째 판 3장을 만든 Larry Greenfield와 Karl Fogel, 그리고 4장을 만든 Lars Wirzenius에 감사드린다. LDP작업과 LATEX convention 작업에 도움을 주신 Michael K.Johnson에게도 감사드린다. 그리고, 개정된 책을 카피해서 보내주신 Ed Chi에게도 감사드린다. 역시, Andy Oram, Lar Kaufman, Bill hahn등 회원 들의 협조와 관심에 감사드린다. 끝으로, Linus Tonalds와 Peter MacDonald에 게 진심으로 감사드린다. 이 두 분이 없었다면 이 일은 불가능했을 것이다. 틀린 부분을 지적해주고 논평을 하신 많은 독자 여러분께 감사드린다. Matt Welsh 13 January 1994 제 작 LDP(The Linux Documentation Project)는 작자, 교정원, 편집원등이 한 팀이 되어 최종적인 한 set의 리눅스 manual을 만드는 것이다. 이 일의 전체적인 관리자는 Matt Welsh이고, Lars Wirzenius와 Michael K. Johnson이 그를 도왔다. 이 매뉴얼은 LDP에 의해 만들어진 Linux User's Guide, System Administrator's Guide와 Kernel Hacker's Guide등과 같은 여러 책들 중의 하나 이다. 이 매뉴얼들은 모든 LATEX source format과 FTP를 위한 Postscript output을 포함하고 있다. (이 매뉴얼들은 sunsite.unc.edu:/pub/Linux/docs/LDP에 서 구할 수 있다.) UNIX는 Unix System Laboratories의 등록상표이다. 리눅스는 등록상표가 아니다. 그리고 UNIX(tm)와 Unix System Laboratories 와 아무상관이 없다. X Window는 Massachusetts Institute of Technology의 등록상표이다. MS-DOS와 Microsoft Windows는 Microsoft사의 등록상표이다. Copyright 가 1992-1994 Matt Welsh 205 Gray Street NE, Wilson NC, 27893 USA mdw@sunsite.unc.edu 제 1 장 리눅스에 대한 소개 리눅스는 세계 공개 소프트웨어 중 가장 뛰어난 성공작이다. 이 책은 앞 으로 직면하게 될 문제에 대한 해결책을 제시해 줄 것이다. 리눅스는 사업, 교육 그리고, 개인적인 목적을 위해서 개발되었다. 이젠 더이상 바보같은 모니 터 앞에서 몇 시간 동안이나 앉아서 유닉스를 사용할 필요가 없다. (아직까지 도 많은 사용자가 유닉스를 사용하고 있다는 점을 확신한다.) 이 책은 리눅스의 전체적인 것을 이해하는데 도움을 줄 것이다. 리눅스는 Intel의 80386, 80486 컴퓨터에서 운영되는 유닉스 운영체계의 일 종이다. 이것은 TEX, X Window, GNU C/C++ compiler, 그리고 TCP/IP 등 많은 범위의 소프트웨어를 지원한다. 이것은 GNU General Public License 에 의해 자유롭게 배포될 수 있다. (부록 E 참조) 리눅스는 386,468 PC를 워크스테이션으로 만들어 줄 것이다. 이것은 여러분 의 손끝에서 완전한 유닉스의 힘을 보여줄 것이다. 모든 사업체에서 Network 상에 리눅스를 설치하여, 재정관리나 병원자료관리의 운영체계로 사용하고, 다 중사용자를 위한 환경제공, 컴퓨터 통신 등등에 이용될 수 있다. 대학에서는 운영체제 프로그래밍과 설계를 리눅스를 이용하여 가르칠 수 있다. 그리고 물 론 컴퓨터 신봉자들은 집에 앉아서 프로그래밍이나 개인적인 작업, 그리고 hacking을 할 수 있다. 리눅스를 유닉스와 다르게 하는 가장 큰 차이점은 공개 소프트웨어라는 것 이다. 이것은 여전히 지원자들에 의해 개발되고 있고, bug들이 보고되고 고 쳐지고 있다. 누구나가 리눅스 개발에 참여할 수 있다. (언제나 환영) 여러분 이 가지고 있는 이 책은 바로 리눅스를 위한 여행 안내서이다. 1.1 이 책에 관해 이 책은 리눅스의 설치와 대략적인 도입에 대해 다룬다. 이 책의 목적은 새 로운 사용자들을 모으고 자신을 가지고 리눅스를 다루게 하는 것이다. 너무 깊 은 부분을 다루는 대신 우리는 여러분 자신이 스스로 찾을 수 있는 배경을 제 시해 줄 것이다. 리눅스를 설치하고 사용하는 것은 그다지 어렵지가 않다. 그 러나 다른 상용 유닉스처럼 가끔씩 모든 일을 정확하게 할 수 있는 검은 마법 의 세계가 있다. 우리는 이 책이 편안한 리눅스 여행버스가 되어 이 운영체계 의 다루는 방법을 여러분에게 보여줄 것이다. 이 책에는 다음과 같은 내용이 포함되어 있다. * 리눅스는 무엇인가 ? 이 부분에서는 이 특별한 운영체계의 설계와 사상 그리고 리눅스가 여 러분을 위해 무엇을 할 수 있는가를 다룬다. * 리눅스를 사용하는데 필요한 장비들. (어떤 종류의 hardware구성이 완 벽한 시스템인가?) * 리눅스를 구하는 법과 설치. 세계에는 많은 종류의 리눅스가 있다. (한국에는 SLS, 슬랙웨어) 우리 는 이것들을 어떻게 여러분의 PC에 설치할 것인가를 이야기할 것이 다. * 상세하고도 간결한 유닉스 사용법. 이 부분은 아직 유닉스에 익숙하지 않은 사람들을 위한 것이다. 여기 에서는 유닉스 초보자들이 스스로 이 시스템을 사용하기에 충분한 기본 적인 know-how를 제공해 줄 것이다. * 리눅스 시스템 관리. 이 부분에서는 새로운 리눅스 시스템 관리자들 이 친근해야 할 가장 중 요한 작업인 사용자관리, 화일시스템 관리 등을 다룬다. * 더 나은 리눅스의 면모. 이 부분에서는 X Window System과 TCP/IP그리고, SLIP의 Networking과 전자메일과 전자신문을 다룬다. 이 책은 PC를 가진 사용자중 리눅스를 시작하길 원하는 사람들을 위 한 것이다. 우리는 여러분이 유닉스에 익숙하고 유닉스를 사용해 본 경 험이 있기를 바라지는 않는다. 유닉스에 익숙하지 않은 사람들을 위해 부록 A에 유용한 정보를 수록해 두었다. 이 책에서는 기본적인 유닉스 개념을 다룬다. 1.2 리눅스의 짧은 역사 유닉스는 세계에서 가장 유명한 운영체계중 하나이다. 왜냐하면 넓고, 탄탄 한 바탕이 있기 때문이다. 이것은 1970년대 중반에 미니컴퓨터와 mainframe에 서의 다중작업을 위해 개발되었다. 하지만 때때로 모자라는 interface와 표준화 의 결핍에도 불구하고 세계에서 가장 훌륭한 체계로 자라났다. 유닉스가 인기 있는 진짜 이유는 무엇일까? 수많은 hacker들은 유닉스가 진 정한 운영체계라고 느낀다. 많은 종류의 유닉스가 PC로 부터 슈퍼컴퓨터에까지 존재한다. PC를 위한 많은 유닉스는 아주 비싸고 비효율적이다. AT&T의 System V (for 386)은 US$1500이나 된다. 리눅스는 핀란드의 헬싱키 대학생 Linus Torvalds에 의해 개발된 자유롭게 배포할 수 있는 유닉스이다. 리눅스는 많은 유닉스 프로그래머와 Internet 사 람들의 도움을 받았다. 리눅스의 kernel은 AT&T나 다른 유닉스의 source나 code를 사용하지 않는다. 리눅스에서 사용가능한 많은 소프트웨어는 프로그램 을 자유롭게 공유하자는 GNU에 의해서 만들어졌다. 전세계의 프로그래머들 은 자라나는 바보같은(?) 리눅스를 위해 헌신하고 있다. 리눅스는 Linus Torvalds의 취미활동에 의해 개발되었다. 이것은 Andy Tanenbaum에 의해 개발된 small UNIX system인 Minix에 영향받았다. 1.3 시스템상의 특징 리눅스는 다른 상용 유닉스의 모든 특징들을 포함하고, 부가적으로 다른 특 징도 포함하고 있다. 이 절에서는 리눅스 kernel에 대해 약간 다루기로 한다. 리눅스는 완벽한 멀티태스킹, 멀티유저 운영체계이다. (다른 유닉스도 마찬 가지이지만) 이것은 여러 사용자가 한번에 같은 기계에 접근하고 다중 프로그 램을 사용할 수 있음을 의미한다. 리눅스는 IEEE POSIX.1, System V, 그 리고 BSD등의 많은 표준의 유닉스들과 호환성을 가진다. 많은 공개 유닉스 소프트웨어들이 Linux를 위해 다시 컴파일되었다. 부가적으로 리눅스의 모든 source code(kernel, device drivers, libraries, user programs, development tools)가 자유롭게 배포가능하다. 이는 리눅스의 특별한 내적 특징은 POSIX job control, pty devices를 포함 하고 나라별 혹은 관습적인 키보드 dirver를 지원하는 것이다. 리눅스는 또한 text mode에서는 다중 login을 허락하는 가상 콘솔(virtual console)을 지원한 다. Kernel은 387(coprocesser)을 자동으로 에물레이트해준다. 따라서 진짜 coprocesser가 필요가 없다. (그러나 있으면 좋겠죠잉.!!!!!) 리눅스는 데이터를 정리하는데 다양한 filesystem을 지원한다. ext2fs같은 다 양한 filesystem은 리눅스를 위해서 특별하게 개발되어져 왔다. Minix-1과 Xenix같은 다른 filesystem도 역시 지원된다. MS-DOS filesystem도 또한 지원 되고 MS-DOS partition이나 floppy도 mount에 의해 바로 접근할 수 가 있다. ISO 9660 CD-ROM filesystem(모든 표준 format의 CD-ROM을 읽을 수 있 다.)도 역시 지원된다. Filesystem에 대해서는 2장과 4장에서 다룬다. 리눅스는 TCP/IP network를 완벽하게 제공한다. 이것은 유명한 Ethernet card, SLIP(Serial Line Internet Protocol, Serial Port를 통하여 TCP/IP network에 접 속해 준다)을 포함한다. 완벽한 TCP/IP(FTP, telnet, NNIP, SMTP)서버와 클 라이언트가 지원된다. Newworking에 대해서는 5장에서 다룬다. 리눅스의 kernel은 Intel 386과 486의 protected-mode의 사용을 위해 개발되 었다. 특별히 리눅스는 protected-mode의 memory관리 paradigm과 많은 다른 진보된 특징을 이용한다. 386 protected-mode program에 능숙한 사람은 386 chip이 유닉스와 같은 다중작업을 위해 설계되었다는 것을 알 것이다. 리눅스 도 물론 이 기능을 이용한다. 리눅스 kernel은 demand-paged loaded executables를 지원한다. 이것은 단지 실제적으로 사용되는 프로그램의 segment만이 디스크로부터 메모리로 읽혀짐 을 의미한다. 또한 copy-on-write pages가 executables를 공유한다. 따라서, 여 러 종류의 프로그램이 한번에 운영되면 그들은 물리적인 메모리의 page를 공 유하게 될 것이고, 전체적인 메모리 사용량을 줄일 것이다. 사용가능한 메모리 양을 늘리기 위해서 리눅스는 역시 disk paging을 이 용한다. 그러니까 256메가바이트의 스왑을 한다. 따라서 여러분은 한번에 많은 사용자를 지원하고 큰 응용 프로그램을 운영할 수가 있게 된다. 그러나 스왑 은 물리적인 RAM을 확실히 대체할 수는 없다.- 스왑은 느리다. RAM보다 하 드드라이브가 느리니깐. 리눅스 kernel은 또한 사용자 프로그램과 디스크 캐쉬로 메모리를 할당한 다. 이런 방법으로 모든 free memory는 캐쉬로 사용이 되고 큰 프로그램이 실 행이 되면 캐쉬가 차지하고 있던 메모리는 그 프로그램에 할당하게 된다. 1.4 소프트웨어적인 특징 이 절에서는 리눅스에서 사용가능한 소프트웨어를 소개하고 상식적인 컴퓨 터 작업에 대해 언급한다. 앞에서도 말했듯이 이 소프트웨어의 대부분이 자유 롭게 배포가 가능하다. 1.4.1 기본적인 명령어와 유틸리티 상용 유닉스에서 여러분이 찾고자 하는 모든 유틸리티가 리눅스에 맞게 수 정되었다. 이것은 기초적인 명령인 ls, awk, tr, sed, bc, more등을 포함한다. 따 라서, 여러분이 익숙한 다른 유닉스 환경이 리눅스에서도 이루어질 수 있다. 모든 표준 명령어와 유틸리티가 리눅스에 있다. (리눅스 초보자는 기초적인 유 닉스 명령어 소개부분인 3장을 꼭 볼 것 ..!!) vi, ex, pico, jove뿐만 아니라, GNU Emacs, Lucid Emacs (X Window용)와 joe등 많은 텍스트 에디터가 사용가능하다. 여러분이 사용하기에 익숙한 텍스트 에디터가 리눅스에 있다. 텍스트 에디터를 선택하는 것도 재미있는 일이다. 많은 유닉스 사용자가 여 전히 단순한(?) vi같은 에디터를 사용한다. 그러나, vi는 많은 한계가 있다. 그 리고 더욱 신세대적인(또한 복잡한) 에디터인 Emacs등이 점차 평판을 얻고 있다. Emacs는 완벽한 LISP에 기초한 macro language와 interpreter와 완벽한 명령구문을 지원한다. Emacs macro package는 전자메일과 전자뉴스를 읽고 명부의 목차를 편집하기 위해 존재한다. 한가지 흥미로운 것은 대부분의 기본 적인 리눅스 유틸리티는 GNU 소프트웨어라는 것이다. 이 GNU 유틸리티는 표준 유닉스(BSD에서 AT&T까지)에서는 없는 진보된 기능이 포함되어 있다. 예 를 들어, GNU의 vi 에디터인 elvis는 AT&T에는 없는 macro language를 포 함하고 있다. 많은 사람들이 GNU 프로그램이 상용보다 뛰어나다고 생각한다. 가장 중요한 유틸리티는 바로 쉘(shell)이다. 쉘은 사용자의 명령을 읽고 실행하는 프로그램을 말한다. 부가적으로 많은 쉘들은 job control(사용자에게 한번에 여러 프로세스를 운영할 수 있게 해준다.) 입출력 리다이렉션, 쉘 스크립트를 쓰기 위한 명령 언어 등의 기능을 제공한다. 쉘 스크립트란 MS-DOS의 batch-file과 비슷하다고 생각하면 된다. 리눅스에 사용가능한 많은 쉘이 있다. 이 쉘들의 중요한 다른 점은 명령어 언어이다. 예를 들어 C shell(csh)은 다소 C 언어와 비슷한 명령어 언어를 가지 고 있다. 전통적인 Bourne shell은 다른 명령어 언어를 사용한다. 어떤 명령어 언어를 제공하는가가 쉘 선택의 주안점이 될 수 있다. 여러분이 선택한 쉘이 넓은 범위에서 여러분의 리눅스 작업환경이 된다. 어떤 쉘에 익숙하던지 그것 은 아마도 리눅스에 맞게 고쳐질 것이다. 가장 인기 있는 쉘은 GNU Bourne Again Shell (bash <- 많이 봤죠...!!)이다. (다른 쉘로는 zsh, a shell Bourne-like shell the korn shell(ksh), BSD'S ash, rc, Plan 9 shell이 있다.) 이러한 기본적인 유틸리티의 중요성이 무엇일까? 리눅스는 여러분이 필요 한 시스템의 구성을 위한 특이한 기회를 준다. 예를 들어, 만약 여러분 혼자서 시스템을 사용하고 vi 에디터를 사용하기를 원하고, 그리고 bash를 쉘로 채 택하면 다른 에디터나 쉘은 설치할 필요가 없다. 1.4.2. 텍스트 프로세싱과 워드 프로세싱 거의 모든 컴퓨터 사용자들은 여러 종류의 문서를 필요로 한다. (얼마나 많 은 PC 사용자가 펜과 종이를 쓸까 -> 지금 번역하는 나는 펜 쓰는디....) PC의 세계에서는 워드 프로세싱은 보통, 즉 기본이다. 유닉스 세계에서는 텍스트 프로세싱이 보통이다. 이것은 보통 생각하는 워드 프로세싱과는 상당히 다르다. 텍스트 프로세싱 시스템에서의 텍스트는 사용자 가 사용하는 텍스트가 어떻게 format될지를 결정하는 "typesetting language"로 입력된다. 특별한 워드 프로세싱 환경에서 텍스트를 입력하는 대신에 source는 vi 나 Emacs 같은 텍스트 에디터에 의해 수정된다. 한번 source text가 완성되 면 사용자는 source를 프린팅에 적합하도록 하는 여러 종류의 프로그램으로 텍스트를 format한다. 이것은 문서를 프린트가 가능한 형태로 편집하는 것이 다. 리눅스에는 많은 종류의 텍스트 프로세싱 시스템이 있다. 하나는 groff이고 Bell Labs에 의해 처음으로 개발된 text formatter인 nroff도 있는데 역시 세 계의 많은 유닉스에서 사용되고 있다. 다른 최신의 텍스트 프로세싱 시스템 은 TEX 으로 Donald Knuth of computer science fame에 의해 개발되었 다.(LATEX 또한 사용가능하다.) TEX과 groff같은 텍스트 프로세서는 각각의 formatting language로서의 문법 을 가지고, 이는 아주 상이하다. 각각에서 하나의 formatting system을 선택하는 것은 여러분이 필요로 하는 유틸리티와 여러분의 취향에 의해 결정될 것이다. 예를 들어 어떤 사람들은 groff가 매우 특이하다고 여겨 TEX을 사용한다. 그러나 groff는 ASCII 형태로 출력할 수 있고 터미널에 보여줄 수 있다. 반면에 TEX은 단지 출력을 위한 프린팅 디바이스의 역할을 한다. 그러나 많은 프로 그램이 TEX으로 format된 문서를 단순한 ASCII로 전환하고 또는 TEX에서 groff로 변환한다. 다른 텍스트 프로세싱 시스템은 texinfo로 TEX의 확장판이다. texinfo는 프린트문서를 만들 수 있다. 텍스트 프로세서는 문서, 리포트, 잡지 기사, 책 편집 등 여러 분야에서 사 용된다. 단순한 텍스트 화일로 source language를 처리할 수 있는 능력은 텍스 트 프로세서 스스로의 많은 확장이 된다. 왜냐하면 source 문서는 특정한 format으로 저장되지 않았기 때문에 어떤 워드 프로세서에서도 읽혀질 수 있 기 때문이다. Formatting language는 어떤 모습일까? 일반적으로 formatting language source는 자신의 text를 포함하고 "control codes"와 함께 font를 바꾼다든지 여 백을 준다든지 목록을 작성한다던 지하는 영향을 주게 된다. 다음 보기를 보라. Mr. Torvalds: We are very upset with your current plans to implement post-hypnotic suggestion in the Linux terminal driver code. We feel this way for three reasons: 1. Planing subliminal messages in the terminal driver is not only immoral, it is a waste of time; 2. It has been proven that "post-hypnotic suggestions" are ineffective when used upon unsuspecting UNIX hackers; 3. We have already implemented high-voltage eletric shocks, as a security meaure, in the code for login. We hope you will reconsider. 다음은 위의 문서를 LATEX formatting language로 나타낸 것이다. \begin{quote} Mr. Torvalds: We are very upset with your current plans to implement {\em post-hypnotic suggestion\/} in the {\bf Linux} terminal driver code. We feel this way for three reasons: \begin{enumerate} \item Planting subliminal messages in the kernel driver is not only immoral, it is a waste of time; \item It has been proven that ''Post-hypnotic suggestions'' are ineffective when used upon unsuspecting UNIX hackers; \item We have already implemented high-voltage electric shocks, as a security measure, in the code for {\tt login}. \end{enumerate} We hope you will reconsider. \end{quote} 저자는 아무 텍스트 에디터로 위의 글을 입력했고 LATEX을 이용하여 출력 format의 형태로 변형시켰다. 첫번째 관점에서 typesetting language는 특이하 게 보인다. 그러나 사실은 배우기가 쉽다. 텍스트 프로세싱 시스템을 사용하는 것은 typographical 표준을 강요한다. 예를 들어 모든 문서 내에서 열거된 목 록은, 만약 저자가 열거된 목록 환경의 정의를 수정하지 않으면 모두 같아 모 인다. 원초적 목표는 저자가 typesetting에 대하여 근심하는 대신에 진정한 텍 스트를 쓰는 데 집중하게 하는 것이다. WYSIWYG 워드 프로세서는 많은 이유에서 매혹적이다. 그것은 문서를 편집 하기 위한 막강한 visual interface를 제공한다. 그러나 이 interface는 사 용자에게 접근가능한 text layout면에서 한계가 있다. 예를 들어 많은 워드 프 로세서는 수학공식같은 복잡한 표현을 위하여 특별한 "format language"를 제 공한다. 텍스트 프로세싱의 표면적 이익은 시스템이 여러분이 의도하고자 하는 바를 정확하게 해준다는 것이다. 역시 텍스트 프로세싱 시스템은 어떤 텍스트 에디 터로도 source text를 편집할 수 있게 해 주며 source는 쉽게 다른 format 형 식으로 바뀔 수 있다. 많은 워드 프로세서 사용자들은 자기가 편집하는 format형식의 텍스트로 보 는데 익숙해져 있다. 다른 말로 말하자면 워드 프로세서로 글을 쓸 때 보통 그 텍스트가 어떻게 나타날지 걱정하지 않는다는 뜻이다. 글 쓰는 사람은 source에 사용된 format 명령으로부터 텍스트가 어떻게 보여져야 할지 기대하 는 것을 배운다. 프린트되기 전에 화려하게 format된 문서를 보여주는 프로그 램이 있다. 예를 들어 xdvi라는 프로그램은 X Window의 TEX에서 "device independent" file을 변형하여 보여준다. 또 xfig같은 프로그램은 도표나 diagram을 그리기 위해 WYSIWYG을 제공한다. 부가적으로 nroff같은 텍스트 프로세서는 워드 프로세싱이 가능하다. 그러 나 아직도 많은 사람들은 텍스트 프로세싱을 사용하는 것을 더 좋아한다. 왜 냐하면 그것은 그래픽환경과 많이 독립적이기 때문이다. 또한 idoc도 리눅스 에서 사용가능하다. 그리고 머지 않아 많은 상용 워드 프로세서도 리눅스에 채 용되기를 희망한다. 만약 여러분이 텍스트 프로세싱으로 인해 워드 프로세싱 을 포기하기를 원하지 않는다면 MS-DOS를 항상 실행할 수 있으며 또는 리눅 스와 함께 다른 운영체제도 사용가능하다. 텍스트 프로세싱과 관계 있는 많은 유틸리티가 있다. TEX font 설계에 사용 되는 강력한 METAFONT가 리눅스에서 사용되는 TEX에 포함되어 있다. 다른 프로그램으로 맞춤법검사기인 ispell이 있다. makeindex라고 하는 LATEX문 서뿐 아니라 groff와 TEX에 기초한 많은 종류의 문서양식과 수학공식 format 를 위한 macro package가 있다. TEX 또는 groff source와 많은 다른 format를 변환하기 위한 Conversion program이 유용하다. 1.4.3 프로그래밍 언어와 유틸리티 리눅스는 모든 표준 library, programming tool, compiler와 여러분이 다른 상 용 유닉스에서 찾고자 하는 debugger등 완벽한 유닉스 프로그래밍 환경을 제 공해 준다. 유닉스 소프트웨어 개발에서 응용 프로그램과 시스템 프로그래밍 은 흔히 C나 C++로 이루어진다. 리눅스의 표준 C, C++ compiler는 GNU's gcc이다. 이것은 보다 진보되고 현대적인 컴파일러로써 많은 option을 지원한다. 이것은 역시 AT&T 3.0의 C++뿐 아니라 Objective-C, 다른 object-oriented dialect of C 도 컴파일이 가능하다. C와 C++뿐 아니라 Smalltalk, FORTRAN, Pascal, LISP, Scheme, 그리고 Ada등 많은 컴파일러와 interpreter도 리눅스에 맞게 수정되었다. 또한 많은 386 protected-mode assembler도 사용가능하다. 진보된 gdb debugger를 사용하면 오류의 원인을 찾아 조사해준다. Profiling 유틸리티인 gprof는 여러분의 프로그램을 위해 통계를 수행하고, 여러 분에게 여러분의 프로그램이 어떤 부분에서 대부분의 실행시간을 낭비하는지를 알게 해 줄 것이다. Emacs는 대화식의 편집과 여러 프로그래밍 언어를 컴파 일하기 위한 환경을 제공해 준다. GNU make와 imake는 큰 응용 프로그램의 컴파일 관리에 사용된다. 리눅스는 동적으로 연결된 공유 라이브러리(DLL)를 충족시킨다. 이로 인해 binary는 그 크기가 더욱 작아져 실행시 subroutine code와 연결된다. DLL library는 역시 응용 프로그램 프로그래머에게 자신의 code로 기능 정의를 할 수 있게 해 준다. 예를 들어 만약 프로그래머가 자신만의 malloc() library routine을 쓰려고 할 때 linker는 라이브러리사이에서 발견되는 것 대신에 프로 그래머의 새로운 루틴을 사용하게 된다. 리눅스는 유닉스 응용 프로그램을 개발하기를 희망한다. 리눅스는 보다 근대 적인 프로그래밍 환경을 제공해 준다. POSIX.1 같은 다양한 표준이 지원되고 리눅스를 위해 개발된 소프트웨어가 다른 시스템에 쉽게 포팅이 되게 해준 다. 유닉스 프로그램 전문가나 시스템 관리자가 집에서 리눅스를 이용하여 소 프트웨어를 개발할 수 있고 직장에서는 유닉스에 맞게 그 소프트웨어를 전환 시킬 수 있다. 이것은 많은 시간과 돈을 아껴줄 뿐 아니라 단일 사용자 시스 템으로 여러분의 집에서 편하게 일하게 해준다. Computer Science 학생들은 유닉스 프로그래밍을 배우고 시스템의 kernel architechture 같은 다른 측면을 탐험할 수 있다. 리눅스로 완벽하게 라 이브러리와 프로그래밍 유틸리티에 접근할 수 있을 뿐 아니라 완벽하게 kernel 과 libaray source code를 손끝에서 다룰 수가 있다. 1.4.4 The X Window System X Window(이하 X)는 유닉스의 표준 graphics interface이다. 이것은 많은 응 용 프로그램을 지원하는 강력한 환경이다. X를 사용함으로써 사용자는 한번에 다중 terminal window screen을 사용하고 각각의 window에는 다른 login session을 포함하게 된다. 마우스 같은 pointing device가 종종 X에 사용되 지만 꼭 필요한 것은 아니다. 게임, 그림 유틸리티, 프로그래밍과 문서를 위한 tool등등 많은 X를 위한 응 용 프로그램이 만들어졌다. 리눅스와 X로 여러분의 시스템은 워크스테이션이 될 것이다. TCP/IP networking을 이용하여 여러분은 다른 기계에서 X 프로그 램을 실행하고 볼 수가 있다. X는 원래 MIT에서 개발되었으며 자유롭게 배포가 가능하다. 그러나 상업적 인 사람들이 원래의 X의 기능을 보강하여 보급하게 되었다. 리눅스에서 사용 가능한 X는 XFree86으로 알려져 있다. 이것은 리눅스같이 80386에 기초한 유 닉스에서 자유롭게 배포가능한 X11R5를 포팅시킨 것이다. XFree86은 많 은 비디오 카드를 지원하는데 VGA, SVGA 그리고 많은 accelerated video adaptor등이다. 표준 X 응용 프로그램인 xterm, xdm, xman, xclock등 다수가 포함되어 있 다. 이외에 X에서 사용가능한 응용 프로그램이 많지만 여기서 언급하기 는 어렵고 XFree86은 원본 MIT release의 표준 응용 프로그램을 포함하는 것 은 밝혀둔다. 많은 다른 것들도 사용가능하고 이론상으로 어떤 X 프로그 램도 완벽하게 리눅스에 맞게 컴파일될 수 있다. X interface의 외형과 느낌은 넓은 범위의 window manager에 의해 컨트롤 된다. 표준 XFree86은 고전적인 MIT window manager인 twm을 포함하고 더 진보된 Open Look Virtual Window Manager(olvwm)같은 것도 역시 사용가능 하다. 리눅스 사용자 사이에 아주 인기 있는 window manager는 fvwm이다. 이것은 twm의 반만큼의 메모리를 필요로 한다. 이것은 virtual desktop 뿐 아니라 window를 위한 3-D도 제공한다. 많은 리눅스에서 표준 window manager로 fvwm을 사용한다. XFree86은 프로그래밍 라이브러리와 X 프로그램을 개발하기를 원하는 프 로그래머를 위한 화일들을 포함하고 있다. Athena, Open Look, Xaw3D등이 지원된다. 모든 표준 font, bitmap, man page와 문서가 포함되었고 PEX(3-D graphics)또한 지원된다. 많은 수의 X 프로그램 프로그래머가 개발을 위해 상용 Motif set을 사용한 다. 여러 상인(?)이 리눅스 Motif binary를 단일 또는 다중 사용자 라이센스로 판매한다. 왜냐하면 Motif는 비싸고 많은 리눅스 사용자가 그것을 소유하고 있지 않기 때문이다. 그러나 Motif와 정적으로 연결된 binary가 공개 배포 될 것이다. 따라서 만약 여러분이 Motif를 사용하여 프로그램을 짜고 그것을 자유로이 배포하기를 원한다면 여러분은 아마 더 많은 리눅스사용자들이 Motif 없이 프로그램을 사용하게 해줄 것이다. X 가 필요로 하는 것들을 알아보자. 386에 4메가 램이면 X를 운영할 수 있 다. 그러나 완벽하게 사용하기 위해서는 8메가나 더 많은 물리적 램이 요구된 다. 물론 CPU도 빠를수록 좋다. 그러나 더 많은 물리적 램이 더 유리하다. 또한 빠른 비디오 카드도 요구된다. 효율적인 하드웨어를 가지고 X를 운영 하고 리눅스도 빨라지면 여러분은 여러분의 PC가 워크스테이션이 된 느낌 을 받을 것이다. 5장에서 X의 설치와 사용에 대해서 더 많이 언급할 것이다. 1.4.5 네트워킹 여러분은 세계 사람들과 통신을 하기를 원하는가 ? 리눅스는 유닉스를 위한 두개의 네트워킹 프로토콜을 지원한다. 그것이 바로 TCP/IP와 UUCP이 다. TCP/IP(Transmission Control Protocol/Internet Protocol)는 잘 알려진 단 일 네트워크인 인터넷으로 전 세계와 통신을 할 수 있도록 해 준다. 리눅스 TCP/IP, 그리고 네트워크의 연결로 여러분은 다른 사용자나 기계에 전자메 일, USENET 뉴스를 이용하여 인터넷에 접근하고 FTP를 이용 화일을 전 송할 수 있다. 인터넷에는 많은 리눅스 시스템이 있다. 대부분의 TCP/IP 네트워크는 물리적 네트워크 전송자로 Ethenet을 사용한다. 리눅스는 D-Link pocket Ethernet adaptor(laptop용)를 포함하여 PC를 위한 많은 인기 있는 Ethernet card를 지원한다. 그러나, 모든 사용자가 다 집에 Ethernet를 설치하지 않았기 때문에, 리눅 스는 역시 모뎀을 통해 인터넷에 접속을 해주는 SLIP(Serial Line Internet Protocol)를 지원한다. SLIP를 사용하기 위해서 여러분은 dial-in access를 허용하는 네트워크에 연결된 SLIP 서버에 접근할 필요가 있을 것이다. 많은 사업체와 대학은 그러한 SLIP를 지원한다. 사실 만약 여러분의 리눅스가 모 뎀뿐 아니라 Ethernet도 연결되어 있으면 여러분은 그것을 다른 호스트를 위한 SLIP 서버로 구성할 수가 있다. NFS(Network File System)은 네트워크 상에서 다른 기계와 여러분의 기계 사이에 파일을 공유하게 해준다. FTP(File Transfer Protocol)는 다른 기계와의 파일 전송을 하게 해 준다. Sendmail이라는 응용 프로그램은 전자메일을 송신 하고 수신하기 위해서 SMTP protocol(C-News나 INN 같은 NNTP에 기초한 전자 메일 시스템)을 사용한다. telnet, rlogin, rsh 등은 네트워크 상에서 다른 기계에 login이나 실행명령을 내릴 수 있게 해준다. 그리고 finger는 다른 인터 넷 사용자에게서 정보를 얻을 수 있게 도와준다. 바깥세계에는 글자 그대로 수 톤이나 되는 TCP/IP에 기초한 응용 프로그램과 프로토콜이 존재한다. 모든 메일이나 뉴스 독자는 elm, pine, rn, nn, tin등을 리눅스에서 사용 가 능하다. 어떤 것을 여러분이 더 좋아하던지 여러분은 전세계에 전자메일과 뉴스를 주고받는데 리눅스를 사용하고 구성할 수 있다. 만약 여러분이 다른 상용 유닉스의 TCP/IP 응용 프로그램을 사용해본 경험이 있다면, 리눅스는 여 러분에게 매우 친숙해 보일 것이다. 시스템은 표준 socket programming interface를 제공하고 따라서 사실상 TCP/IP를 사용하는 어떤 프로그램도 리 눅스에 포팅될 수가 있다. 리눅스의 X 서버는 또한 TCP/IP를 지원하며 다른 기 계에서 실행되고 있는 프로그램을 여러분의 모니터에 보여줄 것이다. 5장에 서 SLIP를 포함하여 TCP/IP(모두 리눅스용)의 설치와 구성에 대해서 언급할 것 이다. UUCP(Unix-to-Unix Copy)는 유닉스 기계사이에서 파일을 전송하고 전자메일 과 전자뉴스를 보내고 받는데 사용되었던 오래된 기술이다. UUCP는 모뎀과 전화선을 통해서 서로 서로의 기계에 연결한다. 하지만 TCP/IP를 이용하여 전 송도 가능하다. 만약 여러분이 TCP/IP 네트워크나 SLIP 서버로 접근할 수가 없다면 여러분은 UUCP를 이용하여 파일 송수신과 전자메일 송수신에 사용 할 수 있을 것이다. 더 많은 정보를 얻고 싶으면 5장을 보라. 1.4.6 통신 프로그램과 BBS 소프트웨어 여러분이 만약 모뎀을 가지고 있다면, 리눅스에서 사용가능한 통신 프로그램 으로 다른 기계와 통신을 할 수 있을 것이다. 많은 사람들이 통신 프로그램을 이용하여 BBS(전자게시판)에 접속한다. 다른 사람들은 자신의 모뎀을 직장이나 학교의 유닉스 시스템에 연결하기 위하여 사용한다. 여러분은 여러분의 모뎀 과 리눅스를 이용하여 게시물이나 공개 파일들을 송수신할 수가 있다. 리눅 스의 통신 프로그램은 다른 운영체계의 통신 프로그램과 매우 흡사하다. 한번 이라도 통신 프로그램을 사용해본 사용자는 누구든지 리눅스의 그것도 친숙하 게 느낄 것이다. 리눅스 통신 프로그램 중 가장 인기 있는 것 중의 하나는 Seyon이다. Seyon은 X에서 사용되며 Kermit, ZModem등등 많은 프로토콜을 지원한다. 다른 통신 프로그램으로는 C-Kermit, pcomm, minicom등이 있다. 이들 프로그 램은 다른 운영체계의 통신 프로그램과 매우 흡사하며 쉽게 배우고 사용할 수가 있다. 만약 여러분이 SLIP 서버에 접근할 수가 없다면 여러분의 serial line으로 다 중송신을 하기 위한 term을 사용할 수 있을 것이다. term은 원거리의 기계에 연결하여 모뎀으로 다중 login session을 열게 해줄 것이다. term은 역시 여 러분의 local X 서버에 serial line을 통하여 연결된 X 클라이언트를 전환하게 해주며 여러분의 리눅스 시스템에 원거리의 X 응용 프로그램을 보여줄 것이 다. KA9Q도 SLIP와 비슷한 interface를 충족시킨다. BBS를 운영하는 것은 많은 사람들에게 아주 재미있는 취미생활이다. 리눅스 는 다른 운영체계에서 사용가능한 것보다 더 강력한 BBS 소프트웨어를 지 원한다. 전화선과 모뎀 그리고 리눅스를 가지고 여러분은 전세계의 사람들이 이용할 수 있는 아주 훌륭한 BBS의 운영자가 될 수 있다. 리눅스의 BBS 소프트웨어로는 XBBS와 UniBoard BBS가 포함되어 있다. 대부분의 BBS 소프트웨어는 단지 특정한 기능과 응용 프로그램만 사용가능한 메뉴에 근거한 시스템으로 만들어 버린다. 기존의 틀을 깨는 접근방법이 바로 완벽한 유닉스 접근방법이다. 반면에 이것은 시스템 관리부분 유지의 공정한 양이 요구된다.(이것은 쉽게 실행된다.) 그리고 여러분의 리눅스 시스템으로부 터 공적인 유닉스 접속은 그리 어렵지가 않다. 만약 여러분이 TCP/IP 네트워 크나 UUCP로 접근할 수 없다면, 리눅스는 전화선을 통하여 전자메일과 뉴스 를 교환할 수 있는 FidoNet같은 BBS 네트워크를 지원하므로 이것으로 통신을 할 수 있게 해줄 것이다. 통신과 BBS에 관한 더 많은 정보를 원한다면 5장 을 보면 찾을 수 있을 것이다. 1.4.7 MS-DOS의 사용 MS-DOS용 프로그램은 아주 다양하다. 잘 알려진 리눅스 MS-DOS Emulator 는 리눅스에서 바로 MS-DOS용 프로그램을 사용할 수 있게 해 준다. 비록 리눅스와 MS-DOS가 완전히 다른 운영체계라고 해도 386 protected-mode환경 은 마치 8086-emulation mode에서 운영되는 것처럼 특정한 일을 해준다. MS-DOS emulator는 여전히 개발단계에 있지만, 많은 유명한 프로그램을 사 용할 수 있다. 그러나 기괴한 특징을 가진 MS-DOS 응용 프로그램은 절대 로 지원될 수가 없다. 왜냐하면 이것은 단지 emulator이기 때문이다. 예를 들어 여러분은 386 protected-mode로 동작하는 프로그램이 리눅스에서도 돌아 가기를 원해서는 안된다. Microsoft Windows의 386 enhanced mode 등... 리눅스에서 성공적으로 돌아가는 MS-DOS용 응용 프로그램을 보면 다음과 같다. 4DOS, Foxpro 2.0, Harvard Graphics, MathCad, Stacker 3.1, Turbo Assembler, Turbo C/C++, Turbo Pascal, Microsoft Windows 3.0(real mode), WordPerfect 5.1 물론 표준 MS-DOS 명령과 Pkzip 같은 유틸리티도 역시 잘 사용된다. MS-DOS Emulator는 MS-DOS용 프로그램은 별로 사용하지 않고 리눅스를 자 주 그리고 많이 사용하는 사람에게 절대적으로 필요한 것이다. 물론 Emulator 가 완벽하게 여러분을 만족시키지 않는다면 여러분은 리눅스와 MS-DOS를 동 시에 사용할 수 있다. LILO를 사용하면 여러분은 시작될 때 운영체계를 선 택할 수 가 있다. 리눅스는 OS/2같은 다른 운영체계와 동시에 한 컴퓨터에서 존재가 가능하다. 리눅스는 리눅스와 MS-DOS 사이에 파일을 전환하기 위한 장치를 제공한 다. 여러분은 리눅스 상에서 MS-DOS 파티션이나 플로피에 접근할 수 있으며 바로 MS-DOS 파일에 접근할 수가 있다. WINE(X 상에서 MS-Windows를 실행하게 해주는 emulator)이 현재 진행중이 다. 일단 WINE가 완성되면 리눅스에서 MS-Windows를 바로 실행할 수가 있 을 것이다. 이것은 Sun Microsystem의 WABI Windows emulator가 매우 흡사 하다. 지금 이 글을 번역하고 있는 동안에도 WINE는 여전히 계속 진행중이다. 5장에서 리눅스에서 사용가능한 MS-DOS 프로그램이 소개된다. 1.4.8 다른 어플리케이션들 리눅스의 초기 목적은 일반적인 유닉스였지만 지금 이것은 빠르게 변하고 있다. 사업이나 과학적인 소프트웨어가 추가되고 확장되고 상업적인 소프트 웨어 상인들도 응용 프로그램이 성장하는데 공헌을 하고 있다. 리눅스에서도 Postgres, Ingres, Mbase 같은 여러 데이터베이스가 사용가능 하다. 이것은 다른 상용 유닉스에서 찾아 볼 수 있는 완벽한 특징과 전문적인 클라이언트/서버 기능을 가지고 있다. /xdb(이것은 상용)도 역시 사용가능하다. FELT같은 과학계산 프로그램도 포함되어있다. 그 외에도 plotting이나 자료 분석을 위한 gunplot, MATLAB와 같이 기호적인 수학전문 패키지인 Octave, MS-DOS의 Lotus같은 spreadsheet인 xspread, Fractint fractal generator인 xfractint, 통계를 위한 xlispstat, 원설계와 분석기인 Spice, Image/digital 신 호 처리기인 Khoros가 있다. 물론 많은 프로그램이 리눅스에 포팅되었고 포팅될 수 있고 포팅이 되고 있 다. 리눅스는 완벽한 유닉스 프로그래밍 인터페이스를 제공하고 어떤 과학적 인 프로그램을 위한 충분한 기초를 제공한다. 어떠한 운영체계이던지 게임이 포함되어있다. 리눅스도 마찬가지이다. 문자 위주의 Nethack이나 Moria 같은 성곽 게임, DikuMUD나 TinyMUD 같이 여 러 사용자가 동시에 즐길 수 있는 성곽 게임이 있고 X에서 동작하는 xtetris, netrek, gunchess가 있다. 사실 유닉스에는 아케이드 게임이 없다. 그러나 여 러분은 이것을 명심해야 한다."모든 일 후에 놀이가 없으면 리눅스는 바보 장 난감이 된다"는 것을....... 리눅스는 다양한 사운드 카드와 CDplayer, MIDI sequencer와 editor, digitized sound를 위한 sound editor등 많은 소프트웨어를 지원한다. 아직도 여러분이 필요로 하는 프로그램을 찾지 못했다면 부록 A 에 실린 Linux Software Map 를 볼 것. 리눅스 응용 프로그램을 찾는 또다른 방법은 만약 여러분이 인터넷 에 접속이 가능하다면 리눅스 FTP site의 INDEX를 보면 될 것이다. 만약 여러분이 아직도 뭐가 필요한지 모르겠다면 다른 platform으로부터 리 눅스로 응용 프로그램을 포팅시키면 된다. 모든 자유 배포가능한 유닉스에 기초한 소프트웨어는 별문제없이 리눅스에 맞게 컴파일이 된다. 만약 다 실패 하면 여러분 스스로 응용 프로그램을 짜면 된다.(너무 심했나..!!) 만약 여러분 이 찾는 프로그램이 상용이라도 그것도 찾아보면 공개되어 있어서 사용가능 할 것이다. 아니면 여러분이 자신있게 그 소프트웨어를 만든 회사에 연락해 리눅스에 맞게 프로그램의 binary를 풀어 달라고 하면 될 것이다. 몇몇 개인 은 이미 소프트웨어 회사에 연결되어 있고 그 회사의 프로그램을 리눅스에 맞게 수정해 달라고 요구하고 있으며 또 몇몇은 이미 리눅스에 포팅하는데 성공하였다. 1.5 Linux의 Copyright에 대해 리눅스는 GNU General Public License(GPL)에 의해 배포되었다. GPL은 프 로그램을 모두 공개한다는 GNU의 계획에 의해서 발전되었다. GPL은 공개 소 프트웨어의 공개와 배포에 많은 공헌을 했다. 원래 Linus Torvalds는 GPL보다 더 제한적으로 리눅스 배포를 허용했다. 그것은 리눅스를 자유롭게 배포하고 수정하는 것은 좋으나 배포와 사용에 있어 서 돈과의 교환, 그러니깐 상업적인 행위는 못하게 했던 것이다. 그러나 GPL 은 사람들에게 리눅스를 팔고 공개 소프트웨어에서 이익을 얻도록 했다. 하지 만 어떤 방법으로든 리눅스를 배포하는데 다른 사람에게서 권리를 제한하지 못하도록 했다. 첫째로 Public domain software란 말 그대로 모든 사람이 소유하는 것이다. GPL에 의해 배포되는 소프트웨어는 저자로서 권리가 있다. 말하자면 이것은 국제표준광고 문안작성자 법에 의해서 저작권을 보호받는다는 뜻이다. 그래 서 그 소프트웨어의 저자는 법적으로 자기의 입장을 밝힌다. 그러므로 소프 트웨어가 자유롭게 배포된다고 해서 완전히 공적인 영역에 있는 것이 아님을 의미한다. GPL에 의해 허용된 소프트웨어는 또한 "쉐어웨어"가 아니다. 일반적으로 "쉐어웨어"는 저자에 의해서 소유되고 책임이 주어진다. 그러나 그 저자는 배포 후 사용해보고 사용자에게서 돈을 보내 달라고 요구한다. 그러나 GPL의 소프 트웨어는 자유롭게 배포되고 무료이다. GPL은 또한 공개 소프트웨어를 수정해 가지고 그들 자신의 소프트웨어로 배포하는 것을 허용한다. 그러나 GPL로부터 나온 어떤 것도 다 GPL에 소유 가 된다. 다른 말로 하자면 어떤 하나의 회사도 리눅스를 차지하고 그것을 수 정하고 제한적인 허용으로 그것을 팔 수가 없다는 뜻이다. 만약 리눅스로부 터 파생된 어떤 소프트웨어라도 반드시 GPL의 소유가 되는 것이다. GPL은 공개 소프트웨어를 배포하고 사용하는데 돈을 요구하지 않는다. 그 러나 또한 한 개인이나 기관이 GPL 소프트웨어 배포에 수수료를 받거나 그 것의 배포로 인한 이익을 남기는 것도 허용한다. 그러나 GPL 소프트웨어를 배포하면서 배포자는 상인으로서의 권한을 가져서는 안된다. 만약 여러분이 GPL 소프트웨어를 구입했다면, 여러분을 그것을 자유롭게 배포하거나 또는 여러분자신이 팔아도 된다. 이것은 마치 모순으로 들릴 것이다. 예를 들어보자. 어떤 회사에서 많은 양의 소프트웨어를 CD-ROM에 넣어서 번들로 배포하려고 했다고 하자. 그 회사는 CD-ROM 판매와 배포의 총판매 비용에 대하여 일정량의 비용이 필요할 것이 다. 그래서 그 회사는 심지어 이익을 남기고 소프트웨어를 팔려고 할 것 이다. 이것은 GPL에 의해 허용된다. 공개 소프트웨어를 팔려고 하는 기관은 반드시 GPL에서 발표한 제한을 따라야 한다. 첫째, 그들은 절대 소프트웨어를 사는 사용자에게서 권리를 제한 해서는 안된다. 이것은 만약 여러분이 GPL의 CD-ROM을 구입했다면 여러분도 그 CD-ROM을 자유로이 배포하고 다시 그것을 스스로 팔 수 있다는 것을 의 미한다. 둘째, 그들은 구입하는 사용자에게 소프트웨어가 GPL에 의해 소유됨 을 명백하게 해야 한다. 셋째, 완전한 source code가 무료로 배포되어야 한다. 어떤 회사에 공개 소프트웨어를 판매하고 배포하는 것을 허락하는 것은 아 주 좋은 일이다. 모든 사람이 다 인터넷에 접속하여 소프트웨어를 받을 수 없기 때문이다. 그래서 GPL은 소프트웨어에 자유롭게 접근할 수 없는 사람들 을 위해 소프트웨어를 판매하고 배포하는 회사에게 허용을 해 주고 있다. 예 로서 많은 기관이 리눅스를 우편물을 이용하여 디스켓, 테이프, CD-ROM에 담아서 일정한 이익을 남기고 팔고 있다. 리눅스의 개발자는 이런 이익을 절대로 보지 못할 것이다. 말하자면, Linus는 많은 회사들이 리눅스를 팔기를 원하는 것을 알고 그는 한 푼의 돈도 얻지 못할 것이라는 것을 알 것이다. 공개 소프트웨어세계에서 가장 중요한 것은 돈이 아니다. 공개 소프트웨어 의 목표는 항상 환상적인 프로그램을 개발하고 배포하며 많은 사람들이 그것 을 얻고 사용하도록 하는 것이다. 다음 절에서 우리는 이것이 리눅스의 발 전에 영향을 주는지에 대해 토론할 것이다. 1.6.1 유닉스 초보자에 대한 힌트 유닉스 초보자들의 가장 큰 실수중의 하나가 유닉스에 대한 배경지식도 없이 무턱대고 설치와 실행을 하려는 것이다. 사실 경험없이는 유닉스의 설치와 실행은 엄청나게 힘들다. 사실 유닉스의 모든 경우가 다 그렇다. 누구도 하 루 밤사이에 초보자에서 전문가가 될 수는 없다. MS-DOS 사용자가 유닉스 를 다른 사람의 도움없이 혼자힘으로 사용하려면 너무도 많은 시간과 노력이 필요하다. 유닉스는 MS-DOS나 MS-Windows와는 커다란 차이가 있다. 모든 유닉스 시스템에는 시스템 관리자가 필요하다. 여러분의 시스템에도 시스템 관리자가 필요하다. 그래서 여러분은 가능한 빨리 여러분의 리눅스 시스템의 시스템 관리자가 되어야 한다. 그러기 위해 여러분은 유닉스의 사용과 운영에 대해 많은 공부를 해야한다. 아마 힘들게 들리지도 모르지만, 그렇게 나쁘지만은 않다. 시중에 좋은 유닉 스 관련서적이 많이 있다.(부록 A를 참조) 많은 사람이 유닉스를 배우기 위해 리눅스를 설치한다. 유닉스를 여러분의 시스템에 설치하는 것은 숙련된 시스템 관리자에게도 큰 모험이다. 이 말은 꼭 설치가 힘들다는 말은 아니다. 단지 여러분이 유닉스의 운영에 대한 이해가 필요하다는 것이다. 설치 도중에 문제 가 생긴다고 할 때, 외부의 도움 없이 그 문제를 해결할 수 있을까 ? 여러분 이 유닉스에 초보라면 이 시스템에 크게 좌절할 것이다. 그래서 반드시 리눅 스 시스템을 실행하기 전에 유닉스에 관해 많이 알고 경험을 쌓아야 한다. 1.6.2 유닉스 전문가를 위한 힌트 비록 수 년째 유닉스 프로그래밍과 시스템 관리자로 일해온 사람도 그들이 리눅스를 실행하고 설치하는데 도움이 필요할 것이다. 특정부분의 유닉스 전 문가도 시스템을 파고들어가 보면 그들의 한계에 직면한다. 우선, 리눅스는 상 용인 유닉스와 다르다. 여러분이 우연히 갖게 될 정식적인 유닉스 시스템을 지지하기 위한 것은 아니다. 좀더 자세히 말해서, 리눅스의 발전에 안전성은 중요한 요소다. 그러나 요소뿐만이 아니다. 좀더 중요한 것은 기능일 것이다. 많은 경우 새로운 코드로 표준 커널을 만 든다. 그것이 비록 완전히 기능적이지 않고 여전히 문제가 있어도 그것을 많 은 사용자가 이것을 사용하면서 테스트를 해서 그것이 완전하다고 인정될 때 까지 공개를 지연한다. 예를 들어 보겠다. WINE(The Microsoft Windows Emulator for Linux)도 완전히 테스트하기 전까지 "offcial" alpha release가 있었다. 이런 식으로 리눅스협회에서는 코드를 테스트하고, 발전시키는데 그 들이 사용하기에 "충분히 됐어"라고 말할 때까지 테스트해왔다. 공개 프로그 램은 다 이런 식이었다. 상용인 유닉스의 판매자들은 안 그랬다. 아마 여러분이 유닉스 시스템 관리자로 십년 넘게 일해 왔고, 상용인 유닉 스를 Sun(no punintended)아래에서 이용해 왔을 것이다. 리눅스는 무언가 얻기 위해서 사용할 것이다. 이 시스템은 아주 현대적이며 다이내믹하다. 새로운 커 널의 공개가 대략 몇 달만에 계속 있다. 새 프로그램이 지속적으로 공개되고 있다. 오늘 여러분의 시스템이 가장 최신이었다면, 그 다음 날에는 같은 시스 템이 구석기 시대 유물로 간주된다. 이런 다이내믹한 활동에 불구하고, 어떻게 모든 변화에 따라 갈 것인가? 대 부분의 경우, 증가하는 것에 따라 계속 버전업을 한다. 그러나 여러분이 업그레 이드를 필요로 할 때 부분적으로 업그레이드를 할 수 있다. 1.7 리눅스와 다른 운영체계들과의 차이점 일반 PC용의 MS-DOS, OS/2그리고 여러 종류의 유닉스와 리눅스의 차이점 을 이해하는 것은 매우 중요하다. 무엇보다도 리눅스는 다른 운영체계와 한 시스템에서 쉽게 공존 할 수 있다. 즉, MS-DOS와 OS/2와 리눅스가 아무런 문제없이 같이 있을 수 있다. 1.7.1 왜 리눅스를 사용하는가 ? "왜 리눅스를 잘 알려지고, 많은 테스트를 거치고, 확실히 증명된 다른 상용 운영체계 대신 써야 하는가?"라고 여러분이 우리에게 묻는다면, 우리는 여러 분에게 천가지 이유를 말할 수 있다. 무엇보다도 리눅스는 개인 유닉스 PC에 탁월한 선택이기 때문이다. 여러분이 유닉스 프로그램 전문가라면 리눅스의 사 용으로 여러분의 PC에서 유닉스 프로그램을 개발하고 테스트를 할 수 있다. 그리고 데이터베이스와 X Window 응용 프로그램을 포함하고 있다. 만약 여러 분이 학생이라면, 여러분은 여러분의 대학 시스템에서 유닉스를 실행할 수 있는 기회가 있다. 리눅스를 가지고 여러분은 여러분만의 유닉스 시스템을 운 영하고, 여러분의 필요에 따라 적용할 수 있다. 리눅스를 설치하고 운영하는 것은 유닉스 기계없이 유닉스를 배우는데 가장 탁월한 방법이다. 그러나 시야를 좁히진 마라. 리눅스는 단지 개인 유닉스 사용자를 위한 것은 아니다. 이것은 큰일을 처리할 만큼 안전하고 완전하다. 대학은 리눅스가 운영 체계 코스 교육에 가장 완벽하다는 것을 발견했다. 많은 상용 프로그램 판매 상들도 그것을 깨닫게 되었다. 다음 장은 가장 필요한 리눅스와 다른 운영체계와의 처리를 지적해 두었다. 우리는 여러분이 여러분의 시스템에 리눅스가 필요하다는 것과 혹은 지금 PC환경을 향상시켰으면 생각하는 것. 이것이 중요하다. 리눅스는 자신의 취향 에 따라 설치할 수 있다. ( 2장에 어떻게 하는지 그 방법이 기술되어있다.) 1.7.2. 리눅스와 MS-DOS 한 시스템에 리눅스와 MS-DOS를 한 시스템에서 실행하는 것은 매우 보기 드문 일이다. 많은 리눅스 사용자들은 MS-DOS용 워드 프로세서에 많이 의지 했다. 리눅스는 자체에서 유사한 어플리케이션을 제공해 준다.(예를 들어, TEX) 거기에는 다양한 이유가 있다. 까다로운 사용자는 리눅스뿐 아니라 MS-DOS도 실행하려 하기 때문이다. 만약, 여러분이 전체 논문을 MS-DOS용 Wordperfect으로 작성했다면, 그것을 TEX이나 다른 형태의 Format으로 전환하기가 엄청 어렵다. 사실 많은 MS-DOS용 상용 어플리케이션이 리눅스 에는 사용할 수 없다. MS-DOS는 80386과 80486프로세서를 기능적으로 완전히 사용하지 못한다. 달리 말하면 리눅스는 프로세서의 Protected mode에서 완벽하게 운영되며, 프 로세서의 모든 특징을 다 이용한다. 여러분은 메모리를 직접적으로 사용해서 작업을 할 수가 있다.(게다가, 가상 RAM을 완전히 이용). 리눅스는 MS-DOS하에서 쓸 수 없는 유닉스 Inteface를 제공한다. MS-DOS하에서 유닉 스 어플리케이션 개발과 프로그램을 짜려면 많은 제한이 있다. 그러나 리눅스 에서는 아무런 제한이 없다. 왜냐하면 리눅스는 진짜 유닉스 시스템이기 때문 이다. 그래서 제한이 있을 리가 없다. 우리는 MS-DOS와 리눅스의 전반에 관해 토론을 해서 리눅스가 MS-DOS 보다 뛰어난 점을 보여 줄 수도 있다. 그러나 유닉스는 MS-DOS의 인기를 따 라 갈 수는 없다. 가장 큰 이유는 유닉스 시스템의 가격이 PC사용자들에게 너 무 부담스럽기 때문이다. 극히 극소수의 사람들이 운영체계 단독으로 $1000를 쓴다. 그러나 리눅스는 공짜, 결국 여러분은 돈에 구애받을 필요없이 결심할 기 회를 가졌다. 우리는 여러분의 기대와 필요를 기본으로 리눅스와 MS-DOS를 비교하기를 원한다. 여러분이 완벽한 유닉스 시스템을 집에서 비싼 비용을 치르지 않고 운 용하고 싶다면 리눅스가 바로 여러분이 찾던 것이다. 리눅스와 MS-DOS사이에 자료를 주고받을 수 있는 도구(TOOL)가 있다. 예를 들어 MS-DOS emulator가 있다. 그것은 리눅스에서 인기있는 MS-DOS 어 플리케이션을 실행할 수 있다. MS-Windows emulator는 지금 한참 개발 중이 다. 1.7.3 리눅스와 다른 운영체계 많은 수의 진보된 운영 체제가 PC세계에 떠오르고 있다. 특히, IBM의 OS/2 와 MS Windows NT가 더욱더 인기가 높아져 많은 사용자들이 도스를 버릴 것이다. OS/2와 Windows NT는 완전한 멀티태스킹 운영체계이다. 리눅스와 마찬가지로 기술적으로, OS/2와 Windows NT 그리고 리눅스는 매우 흡사하 다. 네트워킹, 안전성, 기타등등 사용자 인터페이스 면에서 거의 같은 기능을 지원하고 있다. 그러나 리눅스와 다른 운영체계와의 확실한 차이는 리눅스가 유닉스 버전중의 하나라는 점이다. 왜 유닉스가 뛰어난가? 다중사용자 시스템의 인기있는 운영체계라서 뿐만 아니라, 역시 대다수의 공개 소프트웨어 세계의 기초가 되기 때문이다. 만약 여러분이 인터넷에 접속할 수 있으면, 거의 모든 거기 있는 유닉스를 위한 공개 프로그램을 다 이용할 수 있다. (인터넷 자체가 커다란 유닉스이기 때문). 유닉스 협회에서 표준화를 위해 많은 지지가 있다. 그래서 이 규칙을 지키 지 않는 회사는 없다. 고로 모든 상용 유닉스 판매자는 이 기준에 따라 계약을 이행한다. OS/2와 NT는 독점적인 시스템이다. 인터페이스와 디자인이 한 회 사에 의해서 지배당한다. 그 회사만이 목적에 따라 계약을 이행한다. (가까운 미래 OS/2의 공개버전을 볼 것이라는 상상은 하지 마라). 이련 회사는 너무 나 실리적이다. OS/2는 어디를 가나 OS/2이다. Windows NT 또한 같다. 그러나 유닉스 인터페이스는 지속적으로 발전하고 변화해왔다. 몇몇 단체가 프로그래밍 모델의 표준을 정하려고 시도를 했으나, 이일은 매우 힘들었다. 특 히, 리눅스는 거의 대부분 유닉스 프로그래밍 인터페이스를 표준화된 POSIX.1에서 따왔다.시간이 흐름에 따라 그러한 표준을 고수해 왔던 표준화들 이 별 중요한 문제가 되지 못했다. 1.7.4 다른 유닉스 80386과 80486용으로 몇 종류의 다른 상용 유닉스가 있다. 80386 아키텍쳐 (architecture)를 유닉스의 목적에 따라 빌려준다. 그리고 많은 수의 상인들이 이 것으로 이윤을 남긴다. PC를 위한 상용 유닉스는 리눅스와 매우 흡사하다. 여 러분은 상용버전인 유닉스가 지원하는 거의 같은 프로그램, 프로그래밍환경, 네트워킹 기능을 볼 것이다. 그러나, 리눅스와 상용 버전인 유닉스와는 뚜렷한 차이가 있다. 첫째, 리눅스는 다른 상용 유닉스와 다른 종류의 하드웨어를 지원한다. 일반 적으로 잘 알려진 하드웨어는 거의 다 지원한다. 그렇지 못한 것은 개발자가 한참 개발중이다. 상용 유닉스는 많은 수의 하드웨어를 지원할 여건은 되지만 리눅스에는 못 미친다. (하드웨어의 전문적인 내용은 1.8절에서 다룬다.) 둘째, 상용 유닉스는 완전한 한 set의 documentation이 상인에 의해 주어진다. 반 면에, 리눅스는 거의 모든 것을 인터넷과 같은 곳에서 직접 구해야 한다. 원 문 1.9절에 자료를 구할 수 있는 곳에 관해 자세히 나와있다. 여러분은 리눅스의 안전성에 대해 걱정할 것이다. 많은 사용해 본 사람들이 말하기를 적어도 상용 유닉스만큼은 안전하다고 한다. 리눅스는 여전히 개발 중이다. 그래서 어떤 기능(예를 들어 TCP/IP 네트워킹)이 다소 불안해도 머지 않아 완전해 질 것이다. 많은 사용자들이 가장 중요하게 생각하는 것이 바로 가격이다. 다들 알겠지 만 리눅스는 공짜다. 여러분이 인터넷에 접속 할 수 있으면 다운로드를 받으 면 된다.여러분이 이러한 통신망에 접속할 수 없으면 우편을 이용해서 디 스켓이나 테이프 혹은 CD-ROM의 형태로 받을 수 있다. 물론 리눅스를 가 지고 있는 친구나 아는 사람에게서 복사를 하면 된다. 또 여러분은 많은 수의 시스템에 단 하나의 프로그램으로 설치할 수 있다. 실제 사회에서 리눅스가 사용되는 에를 들어보겠다. 북 태평양의 해양 조사 선에서 통신과 자료의 분석을 위해 사용하고 있다.또, Antarctia의 조사부에서 사용하고있으며, 많은 병원에서 환자 관리를 위해 사용하고 있다. 이것으로 상용 유닉스보다 더 안전하고 유용하다는 것을 증명한 셈이다. 386과 486용으로 다른 공짜 혹은 상용인 유닉스가 많이 있다. 그 중에서 가 장 유명한 것은 386BSD(흔히 NetBSD라고 알고들 있다)이다. 386BSD는 리눅 스와 여러모로 비슷하다. 그러나 여러분의 필요와 기대에 따라 리눅스보다 나 을 수도 있고 그렇지 않을 수도 있다. 리눅스와의 가장 큰 차이점은 리눅스의 개발이 공개된 점(어디에 있는 어떤 사람이든 모두 다 개발에 참여할 수 있 다.)에 비해 386BDS의 개발 과정은 프로그래머들만의 폐쇄적인 것이다. 이것 때문에 이 두 프로젝트 사이에 철학과 목적에는 큰 차이가 있다. 리눅스는 여 기저기서 긁어모아 완전한 유닉스 시스템을 만드는 것이다. (그 과정을 보면 참 재미있다.) 그러나 386BSD의 목적은 지금 존재하는 BSD code를 부분적으 로 계속 수정하는 것이다. 또다른 것으로 HURD가 있다. 이것은 많은 Free Software Foundation을 개 발하고, 다른 공개 유닉스를 지속적으로 배포한 결과이다. LDP에 있는 많 은 내용과 Free Software Foundation을 교환했다. 이 시간에도 HURD는 쉬 지 않고 발전하고 있을 것이다. 값싼 유닉스로는 Coherent(약 $99)와 Minix(일찍이 리눅스에 기초를 두고 발 전했음)가 있다. 물론 가격 때문에 이들은 대학에서 관심이 많다. 이들은 거의 상업적으로 변모해 갔다. 말할 필요없이, 많은 개인 유닉스사용자들이 리눅스 에 옮겨 올 것이다. 1.8 하드웨어 요구사항 이제 여러분은 리눅스가 얼마나 훌륭한가를 알 것이다. 그리고 이것이 여러 분을 위해 할 것이 엄청나게 많다. 그러나 리눅스 설치에 덤비기 전에 리눅스 의 하드웨어 요구사항과 제한사항을 주시할 필요가 있다. 리눅스는 사용자에 의해 발전했다는 것을 기억하기 바란다. 이 말은 리눅스 에 의해 지원되는 하드웨어는 사용자와 개발자가 계속 자기 시스템에서 사용 되게 하려고 노력했기 때문이다. 사실 리눅스는 인기있는 거의 모든 80386, 80486 시스템을 다 지원한다.(상용 유닉스보다 더 많은 하드웨어를 지원한다.) 그러나 아직은 지원하지 않는 주변기기가 적지만은 않다. 시간이 흐름에 따라 더 많은 양의 하드웨어가 지원될 것이다. 리눅스가 많은 하드웨어를 지원하는데 가장 큰 장애는 많은 회사들이 하드 웨어 인터페이스를 독점하는 것이다. 그 결과 자원해서 리눅스를 개발하는 사 람은 그 driver를 쉽게 쓸 수가 없다. (driver를 사용하는 것은 GPL에 위반된 다.) MS-DOS나 MS-Windows는 그들의 인터페이스를 독점한다. 불행하게도 리눅스 개발자들은 이러한 driver를 사용할 수 없다; 마지막에 사용하는 사용 자(바로 여러분)는 인터페이스에 대해 힘들게 알 필요가 없다. 이런 상황에서 작은 성과가 있었다. 프로그래머들은 인터페이스의 가설에 기 초를 두고 hackish driver를 만들기 시작했다. 또 개발자들은 그 회사에서 일 하면서 디바이스 인터페이스에 관한 정보를 얻었다. 다음절에서 리눅스의 하드웨어 요구사항을 요약해 두었다. 리눅스 하드웨어 호환 리스트에 더 많은 것들이 있다. 부연 ; 상당히 발전된 상황에서 리눅스는 많은 종류의 하드웨어를 지원한다. 어떤 공개판에서는 실험적인 기능을 지원하 기도 하고 그렇지 않기 했다. 이 절에서는 원래 옛날부터 지원해왔던 것과 지금 확정된 것만 실려 있다. 의심이 생기면 직접 리눅스배포에 관한 내용을 참고하라. (2.1장을 보라.) 1.8.1 마더보드와 CPU 리눅스는 널리 사용되고 있는 Intel 80386과 80486 CPU를 지원한다. 이것은 모든 CPU의 변화를 포함한다. 예를 들어 386SX, 386DX, 486SX, 486DX, 486DX2 그리고 리눅스는 Pentium에서도 잘 동작된다. Intel이 아닌 AMD, Cyrix processor에서도 잘 작동한다. 만약 여러분이 80386이거나 80486SX이라면 여러분 역시 Math-coprocessor 를 사용하려 할 것이다. 그렇다고 코프로세서가 반드시 필요한 것은 아니다. (리눅스 kernel은 FPU emulator를 사용함으로써 코프로세서가 없어도 된다.) 모든 표준 FPU의 결합이 지원된다. 예를 들어 IIT, Cyrix FasMath 그리고 Intel coprocessor도 지원한다. 시스템 마더보드는 반드시 ISA,EISA 방식이어야 한다. 이 방식이 요즘 주 종을 이루는 방식이다. IBM PS/2의 MCA 방식이 있는데 지금은 지원하지 않는 다. 비디오와 디스크 액세스를 빨리 하기 위하여 생긴 Local Bus는 아주 잘 지원한다. 그러나 여러분이 표준적인 Local Bus 방식인 VESA 시스템이어야 한다. 1.8.2 메모리 리눅스는 다른 진보된 운영체계보다 비교적 적은 양의 메모리를 필요로 한 다. 여러분은 2메가 램만 있으면 시스템을 운영할 수가 있다. 그러나 4메가 램이 있다면 여러분은 강력하게 시스템을 활용할 수 있을 것이다. 그 이상 의 것이 있다면 차마 밝히지 않아도 되겠죠..!! 리눅스는 80386,80486 시스템에서 완벽한 32bit 처리가 가능하다. 또 이것 은 여러분의 램을 자동적으로 다 이용할 것이다. 리눅스는 4메가 램만 있으면 종을 치며 휘파람을 불면서 X Window와 Emacs등을 실행할 것이다. 그래서 빠른 프로세서를 구하는 것만큼 많은 램을 사는 것도 중요하다. 8메가 램만 있으면 개인이 사용하기에 충분하고, 그 시스템을 여러 사람이 사용하려면 16 메가 이상이 되어야 한다. 대부분의 리눅스 사용자들은 하드드라이브의 일부를 swap공간으로 할당한다. 그것은 가상램으로 사용된다. 만약 여러분이 엄청나게 많은 물리적 램이 있을 때 여러분은 swap공간은 사용하지 않게 될 것이다. Swap공간은 물리적 램을 대신하지 않는다. 이것은 여러분이 큰 응용 프로그램을 실행시킬 때 하드의 쉬고 있는 영역에 swap을 해서 실행을 원활하게 한다. Swap공간의 할당량은 몇몇 요인에 따라 달라진다. (이 질문의 답은 2.2.3 장을 보면 알 수가 있다.) 1.8.3 하드드라이브 컨트롤러 여러분이 리눅스를 실행하는데 하드는 필요가 없다. 여러분은 최소한의시스 템을 가지고 플로피에서 실행할 수 있다. 그러나 이것은 느리고 매우 제한적 이다. 많은 사용자들이 하드드라이브 저장능력 때문에 하드디스크를 많이 이용 한다. 여러분은 반드시 AT-Standard(16bit) Controller가 있어야 한다. 역시 XT-Standard(8bit) Controller도 지원한다. 그러나 오늘날 대부분의 컨트롤러는 AT-Standard이다. 리눅스는 모든 MFM, RLL, ESDI, IDE Controller를 지원한다. 일반적으로 SCSI 하드나 플로피가 아닌 컨트롤러는 MS-DOS나 다른 운영체 계에서도 이용할 수가 있다. 물론 리눅스에서도 마찬가지이다. 리눅스도 많은 수의 SCSI 컨트롤러를 지원한다. 그러나 표준상의 문제로 지원이 제한되어 있 다. 지원하는 SCSI 컨트롤러는 Adaptec AHA1542B, AHA1742A (BIOS version 1.34), AHA1740, AHA1740(SCSI-2 controller, BIOS 1.34 in Enhanced mode); Future Domain 1680, TMC-850, TMC-950; Seagate ST-02; UltraStar SCSI; Western Digital WD7000FASST등이다. 복제품은 위의 card를 기초로 제작되었다. 1.8.4 하드드라이브의 여유공간 물론 리눅스를 설치하는데 하드드라이브에 빈 공간이 필요하다. 리눅스는 한 시스템에서 여러 개의 하드를 지원한다. 필요하다면 하드들을 가로질러 공간 을 할당할 수 있다. 하드의 빈 공간은 여러분이 필요로 하는 프로그램의 양에 따라 달라진다. 여러분이 실행만 하려면 10~20메가가 필요하다. 그러나 여러분이 X Window 와 같은 큰 프로그램 패키지를 사용하려면 좀 더 많은 공간이 필요하다. 여러 사람이 여러분의 시스템을 함께 사용하려면 여러분은 그들의 화일을 보관할 공간을 할당해야 한다. 또한 여러분이 많은 양의 물리적 램(16메가 이상)이 없다면 여러분은 swap 공간을 할당하는 것이 좋다. 그것은 가상램으로 쓰인다. 설치와 Swap공간의 활 용에 관해는 2.2.3절에서 토론한다. 최소한의 시스템은 20메가만 있으면 되고 시스템을 휘파람을 불면서 사용하려면 80메가 정도가 있어야 한다. 또 여러 사람이 함께 그 시스템을 사용하려면 100~150메가가 있어야 한다. 여러분의 목적에 따라 하드의 용량을 결정해야 한다. 1.8.5 모니터와 비디오 어댑터 리눅스는 모든 표준 Hercules, CGA, EGA, VGA, SVGA 비디오 카드와 default text-based interface 모니터를 지원한다. MS-DOS하에서 비디오 카드 와 모니터의 결합이 괜찮으면 리눅스 하에서도 큰 탈은 없을 것이다. X Window와 같은 그래픽환경의 요구사항은 5.1.1절에 나와있다. 1.8.6 기타의 하드웨어 위의 절은 리눅스 시스템을 운영하는데 필요한 것들이었고, 이제부터는 "선 택사항" 이다. 예를 들어 CD-ROM 드라이브, 사운드 카드 등과 같은 것에 대 한 리눅스의 지원사항이다. 1.8.6.1 마우스와 다른 포인팅 디바이스 대부분 여러분은 X Window 시스템과 같은 그래픽 환경 하에서 마우스를 사 용할 것이다. 그러나 몇몇 리눅스 응용 프로그램에서는 마우스를 지원하지 않 는다. 리눅스는 모든 표준 시리얼 마우스를 지원한다. 예를 들어 Logitech, MM 시리즈, 마우스 맨, 마이크로 소프트(2-button), 마우스 시스템(3-button), ATIXL busmice 그리고 PS/2 마우스 인터페이스까지 모두 지원한다. 트랙볼과 같은 것도 마우스 emulator를 사용하면 잘 동작한다. 1.8.6.2 CD-ROM 대부분의 CD-ROM 드라이브는 SCSI 인터페이스를 이용한다. 여러분이 SCSI 어댑터를 이용하면 CD-ROM 드라이브를 잘 쓸 수 있다. CD-ROM 드라이브의 수는 리눅스를 사용하다보면 발견된다. NEC CDR-74, Sony CDU-541, Texel DM-3024, Sony internal CDU-31a 그리고 Mistsumi CD-ROM도 리눅스에서 잘 동작한다. 리눅스는 CD-ROM의 표준 ISO-9660 파일시스템을 지원한다. 1.8.6.3 테이프드라이브 몇몇 형태의 테이프드라이브가 시중에서 판매되고 있다. 그들 중 대부분은 SCSI 인터페이스를 사용한다. 모든 종류가 리눅스에서 지원한다. 사용가능 한 것은 Sankyo CP150SE ; Tandberg 3600 ; Wangtek 5525ES, 5150ES 그리고 5099EN들은 PC36이라는 어댑터와 함께 쓰인다. QIC-02 또한 잘 작동 한다. 1.8.6.4 프린터 리눅스는 모든 종류의 parallel 프린터를 다 지원한다. MS-DOS나 다른 운영 체계에서 잘 작동하면, 리눅스에서도 문제가 없다. 리눅스는 인쇄 소프트웨어인 lp나 lpr을 포함하고 있다. 이것을 이용하면 여러분은 네트워크 상에서도 프린팅 을 할 수가 있다. 1.8.6.5 모뎀 프린터를 지원하는 것처럼 모든 종류의 시리얼 모뎀을 지원한다. Kermit, pcomm, minicom 그리고 Seyon과 같은 수많은 통신 프로그램이 포함 이 되어 있다. 다른 운영체계에서 잘 작동하면 리눅스에서도 문제없이 사용할 수 있다. 1.8.7 Ethernet 카드 리눅스는 많은 인기 있는 Ethernet 카드와 LAN 어댑터를 지원한다. 이런 것을 포함한다. . 3com 3c503,3c503/16 . Novell NE1000,NE2000 . Western Digital WD8003,WD8013 . Hewlett Packard HP27245,HP27247,HP27250 아래 복제품도 잘 동작한다. . LANNET LEC-45 . Alta Combo . Artisoft LANtastic AE-2 . Asante Etherpak 2001/2003 . D-Link Ethernet II . LTC E-NET/16 P/N 8300-200-002 . Network Solutions HE-203 . SVEC 4 Dimension Ethernet . 4-Dimension FD0490 EtherBoard 16 . D-Link DE-600 위 카드와 호환되는 복제품도 잘 작동한다. 제 2 장 리눅스 구하기와 설치하기 이장에서는 리눅스를 어떻게 구하고 구한 리눅스를 어떻게 설치하는가에 대 해서 설명하기로 한다. 앞서서도 언급했듯이 리눅스는 공식적으로 제공되는 형태는 없으며 어떤 특정한 목적을 위해서 공급되는 형태가 많다. 이들 배포 판들은 인터넷의 FTP와 세계각지의 BBS에서 메일을 통하여 디스켓이나 Tape,CD-ROM의 형태로 구할 수 있다. 또한 이장에서는 설치과정에 있어서의 세세한 부분이 아니라 전체적인,개괄적인 과정에 대해서 기술한다. 일반적으로 각각의 Package는 Package마다 특정한 인스톨 명령어들을 가지고 있으나 여 기서는 여러분이 어떠한 Package로 인스톨하든지 간에 인스톨이란게 무엇이다 라는 개념을 잡아줄 것이다. 2.1 리눅스 배포본들 리눅스는 공개소프트웨어로 제공이 되므로 어떤 한 기관이 Version Up이나 Linux Software의 배포를 책임지지 않는다. 그러므로 GPL에 있는 제한들이 준수되는 한 거의 모든 사람들이 리눅스를 사용하거나 배포하는 것에 제재를 받지 않는다. 이러한 결과로서 많은 리눅스 배포본이 있으며, 익명의 FTP를 통하거나 우편을 통하여 리눅스를 구할 수 있다. 여러분들은 어떤 리눅스 배포본이 여러분들이 필요로 하는 것인지를 결정해 야 한다. 모든 배포본들이 비슷한 것은 아니다. 대다수가 여러분들이 완전한 시스템을 갖추는데 있어서 필요한 모든 소프트웨어가 제공된다. 다른 리눅스 배포본들은 많은 디스크 용량을 요구하지 않은 "작은" 배포본들이다. 대다수의 배포본들은 리눅스의 핵심부분만을 가지고 있으며 X Window System과 같 은 큰 소프트웨어는 여러분 자신이 인스톨하여야 한다( 4장에 어떻게 하는지 가 나와있다 ). 부록 B에 리눅스 배포본의 간단한 리스트가 나와있다. 여러분들이 필요로 한 다면 각각의 배포본에 대해 더 많은 정보를 얻기 위해서 배포본을 관리하는 사람을 만날 수도 있다. 이것은 리눅스 배포본에 대해 아주 간략한 것만을 설명해둔 것이다 : 각 배포본에 대한 다른 서비스와 많은 정보, 완전한 리스 트를 원한다면 Linux Distribution HOWTO를 보기 바란다( 이것에 대한 정보 는 부록 A에 있다 ). 어떻게 이러한 배포본 중에서 선택을 할 것인가 ? 만약 여러분이 USENET 뉴스나 다른 전산관련 모임과 접할 수 있다면 리눅스를 인스톨한 사람들에게 개인적인 견해를 물어보는 것이 좋다. 더 나아가 어떤 사람이 리눅스를 인스 톨하였다는 것을 알고 있다면 그 사람에게서 조언과 도움을 얻을 수 있다. 리눅스 배포본을 선택하는데 있어서 많은 요소들을 고려해야 하지만 모든 사람 의 필요와 견해를 전부 다르다. 실제로 인기있는 리눅스 배포본들은 비슷비 슷한 소프트웨어들을 포함하고 있으므로 여러분들이 다소 마음대로 선택하여도 별 무리가 없을 것이다. 2.1.1 인터넷에서 리눅스 구하기 만일 인터넷에 접속할 수 있다면 리눅스를 가장 쉬운 방법은 익명의 (anonymous) FTP를 통해 얻을 수 있다. 부록 C에 리눅스를 가져올 수 있는 FTP의 리스트가 있다. 이 FTP중의 하나가 sunsite.unc.edu이며 다양한 리눅스 배포물들을 /pub/Linux/distributions 에서 찾을 수 있다. 많은 배포본들은 익명의 FTP를 통해서 Disk Image형태로 release된다. 이 말은 파일들의 모임으로 구성된 배포본내의 파일들은 floppy의 binary image를 포함하고 있다는 것이다. 플로피에서 image file의 내용을 카피하기 위해서는 도스 상에서 RAWRITE.EXE라는 프로그램을 사용하면 된다. 이 프로그램은 disk format에 상관없이 파일의 내용을 block-to-block 형식으로 플로피에 카피 해준다. RAWRITE.EXE는 sunsite.unc.edu내의 /pub/Linux/system/Install/rawrite 를 포함한 다양한 Linux FTP site에서 구할 수 있다. 그러므로 많은 경우에 여러분들은 diskette image들을 다운로드 받아서 RAWRITE.EXE 프로그램을 사용해서 각각의 image를 디스켓들로 만들 수 있 다. "boot diskette"이라고 불리는 것으로 리눅스를 부팅할 수 있으며 이젠 설치 할 준비가 된 것이다. 비록 어떤 배포본들은 하드디스크의 MS-DOS 파티션으로부터 리눅스를 인스톨할 수도 있지만 일반적으로 floppy로부터 직접 인스톨된다. 어떤 배포본은 네트워크상의 TCP/IP상으로 인스톨할 수도 있다. 각 배포본의 설명서에 이러한 인스톨방법이 나와있다. 다른 리눅스 배포본은 MS-DOS 포멧 형식의 플로피로부터 인스톨된다. 예를 들어 SLS 배포판은 많은 diskette image중에서 RAWRITE.EXE로 쓰여진 "a1" 디스켓만을 필요로 한다. 나머지 파일들은 a2,a3등으로 레벨이 붙여진 MS-DOS 포멧형태의 디스켓으로 도스의 COPY명령으로 카피가 된다. 리눅스 는 MS-DOS 포멧의 플로피로부터 직접 인스톨된다. 비록 디스켓을 만들기 위해서 MS-DOS 시스템을 access해야할 것을 요구하지만 이는 많은 image file에 대해서 RAWRITE.EXE를 사용해야하는 문제를 해결시켜준다. 익명의 FTP를 통해 가져올 수 있는 리눅스의 각 배포본은 어떻게 다운로드하 고 인스톨을 하기 위해 어떤 디스켓을 준비해야 하는지에 대한 설명을 README 파일에서 기술하고 있다. 여러분들이 사용할 배포본에 대한 README 파일을 꼭 읽도록 하라 - 이 책에서는 단지 여러분에게 일반적인 것 들을 기술할 뿐이다. 리눅스를 다운로드 받을 때는 파일전송방법을 binary로 사용하는 것을 명심하라( 대부분의 FTP Client에서는 이 모드로서 "binary" 명 령을 제공한다 ). 2.1.2 다른 온라인 상에서 리눅스 구하기 만약 여러분이 Compuserve나 Prodigy와 같은 다른 네트워크에 접근할 수 있다면 이러한 네크워크에서 다운로드받는 방법이 제공될 것이다. 덧붙여서 많은 BBS로부터 리눅스를 가져올 수도 있다. 리눅스 BBS의 리스트가 부록 D 에 있다. 모든 리눅스 배포본이 이러한 컴퓨터 네트워크에서 가져올 수 있는 것은 아니나 대부분이 제공을 한다. 특별히 다양한 CD-ROM 배포본은 단지 우편신청을 통해서만 구할 수 있다. 2.1.3 우편을 통한 리눅스 구하기 만약 여러분이 인터넷이나 BBS에 접근할 수 없다면 많은 리눅스 배포본들 은 디스켓, 테이프, CD-ROM의 형태로 우편주문이 가능하다. 부록 B에 이러 한 배포본을 취급하는 리스트가 있다. 대부분이 크레디트카드를 받고 있 고 - 국제주문도 포함 - 미국이나 캐나다에 살고 있지 않다면 이러한 방법으로 리눅스를 구할 수 있을 것이다. 비록 GPL에 의해서 허용되는 리눅스가 대가를 지불할 의무가 있지만 리눅스 는 Free Software이다. 그러므로 우편을 통한 리눅스의 신청은 US $30 에서 US$150의 돈을 지불하여야 한다. 그러나 만약 주위에 누군가가 이미 구입하였거나 다운로드 받았다면 여러분들은 자유롭게 빌리거나 복사할 수 있 다. 리눅스 배포본은 라이센스나 소프트웨어에 대한 제약을 어떤 방법으로든 두지 않는다. 만약 연구실 전체의 시스템에 리눅스를 설치하려고 한다면 여러 분은 단순히 리눅스 배포본 중 하나를 복사해서 모든 시스템에 리눅스를 설치 하여 사용할 수 있다. 2.2 리눅스 설치 전에 준비할 사항들 리눅스를 구했다면 이제 리눅스를 여러분들의 시스템에 인스톨할 준비가 된 것이다. 인스톨하기 전에 가장 중요한 절차는 리눅스가 인스톨될 하드디스 크의 파티션을 다시 나누는 것이다. 이 단계에서는 만약 여러분들이 다른 OS 를 사용하고 있다면 리눅스를 인스톨할 때 주의를 요하지 않으면 안된다. 다 음 절에서 리눅스를 인스톨할 때 어떻게 계획을 세워야 할 지에 대해서 기 술하고자 한다. 2.2.1 인스톨에 대한 개관 여러분들이 가지고 있는 리눅스의 버전이 각기 다르더라도 인스톨하는 방법 은 다음과 같은 절차를 따르게 된다. 1. 하드디스크(들)의 파티션을 다시 나눈다. 하드디스크에 다른 OS가 이미 인스톨되어 있다면 리눅스가 설치될 수 있는 공간을 마련하기 위해 하드디스크를 다시 나누는 것이 필요하다. 2.2.4에서 다시 설명한다. 2. 리눅스 인스톨 매체로 부팅시킨다. 각개의 리눅스 배포판은 어떤 종류의 인스톨매체를 가지고 있는데 보통 "boot floppy"라고 한다 - 이것은 리눅스를 인스톨하는데 쓰인다. 이 매체를 부팅하는 것은 수동으로 인스톨하는 것을 가능케 한다. 3. 리눅스 파티션 생성 하드디스크에서 리눅스가 설치될 공간을 파티션을 통하여 마련한 후, 이제는 빈 공간으로 남아 있는 리눅스파티션에 대해서 다시 리눅스의 fdisk 로서 나눈 다. 이는 2.3.3에서 다시 설명한다. 4. FileSystem과 Swap 공간 생성 이 단계에서는 새로이 생성된 파티션에서 file이 저장될 하나이상의 filesystem 을 만든다. 덧붙여서 swap을 위한 공간을 마련하려면 생성된 리눅스파티션에 서 swap 공간을 생성한다. 이는 2.3.4와 2.3.5에서 다시 설명한다. 5. 새로 만들어진 filesystem에 리눅스를 설치 마지막으로 새로 만들어진 filesystem에다가 리눅스를 설치한다. 여기까지만 한다면 이제부터는 순조롭게 진행이 될 것이다. 이는 2.3.6에서 다루게 되며 2.5에서는 위의 과정중 이상이 있는 부분에 대해서 언급을 하게 된다. 리눅스 배포본들은 여러분들이 인스톨을 하는 동안에 차례대로 할 수 있는 인 스톨 프로그램을 제공하며 인스톨 과정 중에서 하나이상의 과정이 자동적으로 설치될 수 있도록 해준다. 이장을 통하여 여러분들이 명심하여야 할 사항은 몇 가지 절차는 자동적으로 설치될 수 있도록 제공되지만 그것은 여러분이 가지고 있는 배포본에 따라 다르다는 것이다. 중요한 힌트 : 리눅스 인스톨하기 전에 전체 인스톨과정을 기록해 두라는 것 이다. 여러분들이 하는 모든 행동, 타이핑, 이상하게 보이는 것들 전부를 기 록하라는 것이다.여기 이러한 생각은 간단한 문제이다 : 만일 여러분들이 인 스톨 과정에 이상이 있다거나 인스톨과정을 다시 알아보고 싶다던가 언제 잘 못된 부분이 나타났는지 알 수 있도록 하는 것이다. 리눅스를 인스톨하는 것 은 어렵지 않으나 기억할 부분들이 많다. 무언가 잘못된 부분이 있다면 여러분 들은 인스톨 과정을 세세하게 기록함으로써 아주 숙달될 수 있다. 또한 인스톨 과정을 기록하는 것은 다른 사람들이 여러분에게 도움을 요청할 때는 아주 유용한 자료로서 활용된다. 예를 들어 USENET 그룹 중 하나의 메시지로서 발표되는 것들이 바로 그런 것이다. 여러분들이 기록해둔 자료는 여러분들의 손자들에게 보여줄 수도 있는 것이다. 2.2.2 다시 하드디스크를 나눈다는 개념 일반적으로 하드디스크는 파티션으로 나누어져 있다. 하나의 파티션에 하나 의 OS가 있게 된다. 예를 들어, 하나의 하드디스크에는 몇 개의 파티션이 있을 수 있다. 그중 하나는 MS-DOS가 되고, 또 다른 하나는 OS/2, Linux등등 이런 식으로 하나의 파티션에 하나의 OS가 존재하는 것이다. 물론, 2개의 파티션이 있다면 둘다 MS-DOS로 사용할 수 있고, 하나를 MS-DOS, 또다 른 하나는 Linux가 있을 수가 있다. 이미 다른 OS들이 시스템에 인스톨되어 있다면 리눅스가 설치될 공간을 위 해서 이미 나누어져 있던 파티션의 크기를 조정할 필요가 있다. 그 다음에 리눅스와 스왑을 위한 공간을 위한 리눅스 파티션을 생성할 수 있다. 이것을 하드디스크를 다시 나눈다(repartitioning)이라고 한다. MS-DOS 시스템에서는 전체 드라이브에 하나의 파티션을 이용한다. MS-DOS에게는 이러한 파티션을 C: 라고 인식한다. 만약 하나이상의 파티션 을 가지고 있다면 MS-DOS는 그것들을 D:, E:등등으로 이름을 붙인다. 어떤 경우든 하나의 파티션은 하나의 드라이브처럼 행동한다. Disk의 첫번째 섹터는 partition table에 따라붙는 master boot record이 다. Boot record( 이름에서 알 수 있듯이 )는 시스템을 boot하는데 이용된다. Partition table은 파티션의 위치와 크기에 대한 정보를 가지고 있다. 세 가지 종류의 파티션으로 나뉘어지는데 primary, extended 그리고 logical이 다. 이들 중에 primary 파티션이 가장 많이 쓰인다. 그러나 partition table 의 크기제한으로 인하여 주어진 드라이브에서 4개까지의 primary 파티션만을 사용할 수 있다. 이러한 4개의 primary 파티션밖에 사용할 수 없는 제한으로 인해 extended partition을 사용한다. Extended partition은 그 자신은 data를 가지지 못하며 다만 logical partition의 "Container" 역할을 한다. 그러므로 여러분 들은 디스크 전체를 하나의 extended partition을 만들어서 그 안에 여러개 의 logical partition을 만들면 된다. 그러나 하나의 드라이브당 하나의 extended partition 밖에 만들지 못한다. 2.2.3 리눅스파티션의 요구사항 하드디스크의 파티션을 어떻게 나눌 것인가를 설명하기 전에 리눅스가 설치된 공간이 얼마만큼인지 알고 있어야 한다. 파티션을 어떻게 나눌 것 인가하는 이야기는 2.3.3절에서 논의하기로 한다. UNIX에서는 file들은 파일을 저장할 수 있도록 format된 하드드라이브( 혹은 CD-ROM, Diskette과 같은 다른 저장매체)의 부분인 filesystem에 저장된다. 각 filesystem은 특정한 디렉토리 tree의 일부분과 연관되어 있다 예를 들어 /usr 디렉토리에 있는 모든 파일들에 대한 filesystem이 있고, /tmp등등에 대해서도 그러하다. Root filesystem은 최상위 디렉토리 /에 해당하는 가장 중요한 filesystem이다. 유닉스 하에서는 각 filesystem은 하드드라이브의 분산된 파티션에 있다.예를 들어 여러분들이 /와 /usr에 대한 filesystem을 가지고 있다면 이 두개의 filesystem를 저장할 두개의 파티션이 필요한 것이다. 리눅스를 인스톨하기 전에 여러분들은 리눅스를 저장할 filesystem을 준비할 필요가 있다. 적어도 리눅스가 인스톨될 하나의 filesystem( root filesystem )에 따른 하나의 파티션이 필요하다. 많은 리눅스 사용자들은 그들의 file들을 전부 root filesystem에서 저장하는 경향이 있는데 이는 여러 개의 filesystem과 partition을 가지고 있는 것 보다 관리하기가 수월하다. 그러나 여러분들이 원한다면 리눅스에 대해서 여러개의 filesystem을 만들 수 있다. 예를 들어 /usr와 /home에 다른 filesystem을 사용하고 싶은 경우이 다. 유닉스 시스템 Administration을 읽은 전문가들은 여러개의 filesystem을 어떻게 따로따로 사용할 수 있는지 알고 있을 것이다. 4장에서 다중 filesystem과 partition의 사용에 대해서 설명한다. 왜 하나이상의 filesystem을 사용하는가 ? 가장 일반적인 이유는 안전하기 때 문이다; 만약 어떤 이유로 filesystem중의 하나가 손상을 입었다면 다른 filesystem은 해를 입지 않는다. 반면 모든 file들을 root filesystem에 저장 하면 어떤 이유로 filesystem이 손상되면 여러분은 모든 file들을 한번에 잃어 버릴 것이다. 그러나 이것은 별로 일상적이지 않다; 만일 정기적으로 여러분의 시스템을 백업한다면 절대로 안전하다. 여러개의 filesystem을 사용하는 다른 이유는 저장공간을 여러개의 하드드라이 브들에 분배할 수 있다는데 있다. 말하자면, 만약 하나의 하드드라이브에 40메 가바이트가 남아 있고 다른 하나에 50메가바이트가 남아 있다면 첫번째 하드드 라이브에 40메가바이트의 root filesystem을 만들고 나머지 하나에 50메가바이 트의 /usr filesystem을 만들면 된다. 현재는 하나의 filesystem을 여러개의 드라이브에 나누어서 설치할 수 없다; 만약 하드드라이브의 남은 공간이 여러 개의 드라이브에 나누어져 있다면 여러개의 드라이브를 활용하기 위해서 여러 개의 filesystem을 사용하는 것이 필요할 것이다. 요약하면 리눅스는 root filesystem 을 위해서 적어도 하나이상의 partition이 필요하다. 여러개의 filesystem을 만들기 원한다면 각각의 부가적인 filesystem 에 대해서 분산된 파티션이 필요하다. 어떤 리눅스 배포본은 자동적으로 파 티션과 filesystem을 만들어주므로 여러분들은 이러한 문제를 전혀 걱정할 필요 없다. 파티션에 대해 고려해야할 또 하나의 문제는 swap공간이다. 리눅스를 위한 swap공간을 사용하기 원한다면 2가지 옵션이 있다. 하나는 존재하는 filesystem 에서 swap file을 사용하는 것이다. 가상 RAM으로 사용할 swap file은 리눅 스를 인스톨하고 난 후 만들 것이다. 2번째 옵션은 swap partition을 만드는 것인데 swap partition은 단지 swap 공간만을 위해서 사용된다. 대부분의 사 람들은 swap file대신에 swap partition을 사용한다. 하나의 swap file이나 partition은 16메가바이트까지 만들 수 있다. 16메가바이 트이상의 swap 공간을 만들려면 여러개의 swap file이나 partition을 만들면 된 다 - 8개까지 만들 수가 있다. 예들 들어 32메가바이트의 swap 공간이 필요하 다면 여러분들은 두개의 16메가바이트의 swap partition을 만들면 된다. Swap partition을 setting하는 것은 2.3.4절에서, swap file의 setting에 대해서는 4장에 서 언급한다. 따라서, 일반적으로 리눅스를 설치하는데 있어서 2개의 partition이 필요하다: 하나는 root filesystem을 위한 것이고 또 하나는 swap 공간을 위해서이다. 물 론 위의 경우 다양한 형태가 있을 수 있지만 이것은 최소한의 setup이다. Swap 공간이 필요하지 않다면 여러분의 RAM이 적어도 16메가가 있다고 가정 한다. 물론 이러한 파티션들이 얼마만큼의 공간이 필요한지 알고 싶을 것이다. 리 눅스 filesystem의 크기( 리눅스소프트웨어를 포함한 크기 ) 는 여러분이 인스톨 할 소프트웨어가 얼마나 많은가 또는 어떤 배포본을 사용하는가에 절대적으로 달려있다. 아마 배포본에 딸려 오는 문서에 얼마만큼의 공간이 요구되는가가 적혀져 있을 것이다. 작은 리눅스 시스템은 20메가 이하의 공간을 사용한 다: 큰 리눅스 시스템은 80~100메가 혹은 그 이상을 요구한다. 리눅스가 설 치될 공간은 리눅스 자신에 의해서 요구되는 것임을 명심하라. 만약 여러분 자 신만 사용할 디렉토리의 특별한 공간이 필요하다면 미래를 위해서 여유공간을 남겨두는 것이 좋다. Swap 파티션의 크기는 얼마만큼의 가상 RAM이 필요한가에 달려있다. 경험 적으로 여러분의 RAM에 2배 정도를 잡으면 된다 : 예를 들어 4메가의 RAM이 있다면 8메가의 swap 파티션을 잡는 것이다. 물론 이것은 단지 추측에 지나지 않는다 - 실제적인 swap 공간의 크기는 여러분이 실행할 소프트웨어에 달려있 는 것이다. 만약 16메가바이트 이상의 RAM을 가지고 있다면 swap 공간을 사용할 필요가 없다. 중요 : 많은 SCSI Adapter들은 파티션에서 실린더번호 1024이상을 사용하면 부팅이 불가능하다. 따라서 리눅스의 공간을 마련하고자 할 때는 root filesystem에 대해서는 1024이상의 범위내의 파티션을 잡으면 안된다. 리눅스 는 1024이상의 실린더도 사용할 수 있으나 그것을 사용하면 리눅스를 부팅못 할 수도 있다는 것을 명심하라. 이 충고는 너무 이른 감이 없지 않으나 여러 분의 리눅스에 대한 드라이브 설계에 아주 중요한 것이다. 만약 root filesystem에 대해서 1024 이상의 실린더를 사용해야 한다면 리눅 스를 항상 floppy로 부팅하여야 한다. 실제적으로 그리 나쁜 방법은 아니다 - 하드드라이브로 부팅하는 것보다 조금더 시간이 걸릴 뿐이다. 여하튼 이것은 여러분이 선택할 문제이다. 2.2.4 하드디스크를 다시 나누기 이 절에서는 리눅스를 설치하기 위한 공간을 마련하기 위해서 현재의 파티션 을 어떻게 다시 나누는가에 대해 설명한다. 만약 아무것도 들어있지 않은 깨 끗한 하드드라이브에 리눅스를 설치하고자 한다면 이 절을 넘겨서 2.3절로 가 기 바란다. 현존하는 파티션을 다시 나누는 일반적인 방법은 현재 파티션을 지워서( 이 경우 파티션내의 모든 파일들은 지워진다 ) 새로 만드는 것이다. 드라이브를 다시 나누기 전에 여러분의 system을 백업하라. 파티션을 나눈 후에 백업된 것 을 다시 인스톨하면 된다. 그러나 현재의 파티션내의 파일을 지우지 않고 파 티션을 나누어주는 MS-DOS용 프로그램이 몇 개 있다. 이들 중 하나는 "FIPS"라고 하는데 많은 리눅스 FTP site에서 가져올 수 있다. 또한 원래의 파티션을 다시 나누었기 때문에 백업받은 모든 것을 다시 인스톨 할 수 없는 경우도 있다는 것을 명심하라. 이 경우는 작아진 파티션에 맞도 록 백업받은 것중 필요없는 것은 충분히 지울 필요가 있다. 파티션을 다시 나누는데 사용되는 프로그램은 fdisk이다. 각각의 OS는 이 프 로그램과 같은 일을 하는 프로그램을 가지고 있다. 예를 들어 MS-DOS하 에서는 FDISK명령을 사용하면 된다. 파티션을 다시 나누는데 있어서 여러분 들은 어떤 OS를 사용하는가에 상관없이 해당 OS의 문서들을 참고해야 한다. 여기에 MS-DOS의 FDISK를 사용하여 파티션을 다시 나누는 것에 대해 언급을 할 터인데 이러한 것을 다른 OS에 대해서 마찬가지로 적용된다. 하드드라이브를 다시 나누기 전에 반드시 여러분들이 가지고 있는 문서들을 참고하라. 이 절에서는 이러한 과정의 일반적인 개관만을 제공한다 :우리가 여 기서 언급하지 않는 것들이 많이 있다. 여러분이 만약 파티션을 올바로 나누 지 않는다면 여러분의 시스템에 있는 모든 소프트웨어들을 잃어버릴 수 있다. 주의 : 다른 OS( 리눅스 포함 )에 대해서 MS-DOS에 있는 FDISK로 파티션을 수정하거나 생성하지 말라. 반드시 그 OS에 포함된 fdisk로서 파티션을 수정하 여야 한다; 예를 들어 리눅스 파티션을 만들려면 리눅스에 있는 fdisk로서 파티션을 나누어야 한다. 2.3.3절에서 리눅스 파티션을 어떻게 나누는지 언 급할 것이나 지금은 여러분의 현재의 파티션에 대해서 언급할 것이다. 여러분의 시스템에 전체가 MS-DOS에 의해 사용되는 하나의 드라이브가 있 다고 가정하자. 따라서 현재의 드라이브는 보통 일반적으로 알려진 C: 로서 하 나의 MS-DOS 파티션으로 이루어진다. 이렇게 현재의 드라이브에 대한 파티 션을 나누는 방법은 데이터를 전부 파괴할 수 있기 때문에 FDISK를 실행 시키는데 필요한 모든 것들을 포함하는 부팅가능한 MS-DOS "System Disk" 를 만들어야 한다. 그리고 파티션을 다시 나누는 일이 끝나면 백업받은 곳에서 소프트웨어들을 다시 하드드라이브로 옮겨야 한다. 대부분의 경우 MS-DOS 인스톨 디스켓을 이러한 목적에 사용한다. 그러나 여러분 자신만의 시스템 디 스켓을 만들려면, 플로피를 포맷하는 명령어와 함께 사용한다. FORMAT /s A: 이 플로피디스켓에 필요한 FORMAT.EXE와 FDISK.EXE를 포함하는 모든 MS-DOS 유틸리티들을 카피한다( 보통 여러분의 드라이브에 /DOS 디렉토리에 있다 ). 이제 이 플로피디스켓으로 부팅할 수 있다. 그리고 다음의 명령어를 실행시킨다. FDISK C: 이 명령어는 FDISK를 기동시킨다. FDISK는 자동적으로 수행되지만 자세한 것은 MS-DOS에 관련된 문서를 참조 하기 바란다. FDISK를 실행시키면 partition table을 보여주는 메뉴를 이용한 다. 그리고 화면에 나타난 정보들을 기록해 둔다. 리눅스 인스톨에서 빠져 나와 서 다시 복구하고자 할 때는 원래 시스템의 정보를 기록하는 것은 중요하다. 존재하는 파티션을 삭제하기 위해서는 FDISK의 메뉴옵션에서 " Delete an MS-DOS Partition or Logical DOS Drive "를 선택한다. 삭제하고자 하는 파티션의 type( primary, extended, logical )과 파티션 번호를 선택하라. 모든 경고들을 다시 살펴보라. 새로운 파티션을 만들기 위해서는 FDISK 옵션에서 " Creat an MS-DOS Partition or Logical DOS Drive "를 선택한다. 만들고자하는 파티션의 type( primary, extended, logical )과 파티션의 크기( 메가바이트 단위 )를 결정한다. FDISK 프로그램은 새로운 파티션을 만들어 줄 것이다. FDISK를 사용한 후에는 프로그램을 빠져 나와서 새로운 파티션을 다시 포맷 하여야 한다. 예를 들어 첫번째 도스파티션( C: )의 크기를 재조정하였다면 다 음의 명령을 수행하여야 한다. FORMAT /s C: 이제 여러분은 백업받아 놓은 곳으로부터 다시 인스톨할 수 있다. 2.3 리눅스 설치하기 리눅스를 설치하기 위해서 하드디스크를 다시 재조정하면 이제는 리눅스를 설치할 준비가 된 것이다. 전체 개괄적인 설치절차를 간단히 기술하면 o 리눅스 인스톨매체를 부팅시킨다. o 리눅스파티션을 생성하기 위해서 리눅스 상에서 fdisk를 실행시킨다 o 생성된 리눅스 파티션에 리눅스파일시스템과 swap을 위해서 mke2fs와 mkswap을 실행시킨다. o 리눅스 배포판을 설치한다. o 마지막으로 하드디스크에 리눅스 부트로더인 LILO를 설치하거나 그렇지 않은 경우는 리눅스를 부팅하기 위해서 Boot Floppy를 만든다. 리눅스가 배포된 형태에 따라서 위의 과정들이 자동으로 설치가 되는 경우 도 있고 그렇지 않은 배포판도 있을 것이다. 따라서 자신이 가지고 있는 배 포판에 특정한 명령어가 있는지의 여부를 알아보아야 한다. 2.3.1 Booting Linux 첫번째 단계는 리눅스 인스톨매체로 부팅을 시키는 것이다. 이것은 플로피 디스켓이 될 수도 있고 CD-ROM이 될 수도 있다. 대부분의 경우에 인스톨매체 는 작은 리눅스시스템을 포함하는 " Boot Floppy " 일 것이다. 플로피로 부 팅하면 여러분들은 여러분들이 어떤 절차를 통하여 인스톨할 수 있도록 인도해 주는 인스톨 메뉴를 보게 될 것이다. 어떤 배포본은 이 플로피로 부팅하면 login prompt가 나타난다. 여기서 우리는 보통 인스톨 과정을 시작하기 위해서 root나 install로 login한다. 배포본에 함께 오는 문서에는 인스톨매체로 부터 리 눅스를 부팅할 때 필요한 것에 대한 설명이 있다. 2.3.2 리눅스 상에서의 드라이브와 파티션 대부분의 리눅스 배포본은 fdisk를 사용해서 리눅스파티션을 만들도록 요구 하고 있다. 몇몇은 자동적으로 리눅스 파티션을 생성시켜준다. 아래의 리눅스 파티션과 디바이스명에 대한 정보를 반드시 알아두기 바란다. 리눅스상의 디바 이스와 파티션은 다른 OS상에서의 한쪽과 다른 이름으로 주어진다. MS-DOS에서의 floppy drive는 A:나 B:로 참조할 수 있고 Hard drive partition은 C:나 D:등과 같이 참조할 수 있다. /dev 디렉토리에서 찾을 수 있는 Device Driver들은 System에 있는 Device들과 통신할 수 있도록 사용되어진다( 하드 드라이버나 마우스 등). 예를 들어 마우스를 가지고 있다면 /dev/mouse 드라이버를 통해서 access할 수 있 다. 플로피나 하드 드라이브와 독립적인 파티션들은 전체가 그들 자신만은 독 립적인 디바이스 드라이버로 주어진다. 여기서 디바이스 드라이버 interface 에 대한 걱정을 할 필요는 없다. 단지 어떻게 다양한 디바이스들이 그들이 사 용되어 질 수 있도록 이름이 주어지는가에 대한 이해가 중요한 것이다. Table 2.1에 다양한 디바이스 드라이버의 리스트가 있다. 이 Table에 대해 주석을 붙이자면 /dev/fd0가 첫번째 플로피드라이브에 해당되고( MS-DOS에서의 A: 드라이브) /dev/fd1이 두번째 플로피드라이브에 해 당이 된다.(B:) 또한 SCSI 하드 드라이브는 다른 방식의 드라이브에 비해서 좀 다른 이름이 된다. IDE, MFM, 그리고 RLL 드라이브들은 /dev/hda, /dev/hdb 등등을 통해 access할 수 있다. /dev/hda상의 독립적인 파티션은 /dev/hda1, /dev/hda2등 으로 이름이 정해진다. 하지만 SCSI 드라이브는 /dev/sda, /dev/sdb등으로 이 름이 정해지며 위에서와 마찬가지로 /dev/sda1, /dev/sda2로 독립적인 파티션들 이 정해진다. 예를 들자. 하나의 IDE방식의 하드드라이브가 3개의 primary partition을 가지 고 있으며 처음 2개는 MS-DOS를 사용하고 있고, 세번째는 리눅스에 의해 사용되는 2개의 logical partition을 가지고 있는 extended partition이라고 가 정하자. 이러한 파티션에 대한 device는 다음과 같이 참조된다. ----------------------------------------------------------------------------------------------- Device Name ----------------------------------------------------------------------------------------------- First floppy (A:) /dev/fd0 Second floppy (B:) /dev/fd1 First hard drive (전체 드라이브) /dev/hda First hard drive, primary partition 1 /dev/hda1 First hard drive, primary partition 2 /dev/hda2 First hard drive, primary partition 3 /dev/hda3 First hard drive, primary partition 4 /dev/hda4 First hard drive, logical partition 1 /dev/hda5 First hard drive, logical partition 2 /dev/hda6 . . . Second hard drive (전체 드라이브) /dev/hdb Second hard drive, primary partition 1 /dev/hdb1 . . . First SCSI hard drive (전체 드라이브) /dev/sda First SCSI hard drive, primary partition 1 /dev/sda1 . . . Second SCSI hard drive (전체 드라이브) /dev/sdb Second SCSI hard drive, primary partition 1 /dev/sdb1 . Table 2.1 : Linux Partition Names 첫번째 MS-DOS 파티션 (C:) /dev/hda1 두번째 MS-DOS 파티션 (D:) /dev/hda2 Extended partition /dev/hda3 첫번째 리눅스 logical partition /dev/hda5 두번째 리눅스 logical partition /dev/hda6 여기서 /dev/hda4가 없다는 것에 주목하라: 이것은 네번째 primary partition에 대응되는 파티션명이나 위 예제에는 없다. Logical partition은 /dev/hda5부터 연 속적으로 이름이 붙여진다. 2.3.3 리눅스파티션 만들기 이제는 fdisk명령으로 리눅스 파티션을 만들 준비가 되었다. 2.2.3에서 기술 한 것과 같이 일반적으로 리눅스 자체가 들어갈 파티션 하나와 swap 공간을 위한 파티션이 필요하다. Installation media로 부팅한 후에 fdisk를 실행시킨 다. fdisk 는 파티션을 만들고자하는 드라이브의 리눅스 Device name이다( Table 2.1). 예를 들어 첫번째 SCSI disk에서 fdisk를 실행하고자 한다면, fdisk /dev/sda를 입력하면 된다. 만약 fdisk뒤에 아무것도 적어 주지 않는다면 디폴트로서 /dev/hda(첫번째 IDE drive)가 지정된다. 만약 하나이상의 리눅스 파티션을 만들고자한다면 각 드라이브에서 fdisk를 실행시키면 된다. # fdisk /dev/hda Command (m for help) 여기서 fdisk는 명령을 기다리게 된다: m을 입력함으로써 option들을 볼 수 있 다. Command (m for help): m Command action a toggle a bootable flag (부팅가능한 flag를 토글) d delete a partition (파티션을 지운다) l list known partition types (파티션 type을 보여준다) m print this menu (메뉴를 보인다) n add a new partition (새로운 파티션을 생성한다) p print the partition table (파티션 테이블을 화면에 인쇄한다) q quit without saving changes (변경사항을 저장하지 않고 끝냄) t change a partition's system id (파티션의 system id를 변경) u change display/entry units (화면 인쇄시 섹터/실린더 선택) v verify the partition table (파티션 테이블을 검색) w write table to disk and exit (변경사항을 저장하고 끝냄) x extra functionality (experts only) (특별기능 - 전문가 전용) n 명령은 새로운 파티션을 만드는데 사용된다. 다른 옵션은 그리 사용하지 않게 된다. 변경사항을 저장하지 않고 끝내려면 q 명령을 사용한다. fdisk 종료 와 함께 테이블의 변경사항을 디스크에 저장하고 끝내려면 w 명령어를 사용한 다. 제일 먼저 할 일은 현재 파티션테이블을 화면에 표시하고 화면에 나타난 정보를 나중에 참조하기 위해서 적어둔다. p 명령어를 이용하라. Command (m for help):p Disk /dev/hda: 16 heads , 38 sectors , 683 cylinders Units = cylinders of 608 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda * 1 1 203 61693 6 DOS 16-bit >=32M Command (m for help): 이 예제에서는 /dev/hda1에 하나의 MS-DOS 파티션(61693 block = 약 60메 가)이 있다. 이 파티션은 cylinder number 1에서 시작하며, cylinder 203에서 끝난다. 전체 하드의 용량은 683 cylinder이므로 리눅스파티션이 만들기 위한 공간으로 480 cylinder가 남겨져 있다. 새로운 파티션을 생성하기 위하여 n 명령을 사용한다. 예제에서는 리눅스를 위하여 두개의 primary partition( /dev/hda2, /dev/hda3 )을 만든다. Command (m for help): n Command action e extended p primary partition (1-4) p 여기서 fdisk는 만들어질 파티션의 type을 물어온다 extended냐 primary냐 하고. 우리는 단지 primary partition만을 만들기로 하자. p를 입력한다. Partition number (1-4) : fdisk는 만들 파티션의 partition number를 물어온다 : 이미 partition 1은 사용 중이므로 첫 리눅스 파티션은 2가 된다. Partition number (1-4) : 2 First cylinder (204-683) : 이제 파티션의 시작 cylinder number를 입력한다. cylinder가 204에서 683까 지 빈 공간으로 잡혀있기 때문에 그 중의 첫번째 것을 사용하면 된다. 파티션 사이에 빈 공간을 두어야 할 이유는 없다. First cylinder (204-683) : 204 Last cylinder or +size or +sizeM or +sizeK (204-683) : 이제 fdisk는 만들 파티션의 크기를 묻는다. 여기서는 마지막 cylinder number나 byte단위 , Kilobyte , Megabytes단위로 적어준다. 80메가의 크기를 원한다면 +80M 이라고 적으면 된다. 어떤 방법으로든 파티션의 크기를 적으면 fdisk는 실린더에 가장 가까운 숫자로서 실제 파티션의 크기를 지정해준다. Last cylinder or +sizr or +sizeM or +sizeK (204-683) : +80M Warning: Linux cannot currently use 33090 sectors of this partition 만약에 위와 같은 경고메시지가 나온다 해도 무시한다. 오래된 프로그램의 fdisk는 이런 경고메시지를 출력한다. 리눅스 파티션이 64메가바이트이상이 되어도 허용한다. 이제 두번째 리눅스 파티션을 만들 준비가 되었다. 설명을 위해서 10메가바이 트의 파티션을 만들기로 한다. Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 3 First cylinder (474-683): 474 Last cylinder or + size or + sizeM + or sizeK (474-683): +10M 마지막으로 우리는 파티션 테이블을 출력한다. 다시 이러한 정보들 - 특별히 여기서는 새로 만든 블럭크기(block size) - 을 적어둔다. Command (m for help): p Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders Units = cylinders of 608*512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 203 61693 6 DOS 16-bit >=32M /dev/hda2 204 204 473 82080 81 Linux/MINIX /dev/hda3 474 474 507 10336 81 Linux/MINIX 여기서 본바와 같이 /dev/hda2는 이제 82080 block 크기의 ( 80메가에 해 당) 새로운 파티션이 되었고, /dev/hda3는 10336 block 크기 (10메가에 해당) 의 파티션이 되었다. 위의 예제에서 보면 남아 있는 cylinder( 508에서 608번까지)는 미사용으로 되어있다. 이 파티션은 여러분이 원한다면 미사용으로 남아 있을 수도 있고 나 중에 새로운 파티션으로 생성할 수도 있다. 마지막으로 w 명령을 사용해서 변경사항을 디스크에 저장하고 fdisk를 빠져나간다. Command (m for help): w # fdisk 를 실행하고 있는 동안에 변경된 것들은 w 명령을 사용하기 전까지는 절대로 시스템에 영향을 줄 수 없다는 것을 명심하라.따라서 여러가지 환경 을 설정하여 장난을 하여도 되는데 여러분이 시작하려고 한다면 저장을 하여 라. 또한 변경사항을 저장하지 않고 fdisk를 빠져나가려면 q 명령을 사용 한다는 것도 명심한다. 리눅스의 fdisk 명령이외에 다른 OS의 fdisk로는 파티 션을 수정할 수 없다는 것도 기억하기 바란다. 실린더 번호 1024이상을 사용하는 파티션으로는 리눅스를 부팅할 수 없다는 것을 명심하라. 따라서 여러분들은 1024이하의 실린더 범위에 리눅스 root 파 티션을 설치하도록 노력해야한다. 만약 이 과정이 불가능하다면 여러분은 단 지 플로피로 리눅스를 부팅할 수 있다. 어떤 리눅스 배포본은 fdisk 실행을 마치면 system을 다시 부팅하도록 요구 하고 있다. 이는 리눅스를 인스톨하기 전에, 파티션에 대한 변경사항이 효과 가 있도록 한다. 새로운 버전의 fdisk 프로그램은 자동적으로 커널내의 파티 션정보를 갱신시켜주므로 재부팅 절차가 필요없다. 안전하게 인스톨하려면 인스톨하기 전에 Installation media로 다시 부팅을 시켜주어야 한다. 2.3.4 스왑공간 만들기 가상적인 RAM으로 swap partition을 사용할 계획을 가지고 있다면 이제 그 것을 사용할 준비를 하여야 한다. Chapter 4에서는 여러분들이 독립적인 swap partition 사용하기를 원치 않는 경우에 대하여 swap file 만드는 것에 대 해서 논의 할 것이다. 대개의 리눅스 배포본은 리눅스를 설치하기 이전에 swap 공간을 생성할 것을 요구한다. 만약 여러분들의 시스템에 RAM이 적고 swap 공간을 만들지 않았다면 리눅스인스톨은 성공하지 못할 수도 있다. swap partition을 생성하는 명령어는 mkswap 이며 다음과 같은 형태로 수 행된다. mkswap -c 여기서 은 swap partition 명이고 는 이 partition의 block형 태의 크기이다. 예를 들어 swap partition은 /dev/hda3이고 크기가 10336 blocks 이라면 위의 명령은 아래와 같이된다. # mkswap -c /dev/hda3 10336 -c 옵션은 mkswap 명령에게 swap 공간을 만들 때 파티션에 bad block이 생겼는지 check 하라는 것이다. 만일 다중 swap 공간을 사용한다면 각각의 partition에 대해서 적당한 mkswap 명령을 실행해야 한다. Swap 공간을 포맷한 후에는 시스템이 그 영역을 사용하게 지정해줄 필요가 있다. 일반적으로 시스템은 부팅시에 자동적으로 swap 공간을 사용가능하게 한다. 그러나 여기서는 아직 리눅스를 인스톨하지 않은 상태이므로 수동으로 서 지정해 주어야 한다. Swap 공간을 사용가능하게 해 주는 명령어는 swapon 이며 , 명령어 형태는 swapon 위의 예제에서 /dev/hda3의 swap 공간을 사용가능하게 하려면 # swapon /dev/hda3 과 같이 하면 된다. 2.3.5 파일시스템 만들기 리눅스를 하드에 설치하기 전에 filsystem을 만들어야 한다. Filesystem을 만 드는 것은 MS-DOS나 다른 OS에서의 partition을 format하는 것과 유사하다. 우리는 2.2.3절에서 간단하게 filesystem에 대해서 언급한적 있다. 리눅스에는 여러개의 filesystem이 가능하다. 각각의 filesystem type은 특유의 format이 있으며 특징의 집합이다( filename의 길이, 최대 file 크기등등). 리눅 스는 몇몇의 "third-party" filesystem type을 지원한다 - MS-DOS fielsystem이 라든지. 가장 흔하게 사용되는 filesystem은 Second Extended Filesystem ( ext2fs )이 다. Ext2fs filesystem은 가장 효율적이고 유연한 filesystem중의 하나이다: 이는 filename을 256자까지 가능하게 하며, filesystem 크기는 4 테라바이트까지 가 능하다. 4장에서 우리는 리눅스에서의 filesystem들에 대해서 논의하기로 한다. 그러나 내부적으로는 우리는 extfs filesystem을 사용한다고 가정한다. Ext2fs filesystem을 만들기 위해서는 mke2fs -c 명령을 사용하는데 여기서 은 partition 명이고, 는 partition block의 크기이다. 예를 들어 /dev/hda2의 82080 block의 filesystem이라면 #mke2fs -c /dev/hda2 82080 명령을 사용하면 된다. 리눅스 상에서 여러개의 filesystem을 사용하고자 한다면 각각의 filesystem에 대해서 적당한 mke2fs명령을 사용하면 된다. 여기서 어떤 문제가 있다면 이 Chapter의 마지막부분인 2.5절을 참고하기 바란다. 2.3.6 리눅스의 설치 이제야 리눅스를 여러분의 시스템에 설치할 수 있게 되었다. 배포본들은 설 치절차에 있어서 각각 다른 메커니즘을 가지고 있다. 많은 배포본들은 인스톨 을 하는데 있어서 자동적으로 설치하게 한다. 어떤 배포본은 디렉토리에( /mnt 와 같은 ) 반드시 mount해서 수동으로 리눅스를 설치하여야 한다. CD-ROM의 설치는 옵션을 주어서 부분설치가 가능하며 대부분의 software는 CD-ROM 에 남게 된다. 어떤 배포본은 리눅스를 인스톨하는데 있어서 다른 방법을 제공한다. 예를 들 면 플로피로 인스톨하는 대신에 MS-DOS 파티션에서 바로 직접 인스톨하는 방법을 제공한다. 또한 FTP나 NFS를 경유하여 TCP/IP상에서 인스톨할 수도 있다. 자세한 것을 각자가 가지고 있는 배포본의 document를 보도록 한다. 예를 들어 리눅스 SLS 배포본은 doinstall 명령을 사용한다. 다음과 같은 형태 를 가지는데 doinstall ... 여기서 는 root filesystem의 이름이고 과 은 부 가적인 filesystem과 filesystem에 대한 mount point이다. 예를 들어 /dev/hda2 상에 하나의 filesystem을 가지고 있다면 다음과 같은 명령어로 리눅스를 설 치할 수 있다. # doinstall /dev/hda2 만약 /usr에 대한 부가적인 filesystem이 /dev/hda4에 있다면 다음과 같은 명령 어로 리눅스를 설치할 수 있다. # doinstall /dev/hda2 /dev/hda4 /usr 다시 말해서 위의 명령어는 예제에 불과하다. 리눅스를 설치하는 정확한 방법은 어떤 배포본이냐에 따라서 결정되어 지는 것이다. 대부분의 리눅스 배 포본이 인스톨할 때 자동적으로 설치가 되었으면 하는 것이 우리의 바램이 다. 2.3.7 Boot Floppy나 LILO 설치하기 리눅스 배포본들은 인스톨을 마치고 난 후 새롭게 설치된 리눅스의 부팅할 수 있는 방법을 제공한다. 많은 경우에 인스톨절차는 "boot floppy"를 만드는데 여기는 새로이 생성된 root filesystem을 사용하기 위한 리눅스 커널이 포함되 어 있다. 리눅스를 부팅하기 위해서는 "boot floppy"로 부팅을 하면 부팅을 마 치고는 하드에 설치된 리눅스로 제어권이 넘어간다. 어떤 배포본은 이러한 "boot floppy" 자체가 인스톨 플로피디스켓 자신이 되는 경우도 있다. 대부분의 배포본은 LILO를 하드디스크에 인스톨하는데 옵션을 제공한다. LILO 란 드라이브의 Master Boot Record에 인스톨된 프로그램이다. 이는 리눅스와 도스를 포함한 여러개의 OS를 부팅시켜주며 부팅될 때마다 선택을 할 수 있 도록 한다. LILO를 성공적으로 설치하기 위해서는 여러분들의 드라이브상태를 알고 있는 것이 좋다 - 예를 들어 어떤 파티션에 어떤 OS를 사용하고 있는 지, 각각의 OS를 어떻게 부팅시키는지 등등. 2.3.8 부가적인 설치절차 어떤 리눅스 배포본은 TCP/IP networking, X Window System등등 다양한 소프트웨어 팩키지의 환경설정을 위한 부가적인 인스톨 과정을 제공한다. 인스 톨하는 과정에 이러한 환경설정 옵션을 제공받으려면 여러분은 어떻게 이 소 프트웨어들의 환경을 설정하는 지에 대한 더 많은 정보를 얻기 위해서 이 책을 계속 읽어 나가야 한다. 반면에 이 소프트웨어의 환경을 어떻게 설정하는지 에 대해 완전히 이해를 할 때까지 이들 인스톨 절차를 연기해야 할 것이다. 이것은 여러분에게 달려있다. 현재 부적절하게 인스톨한 것들이 나중에 이상 하게 동작하지 않는다는 것은 매우 의심스러운 일이다. 2.4 인스톨후의 절차 리눅스인스톨을 마친 후 리눅스를 사용하기 위해서는 아주 적은 일만이 남 아 있다. 대부분의 경우 시스템을 재부팅시키고 root로 login해서 리눅스시스템 을 탐색할 것이다.( 각각의 배포본은 이러한 절차를 수행하는데 있어서 다른 방법을 가지고 있다 - 각자가 가지고 있는 배포본의 명령어에 따르면 된다) 여러분이 사용할 시스템을 어떻게 reboot, showdown시키는지에 대해 언급하 는 것이 이 시점에서 가장 필요하다고 본다. 절대로 reset 스위치나 ctrl-alt-del 의 조합으로서 시스템을 reboot하거나 shutdown 해서는 안된다. 단순히 Power 스위치를 내려서도 안된다. 대부분의 UNIX 시스템에서와 같이 리눅스 도 캐쉬메모리를 사용한다. 따라서 만약 "깨끗하게" shutdown되지 않은 상 태에서 시스템을 reboot한다면 데이터가 손상을 입게 된다. 시스템을 shutdown시키는 가장 쉬운 방법은 shotdown 명령어를 사용하는 것이다. root의 자격으로서 다음의 명령을 수행하면 즉각적으로 시스템이 reboot된다. # shutdown -r now 이 명령은 완벽하게 시스템을 reboot 시킨다. shutdown에 대한 man page에 다른 command-line 옵션들이 기술되어 있다. 그러나, 많은 리눅스 배 포본들의 installation media에는 shutdown 명령어를 지원하지 않는다. 즉, 이 말은 여러분들이 인스톨을 하고 난 후에 처음으로 시스템을 reboot할 경우가 있을 때는 결국 ctrl-alt-del의 조합으로서 reboot를 시켜야 한다는 것이다. 그 후에는 shutdown 명령어를 사용할 수 있다. 시스템을 조사하고 사용하는 기회를 가진 후에 여러분이 이해해야할 몇가지 환경설정들이 있다. 첫번째는 여러분 자신의 계정을 만드는 것이고( 그리고 옵션으로 다른 사용자들도 시스템을 사용하게 할 수 있도록 하라 ). 계정을 만드는 방법은 4.4절에 나와있다. 리눅스에서 하나이상의 filesystem을 만들었거나 swap 파티션을 사용한다면 여러분은 이들 filesystem이 리부팅후에 자동적으로 사용이 가능하도록 /etc/fstab 파일을 수정할 필요가 있다. ( 예들 들어 /usr에 대해 나누어진 몇개 의 filesystem을 사용한다면 /usr에 있어야 할 파일들이 현재에는 아무것도 보이 지 않게 된다. 여기서 단지 filesystem을 마운트하면 된다 ) 4.8절에서 이 절차 에 대해서 언급한다. 2.5 문제발생의 해결 모든 사람에게 있어서 리눅스를 처음 인스톨하는데 있어서 시스템이 중단된 다든지 하는 어떤 종류의 문제에 부딪히게 된다. 대부분의 경우 단순히 이해 를 잘못하고 있는 경우에 발생한다. 그러나, 개발자에 의해 발견되지 못한 문제나 버그같이 종종 심각한 문제가 발생하는 경우도 있다. 이 절에서는 인스톨할 때 일반적으로 일어나는 문제들에 대해서 언급을 할 것이며 어떻게 이러한 문제를 풀어 나갈 것인가 하는 것에 대해서 설명한다. 만약 인스톨이 성공적으로 될 것 같더라도 예상치 않았던 에러메시지들을 접 할 수 있다. 이러한 문제들을 아래에 기술하였다. 2.5.1 인스톨매체로 부팅할 때의 문제점 처음에 인스톨매체로서 부팅할 때 많은 종류의 문제들에 부딪히게 된다. 아 래에 이러한 것들의 리스트가 있다. 아래의 문제들은 새로 인스톨된 리눅스 의 부팅에 대한 것이 아니라는 것을 명심하라. 2.5.4절에서 이러한 종류의 함정 에 대한 정보가 있다. o Floppy or media error when attempting to boot --------------------------------------------- (부팅을 하고자 할 때 플로피나 인스톨매체에서 에러가 발생한다) 이러한 문제의 가장 일반적인 원인은 boot floppy가 손상을 받은 경우이다. 플로피가 물리적으로 손상을 입은 경우는 새로운 플로피로서 다시 만들어야 하며, 플로피에 있는 데이터에 bad가 발생한 경우는 다운로드를 정확하게 받 았는가 다시 검색하고 플로피에 올바로 적혀 졌는지를 검색한다. 대부분의 경 우에 boot floppy를 다시 만들어서 이러한 문제를 해결한다. 전에 행한 절차 를 다시 반복한다. 만약 boot floppy를 여러분자신이 다운로드 받거나 만들지 않고 우편으로 주문한 것이라든가 다른 사람에게 받은 것이라면 그 사람에게 가서 새로운 boot floppy에 대해서 물어보아라 - 하지만 정말로 이상이 있다는 것을 확인한 후에 물어보는 것이 좋다. o System "hangs" during boot or after booting ------------------------------------------- (boot를 하는 도중 아니면 한 후에 시스템이 멈춘다) 인스톨메체로부터 부팅을 한 후, 여러분은 커널로부터 어떤 디바이스들이 발견 아니면 환경설정이 되어있는 지를 가리키는 많은 메시지들을 볼 수있다. 이후에 login prompt를 볼 수 있고 인스톨을 진행할 수 있도록 한다( 어떤 배포 본은 인스톨 프로그램으로 여러분을 인도하기도 한다 ). 시스템은 이러한 몇가 지 과정중에서 멈추어 질 것이다. 이 과정동안에는 인내심을 가져야 한다; 플 로피로부터 인스톨하는 과정은 매우 늦기 때문이다. 많은 경우에 시스템 전체 가 멈추지는 않아도 단지 늦어지는 경우가 있다. 드라이브가 없는지, 시스템 에서 일어나는 일이 몇 분 동안 걸리는지 확인하고 시스템이 멈췄다고 가정하 라. 1. LILO 프롬프트로부터 부팅한 후에 시스템은 커널이미지를 플로피 로부터 로드한다. 이 경우 몇 초가 소요된다; 여러분은 플로피 드라 이브의 불빛이 켜져있으면 잘 진행된다는 것을 알 것이다. 2. 커널을 부팅하는 동안 SCSI 디바이스가 조사된다. 만약 어떤 SCSI 디바이스도 없다면 SCSI를 탐색하는 15초간 시스템은 멈춰질 것이다; 이는 보통 다음 라인을 스크린에 내보낸다. lp_init: lp1 exists (0), using polling driver 3. 커널이 부팅을 마치면 제어는 플로피의 bootup file들로 넘겨진다. 마침내 여러분은 login prompt를 보게 되거나 인스톨 프로그램을 만나게 된다. 다음과 같은 login prompt를 만난다면 Linux login: 여러분은 login을 하여야 한다( 보통 root나 install - 이는 배포본마다 다르다 ). Username을 입력하고 난 후 시스템은 플로피에서 인스톨 프로그램이나 shell을 로드하기 위해서 20초 혹은 그 이상 멈춘다. 플로피 드라이브는 불이 켜져 있 어야 한다. 시스템이 멈췄다고 가정하지 말라. 위의 적은 것들이 여러분이 부딪히는 문제의 전부는 아니다. 그러나 부팅하는 동안 시스템이 실제적으로 멈추는 것은 가능하며 이는 몇가지 원인에 기인한 다. 가장 먼저 인스톨 매체를 부팅시키기엔 충분하지 않은 RAM을 가지고 있 을 수도 있다.( Memory를 free up 하도록 Ramdisk를 disable시키는 정보에 대 해서는 다음의 아이템을 참조하라 ) 많은 시스템이 멈추는 원인은 하드웨어와의 호환성이 없는 경우이다. 마지막 장의 1.8절에서 리눅스하에서 작동되는 하드웨어의 개관이 나와있다. 만약 여 러분의 하드웨어가 지원된다 할지라도 시스템의 멈춤을 유발할 수 있는 하드 웨어 환경설정의 비호환성으로 문제에 직면할 수도 있다. 2.5.2절에서 하드웨어 의 비호환성에 대해 언급한다. o System reports out of memory errors while attempting to boot or install the software -------------------------------------------------------------------------------------------------------- (부팅이나 인스톨을 하는 도중에 메모리가 부족하다는 에러가 나온다) 이 문제는 여러분이 가질수 있는 메모리량을 다루는데, 4메가바이트 이하 의 메모리에서는 인스톨매체로 부터 부팅할 때나 소프트웨어를 인스톨할 때 문 제에 접할 수 있다. 이는 많은 배포본들이 인스톨 매체를 사용하는 동안 작동 시키기 위해서 RAM으로 직접 로드되는 filesystem인 "ramdisk"를 사용하기 때 문이다. 예를 들어 인스톨 부트플로피의 전체 이미지는 ramdisk로 로드될 것이다. 이 경우 1메가바이트 이상의 RAM을 요구한다. 이 문제의 해답은 인스톨매체로 부팅할 때 ramdisk의 옵션을 disable로 하는 것이다. 각 배포본은 이러한 일을 하는데 각각 다른 절차를 가지고 있다; 예 를 들어 SLS 배포본은 a1 디스켓으로 부팅할 때 LILO prompt에서 "floppy"를 입력하면 된다. 자세한 것은 배포본의 문서들을 참조하라. 부팅하거나 소프트 웨어를 인스톨할 때 "메모리가 부족하다"하는 메시지를 접하지 않을 수도 있다; 대신에 시스템은 예상치 않게 멈춰버리거나 부팅에 실패한다. 시스템이 멈추었 고 위에서 언급한 아이템 중에서 원인이 보이지 않는다면 ramdisk를 disable 로 해보아라. 리눅스는 그 자신을 수행하는데 적어도 2메가바이트의 RAM이 필요하다는 것을 명심하라; 어떤 배포본은 4메가바이트 이상을 요구하는 것도 있다. o The system reports an errors such as "permission denied" or "file not found" while booting ----------------------------------------------------------------- (부팅시에 "permission denied"나 "file not found" 에러가 난다) 이는 인스톨매체가 손상을 입은 경우이다. 인스톨매체로 부팅하고자 할 때( 그리고 여러분이 한 일들이 정확하게 했을 때 )여러분은 이와 같은 에러들 을 보지 못할 것이다. 리눅스를 배포하는 사람을 만나보고 이 문제에 대해서 해답을 찾아라. 그리고 아마 만약 필요하다면 다른 부트매체를 얻을 수 있을 것이다. 여러분 자신이 bootup disk를 다운로드 받았다면 bootup disk를 다 시 만들어보고 이것이 문제를 해결하는가를 관찰하라. o The system reports the error "VFS: Unable to mount root" when booting ----------------------------------------------------------------- (부팅시에 "VFS: Unable to mount root"라는 에러가 난다) 이 에러메시지는 root filesystem ( 부트매체가 발견한 root filesystem ) 가 발견되지 않을 경우이다. 여러분의 부트매체가 손상되었거나 시스템을 정확하 게 부팅할 수 없다는 것을 뜻한다. 예를 들어 많은 CD-ROM 배포본은 부팅 할 때 드라이브 안에 CD-ROM이 있다고 가정한다. CD-ROM 드라이브가 on 상 태이면 어떤 작동을 할 수 있는지 검사한다. 부팅할 때 CD-ROM 드라이브가 어디 있는지 시스템이 모르는 경우도 있다; 2.5.2절에 더 많은 정보가 있다. 시스템이 정상적으로 부팅된다는 것을 확신한다면 bootup 매체가 정말로 손상 을 입었을 것이다. 이는 매우 드물게 일어나는 문제이므로 다른 boot floppy 나 tape를 사용하기 전에 다른 해답을 찾도록 노력하라. 2.5.2 하드웨어상의 문제 리눅스를 인스톨할 때나 사용할 때 흔히 접하게 되는 문제중의 하나가 하드 웨어와의 비호환성에 대한 문제이다. 심지어 리눅스에 의해 지원되는 하드웨 어일지라도 잘못된 환경설정이나 하드웨어간의 충돌은 종종 이상한 결과를 가 져다준다 - 여러분의 디바이스들이 부팅시에 발견되지 않을 수도 있으며 시스 템이 멈추는 경우도 있다. 문제의 근원에 대해서 여러분이 의문을 가진다면 하드웨어의 문제를 따로 떼 어서 생각하는 것이 중요하다. 다음절에 일상적인 하드웨어의 문제와 어떻게 그것을 해결할 지에 대한 것을 언급한다. 2.5.2.1 하드웨어문제를 따로 떼어냄 만약 여러분이 하드웨어에 관련된 것 같다고 생각하고 있는 문제를 가지고 있다면 여러분이 처음 하는 일은 그 문제를 고립시키려고 시도하는 것이다. 이 말은 모든 가능한 변수와 그리고 (보통) 문제가 있는 하드웨어가 고립될 때 까지 시스템을 조각조각 나누는 것이다. 이것은 아주 놀랄만하게 들리지 않을 수도 있다. 기본적으로 여러분은 시스템 에서 불필요한 하드웨어를 제거해야하고 어떤 디바이스가 실제적으로 문제를 일으키는지를 결정하여야 한다 - 각 디바이스를 다시 넣어보고, 하나를 동시에 함으로서 가능하다. 이 말은 플로피나 비디오 콘트롤러, 키보드를 제외한 모 든 하드웨어를 제거 해야한다는 것이다. 만약 여러분이 마우스 콘트롤러와 같 이 문제가 없어 보이는 것까지 불필요한 하드웨어라고 생각하지 않는다면 여 러분의 마음 일부분에 알 수 없는 영향을 미칠 수 있다. 예를 들어 부팅 시에 Ethernet board 발견과정에서 시스템이 멈추었다고 하 자. 그러면 여러분은 시스템에 있는 Ethernet board가 충돌이 있었거나 문제가 있다고 가정한다. 찾아내는 빠르고 쉬운 방법은 Ethernet board를 뽑아서 다시 부팅하는 것이다. 만약 모든 것이 잘 되었다면 (a) 리눅스에 의해서 그 Ethernet board가 지원되지 않거나( 1.8절에 호환되는 board의 리스트가 있다 ) (b) 주소나 IRQ가 board와 충돌하는 경우이다 라는 것을 알게 된다. "주소나 IRQ가 board와 충돌을 ?" 이 말이 대체 무엇인가 ? 여러분의 기계의 모든 디바이스들은 시스템에게 무언가 할 일이 필요하다는 것을 알려주기 위 해서 IRQ나 interrupt request line을 사용한다. IRQ는 어떤 절박한 요구를 돌보 기 위해서 시스템에 필요로 하기에 끌어당기는 선이라고 생각할 수 있다. 만 약에 하나이상의 디바이스가 같은 선을 당긴다면 커널은 어떤 디바이스가 서 비스를 요구하는지 결정할 수 없다. 이 순간 충돌이 일어나는 것이다. 따라서 여러분의 시스템에 인스톨된 모든 디바이스들은 각각 유일한 IRQ line 을 사용한다. 일반적으로 디바이스를 위한 IRQ는 카드에 있는 점퍼로 set 된다; 자세한 것은 특정 디바이스의 문서를 참조하라. 어떤 디바이스는 IRQ만을 요 구하는 것이 아니나 가능하면 그들이 하나만을 이용하도록 환경설정 해주기 를 제안하고 있다( 시게이트 ST01과 ST02 SCSI 콘트롤러가 좋은 예가 된다). 어떤 경우에는 커널이 인스톨매체상에서 어떤 IRQ는 어떤 디바이스가 사용하 도록 환경설정하는 것을 제공한다. 예를 들어 어떤 배포본은 IRQ 5를 TMC-950 SCSI 콘트롤러, Mitsumi CD-ROM 콘트롤러와 bus mouse driver가 사용하도록 미리 환경설정이 되어있다. 만약 이들 디바이스 중에 2개 이상을 사용하고자 한다면 이들 디바이스 중에 하나를 enable로 하고 처음 인스톨한 후에 디폴트 IRQ를 바꾸기 위해서 커널을 다시 컴파일한다( 4장에 커널을 다 시 컴파일하는 것에 대한 정보가 있다 ). 하드웨어 충돌이 일어나는 또다른 곳은 DMA ( direct memory access) channel과 I/O address, 그리고 공유된 memory address들이다. 이 메커니즘은 어떤 시스템이 하드웨어 디바이스들과 interface하는가를 통해서 설명된다. 예를 들어 어떤 Ethernet board는 시스템과 interface하기 위해서 IRQ 뿐만 아니라 공유된 memory address를 사용한다. 만약 이들 중에서 다른 디바이스와 충돌 을 일으킨다면 시스템의 작동은 예상하지 못한다. 여러분은 점퍼 setting으로 다양한 디바이스들의 DMA channel, I/O나 공유된 memory address를 바꾸어 야 한다( 불행하게도 어떤 디바이스는 이들 setting을 바꾸는 것을 허용하지 않는다). 다양한 하드웨어 디바이스의 문서들은 그 디바이스가 사용하는 IRQ, DMA channel, I/O address나 공유된 memory address들, 그리고 어떻게 그들 환경 을 설정하는지에 대해서 적혀져 있어야 한다. 이러한 문제의 간단한 해결책은 여러분이 문제의 원인을 찾을 때까지 임시적으로 충돌이 일어나는 디바이스를 disable하는 것이다. Table 2.2에 다양한 대부분의 시스템에서 볼 수 있는 "표준" 디바이스들의 IRQ와 DMA channel의 리스트가 있다. 거의 모든 시스템에서 이들 디바이스를 가지고 있기에 여러분은 이들 값과 충돌이 일어나는 다른 디바이스들의 IRQ와 DMA의 setting은 피해야 한다. ----------------------------------------------------------------------------------------------- Device I/O address IRQ DMA ----------------------------------------------------------------------------------------------- ttyS0(COM1) 3f8 4 n/a ttyS1(COM2) 2f8 3 n/a ttyS2(COM3) 3e8 4 n/a ttyS3(COM4) 2e8 3 n/a lp0(LPT1) 378-37f 7 n/a lp1(LPT2) 278-27f 5 n/a fd0,fd1(floppies 1 and 2) 3f0-3f7 6 2 fd2,fd3(floppies 3 and 4) 370-377 10 3 ------------------------------------------------------------------------------------------------ Table 2.2 Common device setting 2.5.2.2 하드디스크나 디스크 콘트롤러의 문제점 인식 리눅스가 boot될 때, 다음과 같은 종류의 메시지를 화면에서 볼 수가 있다. Console : colour EGA+ 80x25, 8 virtual comsoles Serial driver version 3.96 with no serial option enabled tty00 at 0x03f8 (irq = 4) is a 16450 tty03 at 0x02e8 (irq = 3) is a 16550A lp_init: lp1 exist(0) , using polling driver ... 여기에서 커널은 여러분의 시스템에 있는 다양한 hardware device들을 찾아 낸다. 메시지 어딘가에 다음과 같은 것을 볼 수 있다 . Partition check : 인식된 파티션이 적혀지게 된다. 예를 들면: Partition check : hda: hda1 hda2 hdb: hdb1 hdb2 hdb3 만약 어떤 이유로 drive나 partition이 인식되지 못했다면 여러분들은 그것들을 어떤 방법으로든지 access 시킬 수 없다. 이러한일이 발생되는 몇 가지 경우가 아래에 있다. o Hard drive or controller not supported -------------------------------------- (하드드라이브나 콘트롤러가 지원되지 않는다) 만약 여러분들이 리눅스가 지원하지 않는 하드드라이브 콘트롤러를 사용 한다면 (IDE,SCSI,기타) 커널은 부팅시에 파티션을 인식하지 못한다. o Driver or controller improperly configured ------------------------------------------ (드라이브나 콘트롤러가 부적절하게 설정되어 있다) 리눅스에 의해서 콘트롤러가 지원된다 하더라도 정확하게 설정이 되어 있지 않은 경우가 있다.( 이것은 SCSI 콘트롤러에서 나타나는 문제이다; 대부분 SCSI가 아닌 콘트롤러에서는 부가적인 환경설정이 없이도 잘 작동한다) 하드드라이브나 콘트롤러에 대해 일어나는 이러한 문제의 해결에 대해서는 문서들을 참조하라. 특별히, "slave"로 사용되는 하드드라이브 ( 예를 들어 두번 째 하드드라이브)들에 대해서는 점퍼를 세팅할 필요가 있다. 이러한 환경의 신 랄한 시험에 대해서는 이러한 하드드라이브나 콘트롤러에서 작동한다고 알려 진 MS-DOS나 다른 OS들에서 부팅을 시켜보는 것이다. 다른 OS에서 문제없 이 access할 수 있다면 하드웨어 설정에는 문제가 없는 것이다. 위의 2.5.2.1에서는 가능한 디바이스들의 충돌가능성에 대한 정보가 있고, 아래의 2.5.2.3에서는 SCSI Device들의 환경설정에 대한 정보가 있다. o Controller properly configured, but not detected ------------------------------------------------ (콘트롤러는 적합하게 설정되어 있으나 발견되지 않는다) 어떤, BIOS에 별 의존하지 않는 SCSI 콘트롤러들은 부팅할 때 콘트롤러에 대해 특별히 어떤 정보를 사용자에게 요구한다. 아래의 2.5.2.3에서 어떻게 이러한 콘트롤러를 찾는 방법에 대해 다룬다. o Hard drive geometry not recognized ---------------------------------- (하드드라이브 geometry가 인식되지 않는다) 리눅스가 CMOS에서 찾는 Hard drive geometry에 대한 정보를 IBM PS/ValuePoint와 같은 시스템에서는 CMOS에 저장하지 않는다. 또한 어떤 SCSI 콘트롤러는 드라이브에 대한 layout를 리눅스에게 인식시키기 위해서 찾 고자 하는 드라이브의 geometry를 안다. 대부분의 배포본의 drvie geometry를 특징짓는 bootup option을 제공한다. 일반적으로 인스톨 매체로 부팅할 때 LILO 프롬프트가 나타났을 때 다음의 명령과 함께 drvie geometry를 특징지울 수 있다. boot : linux hd=,, 여기서 ,,는 각각 드라이브의 실린더수, 헤드수, 트랙당 섹터수에 대응한다. 리눅스를 인스톨한 후에 리눅스를 하드드라이브로 부팅할 수 있게 하는 LILO를 인스톨할 수 있다. 동시에 LILO 인스톨 과정에서 부팅할 때마다 drive geometry를 입력할 필요없는 drive geometry를 특징지울 수 있다. 4장에서 LILO에 대해서 더 많이 다루게 될 것이다. 2.5.2.3 SCSI Controller와 Device의 문제 여기에 나와있는 문제들은 CD-ROM,하드드라이브,Tape drive와 같은 SCSI방 식의 콘트롤러와 디바이스에 나타나는 매우 일상적인 문제들이다. 여러분이 구한 리눅스가 드라이브나 콘트롤러를 인식하는데 문제가 있다면 계속 읽어 나가기 바란다. Linux SCSI HOWTO(부록A)에 유용한 SCSI device들이 있고 여기에 부가적으로 리스트가 있다. SCSI들은 동시에 설정되는 것이 보통이다. o A SCSI device is detected at all possible ID's ---------------------------------------------- (가능한 모든 ID로 SCSI device가 인식된다) 이러한 문제는 콘트롤러에 의해서 같은 주소를 device가 가리킬 때 일어난 다. 콘트롤러 자신으로부터 드라이브가 다른 주소를 사용하도록 jumper setting을 바꾸어 줄 필요가 있다. o Linux reports sense errors, even if the devices are known to be error-free ----------------------------------------------------------------- (에러가 없던 디바이스가 리눅스를 사용하면 에러가 감지되어 나타난다) 이 경우는 케이블이 나쁘거나 bad termination이 일어날 경우이다. 만일 SCSI bus 가 양쪽 끝에서 끝나지 않았다면 SCSI 디바이스를 access 하려 하면 에러가 발생할 것이다. 미심쩍으면 항상 케이블을 점검하라. o SCSI devices report timeout errors ---------------------------------- (SCSI 디바이스가 timeout error를 보고한다) 이 경우는 IRQ,DMA나 다른 device간의 충돌에 의해서 일어난다. 콘트롤러 에 정확히 그 인터럽트들이 enable인지 체크하라. o SCSI controllers using BIOS are not detected -------------------------------------------- (BIOS를 사용하는 SCSI 콘트롤러가 발견되지 않는다) BIOS를 사용하는 SCSI 콘트롤러의 발견은 BIOS가 disable이거나 콘 트롤러의 "signature"가 커널에 의해서 인식되지 않으면 실패할 수 있다. Linux SCSI HOWTO에 이러한 문제에 대한 더 많은 정보들이 있다. o Controllers using memory mapped I/O do not work ----------------------------------------------- (Memory mapped I/O를 사용하는 콘트롤러가 아무런 작동을 하지 않는다) 이 경우는 memory mapped I/O 포트가 부정확하게 cach된 경우이다. XCMOS의 board address space를 uncachable로 mark하고 cache를 disable로 하라. o When partitioning, you get a warning that "cylinders > 1024", or you are unable to boot from a partition using cylinders numbered above 1024. -------------------------------------------------------------------- (파티션을 나눌 때 "cylinders > 1024"라는 경고나 혹은 실린더 번호 1024이상을 사용하는 파티션으로부터 부팅을 할 수 가 없을 경우) BIOS의 한계는 실린더 번호 1024까지이며 따라서 실린더번호 1024이상을 사용하는 어떠한 파티션도 BIOS로 부터 이 파티션을 access할 수 없다. 리눅 스에 의하면 이것은 부팅할 때만 영향을 미친다; 일단 시스템이 부팅되면 이 파티션은 사용할 수 있다. 여러분은 플로피로 부팅을 하든지 1024이하를 사용하는 파티션으로 부팅하면 된다. 2.3.7절에 부트디스켓을 만드는 방법, LILO를 설치하는 방법이 나와있다. o CD-ROM drive or other removeable media devices are not recognized at boot time. -------------------------------------------------------------------- (CD-ROM이나 다른 device들이 부팅할 때 인식되지 않는다) 드라이브내의 CD-ROM(아니면 disk)으로 부팅을 한다. 이러한 것은 어떤 device들을 필요로 한다. 만약 SCSI 콘트롤러가 인식되지 않는다면 부팅할 때 하드웨어 적으로 찾도록 할 필요가 있다. 이러한 것은 특별히 BIOS에 별 상관 없는 SCSI 콘트롤러에서 중요한 문제이다. 대부분의 배포본들은 인스톨매체로 부팅할 때 콘트롤러의 IRQ나 공유하고 있는 메모리를 지정하도록 한다. 예 를 들어 TMC-8xx 콘트롤러를 사용한다면 LILO boot prompt가 나왔을 때 아래 와 같이 입력할 수 있다. boot : linux tmx8xx=, 여기서 는 콘트롤러의 IRQ이며 는 공유하고 있 는 메모리의 주소이다. 이러한 것들이 가능하든 가능하지 않던 간에 여러분이 사용하고 있는 리눅스 배포본에 달려있다; 자세한 것은 문서들을 참고하라. 2.5.3 리눅스 배포판 설치시의 문제 만약에 여러분이 행운아라면 리눅스를 인스톨할 때 아무런 문제가 없을 것이 다. 전문가라면 인스톨에서 문제가 있다면 인스톨매체의 이상이거나 리눅스 filesystem의 공간부족일 것이다. 여기에 일상적인 문제들이 있다. o System reports "read error","file not found", or other errors whie attempting to install the software ----------------------------------------------------------------- ("read error","file not found"나 인스톨시 다른 에러가 났을 때) 이것은 인스톨매체에 문제가 있다는 것을 표시하는 메시지이다. 플로피에서 인스톨한다면 이러한 종류의 에러가 아주 흔하게 일어난다는 것을 명심하라. 반드시 새로이 포맷된 디스켓이나 새로운 제품을 사용하라. 만약 MS-DOS 파 티션이 있다면 많은 리눅스 배포본들은 하드드라이브에서 리눅스 인스톨을 가 능하도록 해준다. 이 방법은 플로피를 사용하는 것 보다 더 빠르고 믿을 수 있는 방법일 것이다. 만약 CD-ROM을 사용한다면 CD에 긁힌 곳, 먼지 등 인 스톨시 에러를 일으킬 수 있는 다른 문제들은 확인하라. 이러한 문제의 원인은 인스톨 매체가 부적합한 포멧으로 되어있을 경우에 발생한다. 예들 들어 플로피를 사용한다면 대부분의 리눅스 배포본은 이 플로 피가 MS-DOS의 High density 형식으로 되어있어야 한다 ( boot floppy의 경 우는 예외이다; 대부분의 경우 이것은 MS-DOS 포멧이 아니다). 만약 위 방 법 모두 실패를 했다면 여러분이 리눅스를 다시 다운로드 받는다 해도 새로 플 로피를 사서 플로피를 다시 만들어야 한다 (새로운 디스켓으로). o System reports errors such as "tar: read error" or "gzip: not in gzip format" ----------------------------------------------------------------- ("tar: read error"나 "gzip: not in gzip format"과 같은 에러가 날 때) 이 문제는 인스톨매체 자체가 파괴되었을 때 일어난다. 다르게 말하면 가지 고 있는 플로피가 에러가 없더라도 플로피에 있는 데이터가 어떤 방법으로 손 상을 입은 경우이다. 예를 들어 binary mode대신에 text mode를 이용해서 리 눅스를 다운로드 받으면 파일이 손상되며 인스톨 소프트웨어에 의해서 읽혀질 수 없다. o System reports errors such as "device full" while installing ------------------------------------------------------------ (인스톨할 때 "device null"과 같은 에러가 발생할 때) 이는 인스톨할 때 드라이브의 공간을 다 써버린 경우이다. 리눅스 배포판 전 부가 정확히 얼마만큼의 용량을 차지하느냐 잴 수 없다; 인스톨을 중지할 수 없으며 시스템이 작동할지도 예상할 수 없다. 해결책은 filesystem을 다시 만 드는 것이다( mke2fs 명령어를 사용해서 ). 이 방법은 부분적으로 인스톨된 리 눅스를 지운다. 그리고 나서 다시 인스톨하는데, 이 시점에서는 인스톨할 소프 트웨어를 더 작게 잡아야 한다. 다른 경우는 지우고 나서 파티션과 filesystem 크기를 다시 생각해야 하는 것이다. o System reports errors such as "read_intr: 0x10" while accessing the hard drive ----------------------------------------------------------------- (하드드라이브를 access하려면 "read_intr: 0x10"과 같은 에러가 난다) 이는 보통 드라이브에서 bad block이 발견되었을 때 나타난다. 그러나 mkswap이나 mke2fs와 같은 명령어를 수행할 때 나온 에러라면 드라이브를 access할 때 이상이 있는 것이다. 하드웨어상의 문제 ( 2.5.2절 참조 )이거나 드라이브 지정을 잘못한 경우일수도 있다. 만약 아래와 같이 사용한다면 hd=,, 부팅시에 강제로 드라이브 지정을 해주어서 찾게 하고 드라이브의 지정을 잘 못했다면 이러한 문제가 발생하는 경향이 있다. 또한 CMOS에서 드라이브의 지정을 잘못한 경우에도 이런 현상이 일어난다. o System reports errors such as "file not found" or "permission denied" ----------------------------------------------------------------- ("file not found"나 "permission denied"와 같은 에러가 발생한다) 이 문제는 인스톨매체에 필요한 모든 파일이 없거나 인스톨 매체에 permission문제가 있을 때 발생한다. 예를 들어 어떤 리눅스 소프트웨어는 인 스톨 소프트웨어 자체에 버그를 포함하는 경우도 있다. 이들은 보통 빨리 수정 이 되며 종종 일어나는 일은 아니다. 리눅스배포본에 버그가 있는지 의심스럽 고 잘못된 부분이 있어서 아무것도 할 수 없다면 배포본의 관리자를 만나서 버 그를 보고하라. 인스톨할 때 위에서 언급한 것 이외의 이상한 문제가 있다면 ( 특별히 여러 분 자신이 소프트웨어들을 다운로드 받을 경우 ) 다운로드 받을 때 모든 필요 한 파일들이 있는지 확인하라. 예를 들어 어떤 사람들은 FTP를 통해서 다운로 드 받을 때 다음과 같은 FTP 명령어를 사용한다. mget *.* 이는 파일명중에 "."이 포함된 것만 다운로드 받는다; 만약 파일명에 "."이 없 다면 다운로드에서 빠질 것이다. 이 경우 정확한 명령어는 다음과 같다. mget * 어떤 문제가 있을 때 가장 좋은 방법은 여러분이 한 절차를 다시 한번 해 보 는 것이다. 여러분이 모든 것을 정확하게 했다고 생각할지는 모르지만 사실, 여 러분은 따라야할 절차 중에서 아주 작은 부분들을 잊어 버린 경우도 있다. 대 부분의 경우에 다시 다운로드받거나 다시 인스톨하는 것이 문제를 해결하는 방 법이다. 여러분이 해야할 일을 두고서 벽에 머리를 부딪히지 말라. 또한 리눅 스를 인스톨하는 도중에 시스템이 멈춰 버리는 경우는 어떤 종류의 하드웨어 문제일 수 있다. 2.5.2절에 이 문제에 대한 힌트가 있다. 2.5.4 리눅스 인스톨후의 문제 여러분은 오후 전체를 리눅스 인스톨하는데 시간을 보냈다. 리눅스가 설치될 공간을 만들기 위해서 MS-DOS와 OS/2 파티션, SimCity나 Wing Commander와 같은 소프트웨어를 눈물을 흘리면서 지웠을 것이다. 시스템을 다시 부팅하면 아무일도 일어나지 않는다. 혹은 나쁜 경우에는 무언가 일어날 수도 있으나 꼭 일어나는 것만은 아니다. 그럼 이제 무엇을 할 것인가 ? 2.5.1절에서, 우리는 인스톨매체로 부팅할 때 일어나는 가장 일상적인 문제들 에 대해 언급을 하였다 - 많은 문제들이 여기에 적용된다. 덧붙여서 아래와 같 은 문제들 중의 하나로 여러분은 고심을 하게 될는지도 모른다. 2.5.4.1 플로피로 부팅할 때의 문제 만약 리눅스를 플로피를 이용해서 부팅한다면 부팅할 때 리눅스의 root 파 티션을 지정해야할 필요가 있을 것이다. 이 경우는 원래의 리눅스 인스톨플로 피 자신일 경우, 인스톨과정에서 만들어 진 것이 아닌 플로피인 경우에 생긴 다. 플로피로 부팅할 때 shift키와 alt키를 누른다. 그러면 boot menu가 나타난 다; tab키를 누르면 가능한 옵션들을 볼 수 있다. 예를 들어, 많은 배포본들은 boot menu에서 입력을 가능하게 하는데 boot: linux hd= 여기서 은 /dev/hda2와 같은 리눅스 root 파티션의 이름이다. 자세한 것은 여러분이 가지고 있는 배포본의 문서를 참조하라. 2.5.4.2 하드드라이브로 부팅할 때의 문제 플로피를 만드는 대신에 LILO를 사용한다면 하드드라이브로 부터 리눅스를 부팅시킬 수 있다. 그러나 자동으로 설치되는 LILO의 설치는 완전하지 않을 수도 있다. 이는 여러분의 파티션지정에 대해 올바르지 않게 시도될 수 있는데 이 경우는 모든 것을 정확히 하기 위해서 다시 LILO를 설치해야 한다. LILO를 설치하는 것은 4장에서 언급한다. o System reports "drive not bootable---Please insert system disk." ---------------------------------------------------------------- ("drive not bootable---Please insert system disk."라는 메시지가 나올 경우) 하드드라이브의 Master Boot Record가 손상을 입은 경우 이러한 에러메시 지를 접할 수가 있다. 대부분의 경우 해가 없고, 하드드라이브상의 모든 것들은 손상을 입지 않은 상태이다. 이 문제를 둘러싼 몇 가지 방법이 있다: 1. fdisk를 사용해서 파티션을 나눌 때 "active"로 마크된 파티션을 지울 수 있다. MS-DOS와 다른 OS들은 부팅할 때 "active"로 마크된 파티션을 access한다( 리눅스는 파티션이 "active"인지 아닌지 상관하 지 않는다 ). MS-DOS로 부팅한 후 FDISK를 실행시키고 MS-DOS 파 티션을 active로 set 시키면 잘 작동될 것이다. MS-DOS 5.0이상에서 다음과 같이한다면 FDISK /MBR 하드드라이브의 마스터부트레코드를 다시 MS-DOS가 부팅될 수 있도 록 LILO에 Overwrite해서 만들어준다. 만약 MS-DOS를 더이상 가지고 있지 않다면 리눅스를 플로피로 부팅한 후 LILO를 나중에 설치하여 야 한다. 2. 만약 리눅스의 fdisk를 이용해서 MS-DOS 파티션을 만들었다면 이러한 에러를 만날 수 있다. 반드시 MS-DOS 파티션을 MS-DOS의 fdisk로 만들어야 한다( MS-DOS 이외의 다른 OS에 대해서도 마찬가 지이다 ). 여기의 최선의 방법은 지우는 것부터 시작하여 드라이브의 파티션을 다시 나누는 것, 혹은 단지 지우고서 적절한 fdisk를 사용해 서 다시 생성하는 것이다. 3. LILO 인스톨 절차는 실패할 수도 있다. 이 경우는 리눅스 부팅 디스켓으로 부팅을 하던지 원래 인스톨 매체로 부팅을 해야한다. 이 방법 모두가 부팅할 때 리눅스 root partition을 지정하도록 하는 옵션 이 주어진다. Shift키나 alt키를 누르고 boot menu로부터 tab키를 누 르면 옵션이 나타난다. o When booting the system from the hard drive, MS-DOS ( or another operating system ) starts instead of Linux. -------------------------------------------------------------------------------- (하드드라이브로 부터 시스템을 부팅시키면 MS-DOS(혹은 다른 OS)가 Linux 대신에 부팅된다) 먼저 리눅스를 인스톨할 때 실제로 LILO가 인스톨되었는지 확인한다. 그렇 지 않다면 하드드라이브로 부터 부팅을 하면 MS-DOS(혹은 다른 OS)가 부팅이 된다. 하드드라이브로 부터 리눅스를 부팅시키기 위하여 여러분은 LILO를 인스 톨할 필요가 있다. (4장을 참고) 다른 문제를 보면, 만약 LILO가 인스톨되었다 하더라도 리눅스 대신에 다 른 OS가 부팅이 된다면 여러분은 LILO의 환경설정을 리눅스가 부팅이 되도록 하고 다른 OS들은 디폴트로서 설정하여야 한다. 이것은 여러분에게 부팅이 가 능한 OS의 리스트를 보여준다. 적당한 옵션(보통 "linux")을 선택하여 리눅스를 부팅하라. 부팅할 때 디폴트 OS로서 리눅스를 선택한다면 LILO를 다시 인스 톨할 필요가 있다. (4장을 참고) LILO를 인스톨하고자 할 때 인스톨 절차가 어떤 방법으로 실패할 경우가 있다. 앞 아이템을 참고하라. 2.5.4.3 로그인의 문제 리눅스 부팅이 끝나면 다음과 같은 login prompt가 나타난다. linux login: 이 시점에서 배포본의 문서나 시스템 자신이 여러분에게 무엇을 할 것인지 물어온다. 많은 배포본들은 단순히 root로 패스워드 없이 login하면 된다. 다 른 가능한 username은 guest와 test이다. 가장 최근의 리눅스 시스템들은 초기 의 login으로 패스워드를 요구하지 않는다. 그러나 만약 패스워드를 입력하도 록 요구받는다면 거기엔 아마 문제가 있는 것이다. 첫째로 username과 같은 패스워드를 사용해보고; 이것은 root로 login 했다면 패스워드를 root로 넣으라 는 말이다. 만약 단순하게 login할 수 없으면 문제가 있는 것이다. 첫째로 배포본의 문 서를 참조하라; username과 패스워드가 사용할 수 있도록 어딘가에 있을 것이 다. Username과 패스워드는 인스톨 과정에서 주어질 수 있거나, login banner 에 인쇄될 수도 있다. 이러한 문제의 한가지 원인은 리눅스 login의 인스톨에서 문제가 있거나 파일들의 초기화에 문제가 있는 경우이다. 이 경우 리눅스를 다 시 인스톨하거나( 적어도 한 부분은), 인스톨 매체로 부팅을 해서 수동으로 고 쳐보도록 한다 - 4장에 힌트가 있다. 2.5.4.4 시스템을 사용하면서의 문제 만약 login이 성공했다면 shell prompt( "#"나 "$"과 같은 )를 보게 되며 여러 분은 여러분의 시스템 주위를 돌면서 기뻐하게 될 것이다. 그러나 여기에 시 스템을 사용하면서의 종종 나타나는 초기화의 문제가 있다. 가장 흔한 초기환경설정의 문제는 부적절한 파일이나 디렉토리의 허가이다. 이러한 경우는 에러를 유발하는데 Shell-init: permition denied login다음에 위와 같은 메시지가 인쇄될 것이다( 사실 여러분이 보는 메시지 중에서 "permission denied"는 file permission의 문제이다). 많은 경우에 적합 한 파일이나 디렉토리의 허가문제를 고치기 위해서 chmod 명령어를 사용 하는 것이 간단한 방법이다. 예를 들어 어떤 배포본은 root 디렉토리(/)에서 (부 적절하게) 파일모드 0644를 사용한다. 이러한 문제를 고치기 위한 명령어는 root로 # chmod 755 / 를 사용한다. 그러나 이 명령어를 사용함으로서 인스톨매체로부터 부팅을 해야 하며 수동으로 리눅스 root filesystem을 마운트 하여야한다 - 리눅스 초보자에 겐 어려운 일이다. 시스템을 사용하면서 파일이나 디렉토리가 부적절하다는 문제에 빠질 수 있거 나, 환경설정을 한대로 소프트웨어가 작동하지 않을 경우도 있다. 대부분의 배포본들은 문제가 없고 몇몇은 완전하다. 우리는 이러한 모든 문제를 여기서 언급하기를 원치 않는다. 대신에 이 책을 통하여 많은 환경설정에 대한 문제 를, 어떻게 여러분들이 발견하고 여러분 자신이 그 문제를 고치는가를 가리킴 으로서 해결하고자 하였다. 1장에서 우리는 이러한 철학은 좀 상세히 다루었 었다. 4장에서는 이렇게 종종 일어나는 환경설정의 문제에 대해서 언급하고자 한다. 제 3 장 리눅스 배워보기 3.1 소개 유닉스와 리눅스의 초보자들은 그것을 사용해보기 전에 먼저 이 두 가지의 운영체계에 대해 많은 궁금점을 가지고 있다. 현재 시중에는 유닉스에 관한 거 의 모든 레벨에 대해 상세히 설명되어져 있는 여러가지 많은 책들 이 나와있 다. 그럼에도 불구하고, 리눅스 사용에 대해 소개해 놓은 책들은 거의 없는 실 정이다. 다른 유닉스 시스템을 사용하는 것과 같이 리눅스 사용의 거의 대부분 의 시간동안은 리눅스를 위한 잘 풀이되어 있는 해설서를 보며 여러분의 새로 운 시스템을 구축하는 것이 가장 빠른 길이다. 이것이 바로 그런 해설서이다. 이 장에서는 많은 고급 내용에 대해서는 상세히 다루지 않을 것이다. 대신에, 이미 유닉스에 대한 일반적인 책들을 읽고, 다른 유닉스 시스템과 리눅스와의 기본적인 차이점을 이해한 사용자중 리눅스로의 초보자를 대상으로 할 작정이 다. 3.2 기본적인 유닉스의 개념 유닉스는 멀티태스킹, 멀티유저를 위한 운영체계이다. 이 말은 동시에 여러 사람이 한 컴퓨터를 사용하여, 많은 다른 어플리케이션을 실행할 수 있다는 뜻이다. (이것은 한번에 단 한사람만이 시스템을 사용할 수 있는 MS-DOS와 는 다르다.) 유닉스하에서는 사용자가 시스템에게 자신의 신원을 확인시켜줘 야 한다. 사용자는 두 가지 단계가 수반되는 "로긴"을 해야한다. -- 자신의 로긴명을 입력한다(시스템이 사용자를 확인할 수 있는 이름). 그리고, 자신의 계정에 들어갈 수 있는 자신만의 비밀번호를 입력한다. 다른 어느 누구도 상 대방의 로긴명으로 시스템에 접근하지 못하게 비밀번호는 자신만이 알 수 있 다. 전형적인 유닉스 시스템에서는, 사용자가 시스템으로부터 계정을 받았을 때 시스템 관리자가 사용자에게 사용자명과 최초의 비밀번호를 부여해준다. 아무 리 여러분이 시스템 관리자라 하더라도 로긴하기 전에 자신만의 계정을 반드시 만들어야 한다. - 아래의 3.2.1절을 참고하라. 설명을 위해 "larry"라는 가 상의 사용자명을 사용하기로 하자. 덧붙여서, 각 유닉스 시스템은 그것에 부여된 호스트명을 가진다. 이 호스 트명은 자신의 컴퓨터의 하나의 이름이 된다. 호스트명은 네트워크로 연결된 개개의 컴퓨터를 식별하는데 사용되어진다. 비록 여러분의 컴퓨터가 네트 워크에 연결되어 있지 않다하더라도 그것은 그냥 여러분들의 컴퓨터 이름으 로 주어지게 된다. - 이것은 4.10.2절에서 다루기로 하자. 아래에서 우리는 시스템의 호스트명을 "mousehouse"로 하기로 하자. 3.2.1 계정 만들기 시스템을 사용하기 전에 자신만을 위한 사용자 계정을 반드시 만들어야한 다. 보통의 사용을 위해 root 계정을 사용하는 것은 좋은 생각이 아니기 때 문에 사용자 계정을 만드는 것은 필요하다. root 계정은 4.1절에서 언급하는 것처럼 시스템을 유지하거나 특별한 명령어를 수행할 때만 사용해야 한다. 여러분 자신의 계정을 만들기 위해서는 root로 로긴해서 useradd나 adduser와 같은 명령어를 사용해야 한다. 4.4절에 계정을 만드는 절차에 대한 설명을 다루고 있다. 3.2.2 로긴하기 로긴할 때 화면에 아래와 비슷한 프롬프트를 볼 수 있다. mousehouse login: 여기서, 자신의 사용자명을 입력하고 [Return]키를 누른다. 여기서는 우리의 영웅(히...) larry를 입력하자. mousehouse login: larry Password: 이제, 비밀번호를 입력하자. 비밀번호는 로긴할 때 화면에 나타나지 않기 때 문에 조심해서 타이핑해야 한다. 만약, 비밀번호를 잘못 입력하면, 다음과 같은 메시지를 볼 수 있을 것이다. Login incorrect 그리고, 다시 시도해야 한다. 사용자명과 비밀번호를 맞게 입력하면 시스템 안으로 로긴이 된다. 이제 여러분들은 시스템 안을 맘대로 돌아다닐 수 있다. 3.2.3 콘솔 시스템의 콘솔이라 함은 시스템에 직접적으로 모니터와 키보드가 연결되 어 있는 것을 말한다. (유닉스는 멀티유저의 운영체계이기 때문에, 여러분들 은 시스템의 시리얼 포트를 통해 다른 터미널로 들어 올 수 있지만, 이런 것은 콘솔이 될 수 없다.) 리눅스, 또는 다른 버전들의 유닉스에서는 콘솔을 통해 한번에 하나의 로긴 이상을 허용하는 가상 콘솔(Virtual Consoles or VC's)이라는 것을 지원한다. 이를 알아보기 위해, 여러분의 시스템에 로긴하라(앞에서 설명한 것처럼). 그리고, [alt-F2]키를 눌러라. 그럼 다시 login: 이라는 프롬프트가 뜰 것이다. 이제 두번째 가상 콘솔로 들어 온 것이다(또 여러분은 첫번째 콘솔에 로긴 되어 있는 상태이다.). 다시 첫번째 VC로 돌아가기 위해서는 [alt-F1]키를 눌러 라. 자, 여러분은 첫번째 로긴세션으로 다시 돌아왔다. 새로 인스톨된 리눅스 시스템은 아마도 [alt-F1]키부터 [alt-F4]까지의 키를 사 용해서 처음 4개의 VC에 접근할 수 있도록 허용할 것이다. 이를 이용하 면 꽤나 효과적으로 시스템을 사용할 수 있을 것이다. VC를 사용하는 동안 여 러분은 유닉스의 멀티유저 능력을 실감하게 될 것이다(하지만, VC의 사용에도 한번에 하나의 VC밖에는 볼 수 없다는 제한이 따른다.). 여러분이 VC#1에서 작업하고 있는 동안 VC#2로 옮겨 갈 수 있고, 또다른 작업을 시작할 수 있다. 3.2.4 쉘과 명령어 유닉스의 세계에서 여러분이 경험하는 대부분의 시간동안은 쉘의 사용을 통해서 여러분은 시스템과 대화할 수 있게 될 것이다. 쉘은 사용자가 입력(예 를 들면, 여러분이 타이핑한 명령어들)하는 것을 시스템으로 중계하는 역할의 일종의 프로그램이다. 이것은 실질적으로 같은 일을 하는MS-DOS의 COMMAND.COM 프로그램과 비교되어질 수 있다. 쉘은 유닉스의 접속수단(인 터페이스)중의 하나다. 유닉스에는 많은 인터페이스 -- 연결되어있는 키보드 와 마우스를 사용해서 명령어들을 실행시킬 수 있는 X 윈도우 시스템과 같은 -- 들이 있다. 여러분이 로긴하자마자 시스템은 쉘을 시작하고, 여러분은 명령어들을 입력할 수 있다. 간단한 예를 한번 들어보자. larry가 로긴을 하고 쉘 프 롬프트가 나타났다. mousehouse login: larry Password: larry's password Welcome to Mousehouse! /home/larry# "/home/larry#"는 명령을 받아들일 준비가 되었다는 것을 알리는 쉘 프롬프 트이다(자세한 것은 뒤에 다시 설명하도록 하겠다.). 자, 시스템에게 재미있는 (?) 얘기를 한번 해보자. /home/larry# make love make: *** No way to make target 'love'. Stop. /home/larry# 자, make는 시스템에 실제 존재하는 프로그램의 이름이라는 것을 알게 되었다. 그리고 쉘은 명령어가 주어졌을 때 이 프로그램을 실행시킨다(불행 히도 이놈의 시스템은 꽤나 불친절한 것 같다.). 여기서 우리는 중요한 질문 을 가져볼 수 있다. -- 명령어가 무엇인가? "make love ( 번역을 하자면, 육 체적인 사랑을 하다)"이라고 입력했을 때 어떤 일이 일어났는가? -- 명령어 라인의 첫번째 단어인 "make"는 실행되어질 수 있는 명령어의 이름이다. 명령어 라인에서의 모든 명령들은 이 명령처럼 인자를 가진다. 예를 든다면, /home/larry# cp foo bar 여기서, "cp"는 명령어의 이름이고, 인자는 "foo"와 "bar"이다. 여러분이 명령어를 입력했을 때, 쉘은 여러 가지 일을 한다. 먼저, 명령어의 이름을 검사하고, 쉘 내부에 있는 명령인지 확인해 본다. 쉘은 또 명령이 하 나의 별명(alias)인지, 치환된 이름인지를 확인해 본다. 만약 그렇지 않으면, 쉘 은 디스크에서 명령어의 이름을 가진 프로그램을 찾는다. 그런 프로그램을 찾았을 때 쉘은 그것을 실행시키고 명령어 라인에서 지정된 인자들을 프 로그램에 부여한다. 앞의 예에서 쉘은 make라는 프로그램을 찾고 love라는 인자와 함께 실행을 시킨다. make는 큰 프로그램을 컴파일하는데 자주 사용되어지는 프로그램 이며, 컴파일되는 대상의 이름을 인자로 사용한다. "make love"라는 경우에 있어서, 우리는 love라는 대상을 컴파일하라고 make에 지시했다. make는 love라는 이름의 대상을 찾지 못했기 때문에 말도 안된다는 에러메시지를 남기고 다시 쉘 프롬프트로 돌아온 것이다. 만약 우리가 쉘에게 명령어를 입 력했을 때 쉘이 실행할 그 명령어의 프로그램을 찾지 못했을 때는 어떤 일이 일어날까? 자, 해보자. /home/larry# eat dirt eat: command not found /home/larry# 아주 간단하게, 명령어 라인에서 주어진 이름의 프로그램을 쉘이 찾지 못했 을 때(여기서는 "eat"), 위와 같은 에러메시지를 출력한다. 여러분은 명령어 를 잘못 입력했을 때(가령, "make love" 대신에 "mkae love"라고 입력했 을 때), 종종 이런 에러메시지를 보게 될 것이다. 3.2.5 로그 아웃 깊이 파고들기 전에 시스템으로부터 어떻게 로그 아웃할 수 있는지부터 설명하겠다. 로그 아웃하기 위해서는 쉘 프롬프트에서 다음의 명령어를 사용한 다. /home/larry# exit 로그 아웃하는 방법에는 여러가지 방법이 있지만, 이것이 제일 간단한 방법 이다. 3.2.6 비밀번호 바꾸기 여러분은 자신의 비밀번호를 어떻게 바꾸는지를 알아야 한다. passwd 명령은 현재 여러분의 비밀번호와 새로운 비밀번호를 물어본다. 또 확인을 위해 새 비밀번호를 재 입력할 것을 요구할 것이다. 비밀번호를 잊지 않도록 주의하 라. -- 만약 잊었다면 시스템 관리자에게 문의해야 할 것이다. (만약, 여러분이 시스템 관리자라면 4.4절을 참고하라.) 3.2.7 화일과 디렉토리 대부분의 운영체계(유닉스 포함)하에서는, 이름이 주어진(화일명이라 불리 는) 정보의 묶음이라는 화일의 개념이 있다. 화일의 예를 든다면, 여러분의 역사 시험문제나, 전자메일이나, 하나의 실행할 수 있는 실제의 프로그램이 될 수도 있다. 실질적으로, 디스크에 저장되어있는 어떤 것이라도 모두 개개의 화일로 저장되어져 있다. 화일은 그것의 화일명으로 확인되어진다. 예를 들어, 여러분의 역사리포트 가 기록되어있는 화일은 화일명 history-paper로 저장될 수 있다. 이런 이름들 은 화일을 확인하고, 또 여러분들이 안에 기록되어져 있는 내용과 어울리 는 이름을 지어줄 수 있다. 유닉스에서는 다른 운영체계나 MS-DOS에서 처럼 규정지어진 구문이 있는 것은 아니다. 일반적으로 화일명으로 모든 문 자(/를 제외한다. 아래를 보면 경로명을 나타낸다는 것을 알 수 있다.)를 쓸 수 있고, 화일명의 길이는 256자까지 쓸 수 있다. 화일의 개념을 통해 디렉토리의 개념을 알아보자. 디렉토리는 화일들의 모임 이다. 많은 다른 화일들을 담고 있는 "folder"로 생각할 수도 있다. 디렉토리는 여러분이 식별할 수 있는 그 자체의 이름이 주어진다. 게다가 디렉토리는 나무가지와 같은 구조를 유지한다. 디렉토리는 또 다른 디렉토리를 가질 수 있다. 화일은 그 화일이 만들어지고, 그것을 담고 있는 디렉토리인 경로명에 의 해 조회되어진다. 예를 들어보자. Larry는 다음의 세 화일을 담고 있는 papers 라는 디렉토리를 가지고 있다고 하자. history-final, english-lit, masters-thesis ( 각 화일들은 Larry의 세 가지 정보를 가지고 있다.). english-lit라는 화일을 조회하기 위해서, Larry는 다음처럼 정해진 화일의 경로명을 쓸 수 있다. papers/english-lit 위에서 보듯이, 화일과 디렉토리는 슬래쉬(/)로 구분되어져 있다. 이런 이유 때문에 "/"를 화일명으로 쓸 수 없는 것이다. MS-DOS사용자들은 MS-DOS에 서 슬래쉬(/) 대신에 역슬래쉬(\)를 쓰는 것과 비슷하다는 것을 알 수 있을 것이다. 언급했듯이, 디렉토리들은 또한 다른 디렉토리를 포함할 수 있다. 예 를 들어, Larry는 papers라는 디렉토리 안에 notes라 불리는 다른 디렉토리를 가지고 있다고 해보자. 이 디렉토리는 math-notes와 cheat-sheet이라는 화일들 을 담고 있다. cheat-sheet의 경로명은 papers/notes/cheat-sheet 이라고 할 수 있다. 고로, 경로명은 여러분이 그 화일의 위치를 찾을 수 있 는 "경로"를 말한다. 서브 디렉토리를 포함한 디렉토리는 그 서브 디렉토리의 부모디렉토리라 이른다. 여기서, papers 디렉토리는 notes 디렉토리의 부모 디렉토리이다. 3.2.8 디렉토리 구조 대부분의 유닉스 시스템은 화일들을 위한 하나의 표준 배치를 구성하고 있 다. 그렇기 때문에 시스템 자원들이라든지 프로그램들을 쉽게 찾을 수 있다. 이 디렉토리 구조는 "루트 디렉토리(root directory)"라 불리는 "/" 디렉토리에서부터 시작된다. /(루트) 바로 아래에 몇 가지 중요한 서브디렉토리가 있다. /bin, /etc, /dev, 그리고 /usr. 이 디렉토리들은 시스템환경설정 화일들이나 프로그램 들 등을 담고 있는 다른 디렉토리들을 가지고 있다. 또한 사용자는 사용자의 화일들을 담고 있는 자신만의 홈디렉토리를 가진다. 위의 예에서 Larry의 모든 화일들(cheat-sheet이나 history-final과 같은)은 Larry 의 홈디렉토리에 담겨져 있다. 주로 사용자의 홈디렉토리는 /home 디렉토리아 래에 위치해 있으며, 사용자의 이름이 디렉토리 이름으로 되어있다. 여기서, Larry의 홈디렉토리는 /home/larry이다. 그림 3.1은 sample 디렉토리를 표현한 것이다. 이것을 보면 여러분의 시스템에서 디렉토리 구조가 어떻게 구성되어 있는지 약간은 알게 될 것이라고 생각한다. / ----+---- bin | +---- dev | +---- etc | +---- home ----+---- larry | | | +---- sam +---- lib | +---- proc | +---- tmp | +---- usr ----+---- X386 | +---- bin | +---- emacs | +---- etc | +---- g++include | +---- include | +---- lib | +---- local ----+---- bin | | | +---- emacs | | | +---- etc | | | +---- lib +---- man | +---- spool | +---- src ---- linux | +---- tmp 그림 3.1 보편적인 유닉스 디렉토리 구조 3.2.9 현재 작업 디렉토리 언제라도 여러분은 현재 작업 디렉토리에서 명령어 등을 쉘에 입력하게 된 다. 여러분은 현재 위치해있는 디렉토리가 현재 여러분의 작업 디렉토리라고 생각할 수 있다. 처음에 여러분이 로긴했을 때, 여러분의 작업 디렉토리는 여러분의 홈디렉토리 -- 여기서는 /home/larry -- 가 된다. 화일을 조회할 때, 여러분은 그 화일의 완전한 경로명을 입력하는 대신에 여러분의 작업 디렉 토리와 같은 부분은 명시하지 않고 조회할 수도 있다. 예를 하나 들어보자. Larry는 papers라는 디렉토리를 가지고 있고, papers 는 history-final이라는 화일을 담고 있다. Larry가 이 화일의 내용을 보기를 원한다면, 다음의 명령을 사용할 수 있을 것이다. /home/larry# more /home/larry/papers/history-final more 명령은 단순히 화일의 내용을 한번에 한 페이지씩 화면에 출력한 다. 어쨌든, Larry의 현재 작업디렉토리는 /home/larry이기 때문에, 그의 현재 위치와 관련있는 부분을 명시하지 않을 수도 있다. /home/larry# more papers/history-fianl 여러분이 화일명(papers/history-final과 같은)을 "/"를 제외한 다른 문자로 시 작한다면, 시스템은 당연히 여러분의 현재 작업 디렉토리에서부터 화일을 찾기 시작할 것이다. 이것이 상대 경로명이다. 다른 방법으로, 여러분이 화일명을 "/"로 시작한다면, 시스템은 루트 디렉토 리인 /에서부터 화일을 찾기 시작한다. 이때에는 화일의 완전한 경로명을 적어줘야만 원하는 화일을 찾을 수 있다. 이것이 절대 경로명이다. 3.2.9 홈디렉토리 인용하기 리눅스의 Tcsh과 Bash하에서는 여러분의 홈디렉토리를 "~"를 사용해서 인용할 수 있다. 예를 들어보자. /home/larry# more ~/papers/history-final 와 /home/larry# more /home/larry/papers/history-final 은 같은 명령이다. "~" 문자는 단순히 쉘에 의해 여러분의 홈디렉토리의 이름을 대체해준다. 덧붙여서, 여러분은 다른 사용자의 홈디렉토리도 이 문자 를 사용할 수 있다. 경로명 "~karl/letters"는 쉘에 의해 ( /home/karl이 karl의 홈 디렉토리일 때 ) "/home/karl/letters"로 해석된다. 이 문자를 사용하면 간단 한 지름길을 이용하게 된다. "~"로 시작되는 디렉토리는 없다. 이것은 오직 쉘에 의해 지원되는 양념(?)일 뿐이다. 3.3 유닉스로의 첫걸음 시작하기 전에, 유닉스 시스템 자체가 C로 쓰여져 있어서 영문자의 대소 문자를 꽤나 가리기 때문에 모든 화일과 명령어 이름들을 메모하는 것은 중 요한 일이다(MS-DOS와 같은 운영체계와는 다르다.). 예를 들자면, make 명 령은 Make와 MAKE와는 매우 다르다. 이것은 화일이나 디렉토리 명에서도 마찬가지다. 3.3.1 옮겨 다니기 자, 이제 우리는 로긴할 수 있고, 경로명을 이용해서 어떻게 화일들을 조회 할 수 있는지도 알고, 현재 우리의 작업 디렉토리를 어떻게 바꾸는 지도 안 다. 디렉토리 구조에서 옮겨 다닐 수 있게 하는 명령은 cd(change directory를 줄 여 쓴 말이다.)이다. 여러분들은 자주 사용되어지는 많은 유닉스 명령어들이 2-3문자로 되어있는 것을 알게 될 것이다. cd 명령어의 사용법은, cd 는 여러분이 옮겨가기 원하는 디렉토리의 이름을 말한다. 말했듯 이, 여러분이 로긴했을 때, 여러분은 여러분의 home 디렉토리에서부터 시작한 다. 만약 Larry가 papers라는 서브 디렉토리로 들어가기를 원한다면, 명령어 를 사용한다. /home/larry# cd papers /home/larry/papers# 볼 수 있듯이, Larry의 프롬프트가 그의 현재 작업 디렉토리를 나타내기 위해 바뀌었다. (그래서, 그는 그가 어디 있는지 알 수 있다.) 자, 이제 그는 papers디렉토리에 있다. 그는 다음의 명령을 사용해서 그의 history-final의 내 용을 볼 수 있다. /home/larry/papers# more history-final 이제, Larry는 papers서브디렉토리에서 나가기를 원한다. 부모 디렉토리로 나오기 위해 다음의 명령을 사용한다. /home/larry/papers# cd .. /home/larry# ("cd"와 ".."사이의 공백을 명심하라.) 모든 디렉토리는 부모디렉토리를 나 타내는 ".."이라 이름 붙여진 항목을 가지고 있다. 또한 모든 디렉토리는 자 기 자신을 가리키는 "."이라 이름 붙여진 항목도 가지고 있다. 따라서, /home/larry/papers# cd . 이라고 입력하면 아무데도 움직이지 않는다. 여러분은 또한 cd 명령에서 절대 경로명을 사용할 수 있다. cd로 Karl 의 home 디렉토리로 들어가기 위해 우리는 다음과 같이 입력할 수 있다. /home/larry/papers# cd /home/karl /home/karl# 또한, 아무 인자도 없이 cd만 사용했을 경우에는 여러분자신의 home 디렉토 리로 되돌아간다. /home/karl# cd /home/larry# 3.3.2 디렉토리 안 들여다 보기 이제 여러분은 디렉토리들 간을 옮겨 다닐 수 있다. 자, 이제 디렉토리를 옮겨 다니는 기술(?)보다 더 자주 쓰이는 새로운 명령어 ls를 소개할까 한 다. ls는 현재 여러분의 작업 디렉토리에서의 화일들과 디렉토리들의 목 록을 출력한다. 예를 들어보자. /home/larry# ls Mail letters papers /home/larry# 여기 Larry의 현재 디렉토리 안에 세 개의 내용물들이 있다. Mail, letters, 그리고 papers. 이것은 이것들이 디렉토리인지 화일인지를 말해주지 않 는다. 우리는 좀더 많은 것을 알기 위해 -F 옵션을 ls명령에 사용한다. /home/larry# ls -F Mail/ letters/ papers/ /home/larry# 화일명에 /가 덧붙여진 것을 보면 이것들이 디렉토리였음을 알 수 있다. ls -F 를 사용하면 화일명 뒤에 "*"가 붙어있는 화일들을 볼 수 있을 것 이다. 이것은 이 화일이 실행가능한지를 나타내는 표시이다. 만일, ls -F를 사 용했을 때 화일명에 아무 표시도 없다면 그것은 디렉토리나 실행가능한 화일 이 아닌 그저 평범한 화일인 것이다. 일반적으로, 각 유닉스 명령어는 다른 인자들을 추가해서 몇 개의 옵션들 을 가지고 있다. 이 옵션들은 ls -F에서 알 수 있듯이 주로 "-" 로 시작된다. -F 옵션은 화일이 포함하고 있는 구문에 대한 좀더 많은 정보를 ls명령에 부 가한다. -- 이 경우에는, 디렉토리명 뒤에는 /를 출력한다. 만약, 여러분이 ls명 령 뒤에 디렉토리명을 입력한다면, ls는 그 디렉토리의 내용을 출력할 것이다. /home/larry# ls -F papers english-lit history-final masters-thesis notes/ /home/larry# 혹은, 좀더 흥미있는 목록을 보기 위해 시스템의 /etc 디렉토리에 무엇이 들 어있는지 살펴보자. /home/larry# ls /etc Images ftpusers lpc rc.new shells adm getty magic rc0.d startcons bcheckrc gettydefs motd rc1.d swapoff brc group mount rc2.d swapon brc~ inet mtab rc3.d syslog.conf csh.cshrc init mtools rc4.d syslog.pid csh.login init.d pac rc5.d syslogd.reload default initrunlvl passwd rmt termcap disktab inittab printcap rpc umount fdprm inittab.old profile rpcinfo update fstab issue psdatabase securetty utmp ftpaccess lilo rc services wtmp /home/larry# (MS-DOS를 사용하던 사용자들은 화일명이 8자 이상으로 쓰여질 수 있으 며, 점이 화일명의 어느 곳이나 붙을 수 있다는 사실을 알아야 한다. 점 은 화일명에 하나 이상도 가능하다는 사실도 함께 말이다.) " cd " 을 사용해서 디렉토리의 제일 위쪽으로 나와서 또다른 디렉토리 /usr/bin으로 들어가보자. /home/larry# cd .. /home# cd .. /# cd usr /usr# cd bin /usr/bin# 여러분은 또 cd /usr/bin과 같이 한번에 여러 단계를 거쳐 디렉토리를 옮길 수 있다. ls와 cd를 사용해서 여러 다양한 디렉토리를 옮겨 다녀보자. 어떤 경우에는 "Permission denied(허용 불가)"라는 기분 나쁜 에러메시지를 볼 수 도 있을 것이다. 이것은 유닉스 시스템의 보안장치의 간단한 예다. ls나 cd를 이용해서 디렉토리에 들어가거나 내용을 보기 위해서는 그렇게 할 수 있는 허용상태를 가지고 있어야 한다. 이것에 대한 자세한 사항은 3.9절에서 다루기로 하자. 3.3.3 새로운 디렉토리 만들기 디렉토리를 어떻게 만드느냐를 배우는 시간이다. 이것은 mkdir이라는 명령 어를 수반한다. 다음과 같이 해보자. /home/larry# mkdir foo /home/larry# ls -F Mail/ foo/ letters/ papers/ /home/larry# cd foo /home/larry/foo# ls /home/larry/foo# 잘했다! 여러분은 새로운 디렉토리를 만들고 그 안으로 들어갔다. 아직 이 새 디렉토리에는 어떤 화일도 존재하지 않는다. 이제 다른 어떤 디렉토 리로부터 화일을 복사하는 방법을 배워보기로 하자. 3.3.4 화일 복사하기 화일의 복사는 cp명령을 사용한다. /home/larry/foo# cp /etc/termcap . /home/larry/foo# cp /etc/shells . /home/larry/foo# ls -F shells termcap /home/larry/foo# cp shells bells /home/larry/foo# ls -F bells shells termcap /home/larry/foo# cp 명령은 명령어 라인에 나열된 화일들(cp명령 다음에 나오는 이름들)을 마지막 인자로 주어진 화일이나 디렉토리로 복사한다. 여기서 "." 은 현재 디 렉토리를 뜻한다는 것을 알아야 한다. 3.3.5 화일 옮기기 mv는 화일들을 복사하는 대신에 옮겨 버린다. 구문은 cp와 똑같다. /home/larry/foo# mv termcap sells /home/larry/foo# ls -F bells sells shells /home/larry/foo# 여기서 termcap은 더이상 존재하지 않는다. 그러나 sells라는 이름의 화일 로 옮겨져 있다. 이 명령어는 우리가 했던 것처럼 화일의 이름을 바꿀 때 사용되어질 수 있다. 또한 새 디렉토리로 화일을 완전히 옮길 때도 사용 된다. <>주의: mv나 cp는 목적지의 화일(만약 이미 존재하고 있다면)에 묻지 않고 덮어 써버릴 것이다. 화일을 다른 디렉토리로 옮길 때 여러분은 주의 해야 한다. 만약 그 디렉토리에 같은 이름의 화일이 이미 존재한다면 여 러분은 그것에 덮어쓰게 될 것이다. 3.3.6 화일과 디렉토리 지우기 화일을 지우기 위해서는 rm명령을 사용한다.(rm은 "remove"의 약자다.) /home/larry/foo# rm bells sells /home/larry/foo# ls -F shells /home/larry/foo# 자, shells를 빼놓고는 다 지워져 버렸다. rm명령은 화일을 지우기 전에 여러분에게 확인시키지 않으므로 조심해서 사용해야 한다. (어떤 시스템에서 는 rm명령을 입력하여 실행시키면 화일을 확인시키기도 한다. 하지만 이 것은 별명(alias)으로 이미 지정을 해놓은 경우이고, 디폴트는 확인하지 않 는다.) rm과 비슷한 명령으로 rmdir이 있다. 이 명령어는 디렉토리를 지운다. 단, 디렉토리가 비어있어야 지울 수 있다. 만일 디렉토리 안에 화일이나 서 브디렉토리가 있다면 rmdir은 작동하지 않을 것이다. 3.3.7 화일의 내용보기 more와 cat 명령은 화일의 내용을 보는데 사용된다. more는 페이지 단 위로 화일의 내용을 출력하고, cat은 한번에 화일이 담고 있는 모든 내용을 출력해버린다. 화일 shells의 내용을 보기 위해, 우리는 다음의 명령을 사용한다. /home/larry/foo# more shells shells의 내용을 보면 그 내용이 여러분의 시스템에서 가능한 쉘 프로그 램들의 목록일 것이다. 대부분의 시스템에서 이것은 /bin/sh, /bin/bash, /bin/csh를 포함하고 있다. 이 쉘들의 다른 점들은 뒤에 다시 설명하기로 한다. more를 사용할 때, [Space]를 누르면 텍스트의 다음 페이지를 출력하고, [b]를 누르면 이전 페이지가 출력된다. more에는 또다른 기본적인 여러 자원들이 들어있다. [q]를 누르면 more를 빠져나간다. more를 빠져나와서 cat /etc/termcap이라고 입력해보자. 그러면 내용을 읽기도 전에 다 지나가버릴 것이다. "cat" 은 " concatenate (연결된) "의 약자이다. cat명령은 여러 화일들의 내용을 연결하고 또다른 화일로 저장할 경우에 사용된다. 자세한 것은 나중에 다시 언급하겠다. 3.3.8 도움말 보기 리눅스를 포함한 거의 모든 유닉스 시스템에서는 "manual pages"나 생 략해서 "man pages"와 같은 도움말이 제공된다. 이런 man page들은 다 양한 시스템 명령어나 자원들, 화일의 환경설정 등과 같은 것들의 내용이 포함되어 온라인 상에서 언제나 볼 수 있다. man page를 액세스할 수 있는 명령어는 man이다. 예를 들어, ls명령의 다른 옵션에 대해 알고 싶다면 다음과 같이 입력하면, /home/larry# man ls ls의 man page가 출력될 것이다. 불행히도, 대부분의 man page는 명령어나 자원의 특징을 이미 어느 정도 알고 있는 사람들을 위해 쓰여졌다. 이런 이유 때문에 man page는 주 로 기본적인 해설을 뺀 명령어의 고도의 기술적인 세부사항만을 담고 있 다. 그렇지만, man page는 명령어의 구문을 잊었을 때 매우 귀중한 도 움이 되어 줄 것이다. man page는 또한 이 책에서 언급하지 않을 명령어 들에 대한 많은 부분을 알려 줄 것이다. 여러분은 이 책에서 소개하는 새로운 명령어가 나올 때마다, 또는 이미 우리가 언급했던 명령어에 대한 man을 실행시켜보는 것이 좋을 것이다. 여러분은 man page가 없는 명령어도 있다는 사실을 알게 될 것이다. 이 것은 여러가지 이유가 있다. 그 중 하나는 아직 man page가 쓰여지지 않았다는 것(Linux Documentation Project는 리눅스하의 man page를 책임지고 있다. 그들은 시스템을 위한 많은 양의 man page를 축적해 놓고 있다.). 두번째로, 쉘 내부 명령어이든 지, 그 자체의 man page가 없는 하나의 별명 (alias - 3.2.4절에 언급했 던 것처럼) 일 것이다. 하나의 예를 들자면, cd는 하나의 쉘 내부 명령어이다. 쉘은 디렉토리를 옮기는 별도의 프로그램 필요없이 이 명령어를 수행한다. 3.4 기본적인 명령어들의 요약 이 절에서는 유닉스 시스템에서의 자주 쓰이는 많은 명령어들 중 몇 가지 를 소개하기로 하겠다. 물론, 앞 절에서 소개했던 것들을 포함해서 말이다. 옵션은 주로 "-"로 시작되고 대부분의 경우에 하나의 "-" 를 써서 복합적 인 옵션을 사용할 수 있다. 예를 들어, 명령 ls -l -F를 쓰는 대신에, ls -lF라고도 할 수 있다. 여기서 각 명령어들의 모든 옵션의 목록을 보이는 대신에, 우리는 중요 하고 자주 쓰이는 옵션에 대해서만 언급하기로 하겠다. 사실, 대부분의 이런 명령어들은 많은 수의 옵션들을 가지고 있다(하지만, 그 대부분은 자주 쓰 이지 않는 옵션들이다.). 만약, 명령어들의 모든 옵션들을 알고 싶다면, man 을 사용해서 man page를 참고하면 된다. 또한, 이런 명령어들 중 많은 수는 " ..."로 표시되는 인자와 같은 디렉토리나 화일들의 목록을 필요로 한다. 예를 들어, cp 명령은 복사 할 화일의 목록과 복사되어질 디렉토리나 화일의 목록이 인자로 쓰인다. 하나이상의 화일을 복사할 때에는 복사되어질 곳은 당연히 디렉토리가 될 것이다. {{ cd }} {{ }} 현재 작업 디렉토리의 변경 구문: cd 는 변경하려고 하는 디렉토리명이다. ("."은 현재 디렉토리이며, ".."은 부모디렉토리이다.) 예: cd ../foo는 현재 디렉토리를 ../foo로 변경한다. {{ ls }} {{ }} 화일과 디렉토리들의 이름에 대한 정보를 출력한다. 구문: ls ... 에서부터 까지는 출력할 화일명이나 디렉토리 의 목록이다. 옵션: 생각보다 많은 옵션들이 있다. 주로 사용되는 옵션은 -F (화일 구문에 대한 몇 가지 정보를 출력하는데 사용) 과 -l (화일 크기와 소유자, 허용상태등을 포함해서 출력) 이다. 예: ls -lF /home/larry는 디렉토리 /home/larry의 내용을 출력 할 것이다. {{ cp }} {{ }} 화일(들)을 또다른 화일이나 디렉토리에 복사한다. 구문: cp ... 에서부터 까지의 화일들은 복사할 화일이고, 은 복사되어질 화일이나 디렉토리를 뜻한다. 예: cp ../frog joe는 ../frog화일을 joe라는 화일이나 디렉토리 로 복사한다. {{ mv }} {{ }} 화일(들)을 다른 화일이나 디렉토리로 이동시킨다. 이 명령 은 cp명령과 비슷하지만 mv명령은 원래의 화일을 지워버린 다. 이것은 MS-DOS의 RENAME명령과 같이 화일의 이름을 바꿀 때 쓰여질 수도 있다. 구문: mv ... 에서부터 까지의 화일들은 이동시킬 화일이며 은 이동되어질 화일이나 디렉토리이다. 예: mv ../frog joe는 ../frog화일을 joe라는 화일이나 디렉토리 로 이동시킨다. {{ rm }} {{ }} 화일들을 지운다. 유닉스하에서는 화일이 지워지면, 그 화일 의 복구가 불가능하다. (MS-DOS에서 "undelete"등의 명령 을 사용해서 화일을 복구할 수 있는 것과는 다르다.) 구문: rm ... 에서부터 까지의 화일들은 지워질 화일명이다. 옵션: -i는 화일을 지우기 전에 지울 화일인지 확인시킨다. 예: rm -i /home/larry/joe /home/larry/frog는 /home/larry 디렉 토리에 있는 joe와 frog라는 화일을 지운다. (지우기 전에 확인을 하고...) {{ mkdir }} {{ }} 새로운 디렉토리를 만든다. 구문: mkdir ... 에서부터 까지는 만들어질 디렉토리명이다. 예: mkdir /home/larry/test는 /home/larry 디렉토리 안에 test 라는 디렉토리를 만든다. {{ rmdir }} {{ }} 비어있는 디렉토리를 지우는 명령이다. rmdir을 사용할 때에 는 자신이 작업하고 있는 현재 디렉토리가 지울 디렉토리 내 에 있어서는 안된다. 구문: rmdir ... 에서부터 까지는 지워질 디렉토리명이다. 예: rmdir /home/larry/papers는 /home/larry/papers라는 디렉 토리를 지운다. 만약 papers 디렉토리안이 비어있다면 말이 다. {{ man }} {{ }} 주어진 명령어나 자원(이것은 명령어가 아닌, library function 과 같은 시스템 유틸리티를 말한다.)의 manual page를 출 력한다. 구문: man 는 도움말을 얻고자 하는 명령어나 자원 이름이 다. 예: man ls는 ls명령의 도움말을 출력시킨다. {{ more }} {{ }} 주어진 화일의 내용을 한 페이지씩 출력한다. 구문: more ... 에서부터 는 출력되어질 화일이다. 예: more papers/history-final은 화일 papers/history-final의 내용을 출력시킨다. {{ cat }} {{ }} 화일을 연결할 때 사용되며, 또한 화일의 내용을 한번에 모 두 출력시킬 때 쓰이기도 한다. 구문: cat ... 에서부터 까지는 출력되어질 화일이다. 예: cat letters/from-mdw는 화일 /letters/from-mdw의 내용을 출력시킨다. {{ echo }} {{ }} 주어진 인자를 단순히 출력시킨다. 구문: echo ... 에서부터 까지는 출력되어질 인자다. 예: echo "Hello world"는 "Hello world"를 출력시킨다. {{ grep }} {{ }} 주어진 패턴과 맞는 화일 안의 모든 라인들을 출력시킨다. 구문: grep ... 은 정규식을 말하며, 에서부터 까지는 검색하기 위한 화일들이다. 예: grep loomer /etc/hosts는 화일 /etc/hosts중에 "loomer"라 는 패턴을 포함한 라인 전부를 출력시킨다. 3.5 화일 시스템에 대해 여러분의 시스템에서 화일들의 모임과 디렉토리들의 계층을 화일 시스템이 라 부른다. 3.2.8절의 디렉토리 구조 그림을 참고하라. 먼저, 루트 디렉토리로 디렉토리를 변경한 뒤 (cd /), ls -F 를 입력하자. 그러면 여러분은 다음의 디 렉토리들을 보게 될 것이다. bin, dev, etc, home, install, lib, mnt, proc, root, tmp, user, usr, var 자, 이제 이 디렉토리들 각각을 살펴보도록 하자. ------------------------------------- 여러분은 위에서 나열한 디렉토리를 모두 볼 수 없을지도 모른다. 혹은 대 신에 다른 디렉토리를 볼 수도 있다. 걱정하지 마라. 리눅스의 모든 버전들은 약간의 차이가 있을 뿐이다. {{ /bin }} {{ }} /bin은 "binaries"의 약자이며, 실행가능한 화일들이 있다. 이것은 많은 필수적인 시스템 프로그램들이 포함되어 있다. "ls -F /bin"을 해보면 여기의 화일의 목록을 볼 수 있다. 목 록을 보면 여러분들은 cp, ls, mv와 같은 몇 개의 눈에 익은 명령어들을 찾을 수 있을 것이다. 이것들은 이들 명령어들의 실제 프로그램들이다. cp명령어를 사용하면, /bin/cp 프로그 램이 실행된다. ls -F를 사용하면, /bin의 대부분의 화일들에 "*"가 덧붙여져 있는 것을 볼 수 있을 것이다. 이것은 3.3.2절 에서 언급했듯이, 이 화일들이 실행 가능한 것임을 알려준다. {{ /dev }} {{ }} 다음은 /dev이다. 다시 ls -F를 사용해서 목록들을 살펴보자. /dev안의 화일들은 디스크 드라이버, 모뎀, 메모리 등과 같은 시스템 디바이스나 자원들을 액세스하는데 사용되는 디바이 스 드라이버들이다. 예를 들자면, 여러분들이 화일에서 데이 터를 읽을 수 있는 것처럼 /dev/mouse를 액세스함으로써 마우스로부터 입력되는 데이터를 읽을 수 있다. fd로 시작되 는 화일들은 플로피 디스크의 디바이스들이다. fd0는 첫번 째 플로피 디스크 드라이브이며, fd1은 두번째이다. 이 이외 의 것들은 플로피 디스크의 특정형태를 표시하는 것이다. 예를 들면, fd1H1440은 두번째 드라이브의 고밀도 3.5인치 디스켓을 액세스할 수 있다. 여기에 가장 자주 사용되는 디바이스 화일들 몇 개를 나열 한다. 아래에 나열한 디바이스들 중에 여러분이 가지고 있지 않는 것들이 몇 개 있다하더라도 그것들은 언제든지 구할 수 있으니 걱정하지 마라. ↕ /dev/console 은 시스템의 콘솔을 가리킨다. 콘솔은 모니터와 키보드 등이 여러분의 시스템에 직접 연결되 어 있는 것을 의미한다. ↕ 여러가지 /dev/ttyS 와 /dev/cua 디바이스들은 직렬포 트를 액세스하는데 사용된다. 예를 들면, /dev/ttyS0 은 MS-DOS하에서 "COM1"을 가리킨다. /dev/cua 디바이스들은 "callout" 디바이스이며, 모뎀을 쓸 때 사용된다. ↕ hd로 시작되는 디바이스 이름은 하드 드라이브를 액 세스한다. /dev/hda 는 첫번째 하드 드라이브 전체를 이 르며, hda1 은 /dev/hda 의 첫번째 파티션을 가리킨다. ↕ sd로 시작되는 디바이스 이름은 SCSI 드라이브를 뜻 한다. 만일 여러분이 SCSI 하드 드라이브를 가지고 있다 면, /dev/hda 를 액세스하는 대신에 /dev/sda 를 액세스해 야 한다. SCSI 테잎 드라이브는 st 디바이스를 통해, SCSI CD-ROM 은 sr 디바이스를 통해 액세스한다. ↕ lp로 시작되는 디바이스 이름은 병렬포트를 액세스한 다. /dev/lp0 은 MS-DOS에서 "LPT1"을 가리킨다. ↕ /dev/null 은 블랙홀 -- 어떠한 데이터라도 이 디바이 스로 보내면 영원히 사라지는 -- 과 같이 사용된다. 왜 필 요할까? 만일 여러분이 여러분의 화면에 출력되는 것이 없기를 바란다면, /dev/null로 출력을 보내면 된다. 이것 에 대해서는 나중에 좀더 언급하기로 하자. ↕ /dev/tty 로 시작되는 디바이스 이름은 여러분의 시스 템에 있는 "가상 콘솔([alt-F1],[alt-F2] 등을 눌러 액세스하 는)"을 가리킨다. /dev/tty1은 첫번째 VC를 가리키 며,/dev/tty2 는 두번째 등과 같다. ↕ /dev/pty로 시작되는 디바이스 이름은 "pseudo-terminal"이다. 이것은 원격 로긴 세션에서 사용되 는 터미널을 지원하기 위해서 사용된다. 예를 들어, 여 러분의 시스템이 네트워크에 연결되어 있고, telnet 으로 로긴할 때 /dev/pty 중의 하나를 사용한다. {{ /etc }} {{ }} /etc 는 "기타"라고 이름 붙여질 수 있는 것들 -- 많은 환경 설정 화일이라든지, 프로그램, 유틸리티들 -- 의 모두를 담 고 있다. /etc에서 찾을 수 있는 대부분의 프로그램들은 시스 템 관리자만이 사용할 수 있는 것들이다. 4장에서 좀 더 깊 이 다루기로 하자. {{ /home }} {{ }} /home 은 사용자들의 홈디렉토리들을 담고 있다. 예를 들 어, /home/larry 는 사용자 "larry"를 위한 홈디렉토리이다. 시스템을 새로 설치했을 때는 이 디렉토리 안에 아무것도 포 함되어 있지 않다. {{ /lib }} {{ }} /lib 는 공유 라이브러리 이미지들을 담고 있다. 이 화일들은 일반적으로 많은 프로그램들에서 사용되는 코드를 담고 있 다. 각 프로그램 자신이 이런 공유 루틴을 포함하고 있는 대 신에 그 루틴들은 모두 /lib안에 저장되어진다. 이것은 실행 화일의 크기를 작게 만들어 여러분의 시스템 공간을 확보해 준다. {{ /proc }} {{ }} /proc 는 "가상 화일시스템"이며, 드라이브에 저장되지 않고, 메모리에 화일들이 저장된다. 이것들은 시스템에서 운영되는 다양한 프로세서들을 가리키고 있으며, 언제라도 프로그램과 프로세서들이 진행되고 있는지에 대한 정보를 얻을 수 있게 해준다. 3.10.1절에서 좀 더 깊이 다루도록 하자. {{ /temp }} {{ }} 많은 프로그램들은 여러 정보가 하나의 임시화일 안에 저장 되는 것을 필요로 한다. 이런 임시화일들이 위치할 곳이 /tmp 이다. {{ /usr }} {{ }} /usr 은 매우 중요한 디렉토리이다. 이것은 아주 중요하거나 유용한 프로그램과 시스템에 사용되는 환경설정 화일들을 담고 있는 많은 서브디렉토리들을 가지고 있다. 여러 디렉토 리들은 시스템을 작동하기 위한 필수적인 것을 기술하고 있지만, /usr에서 찾을 수 있는 대부분의 것들은 시스템을 위한 선택적인 것들이다. 아무튼, 이런 것들은 시스템을 유 용하게, 흥미롭게 만들기 위해 선택할 수 있는 것들이다. /usr이 없으면, 여러분은 cp나 ls와 같은 프로그램들만 사용 할 수 있는 지루한 시스템을 가지게 되는 것이다. /usr은 대 부분의 커다란 소프트웨어 패키지나 그것들이 포함하고 있는 환경설정 화일들을 담고 있다. {{ /usr/X386 }} {{ }} /usr/X386 은 인스톨시켰다면 X 윈도우 시스템을 포함하고 있는 디렉토리이다. X 윈도우 시스템은 여러분의 화면에 윈 도우로 출력되는 많은 그래픽으로 된 유틸리티와 프로그램들 을 지원하는 크고, 강력한 그래픽 환경이다. 만일 여러분이 마이크로 소프트사의 윈도우즈나 매킨토시의 환경에 익숙하 다면, X 윈도우는 매우 유사하게 보일 것이다. /usr/X386 디렉토리는 X 윈도우의 모든 실행화일들, 환경설 정 화일들, 지원하는 화일들(비디오카드, 마우스 드라이버 등)을 담고 있다. 5.1절에서 자세히 다루도록 하자. {{ /usr/adm }} {{ }} /usr/adm 은 시스템 관리자를 위한 것과 시스템의 문제나 에러를 기록해놓은 시스템 로그 화일들을 담고 있다. 4장에 서 다시 다루기로 하자. {{ /usr/bin }} {{ }} /usr/bin 은 어떠한 유닉스 시스템이라도 갖고 있는 소프트 웨어들을 위한 진정한 의미의 보관창고(?)이다. 이것은 /bin 과 같은 곳에서 찾을 수 없는 프로그램들의 대부분의 실행 화일들을 담고 있다. {{ /usr/etc }} {{ }} /etc가 여러가지 시스템 프로그램과 환경설정 화일들을 담고 있는 것처럼, /usr/etc는 더 많은 유틸리티들과 화일들을 담 고 있다. 일반적으로 /usr/etc안에 있는 화일들은 /etc안에서 찾을 수 있는 화일들처럼 반드시 필요로 하는 것은 아니다. {{ /usr/include }} {{ }} /usr/include 는 C 컴파일러를 위한 include 화일들을 담고 있다. 이 화일들("헤더"를 위한 .h로 끝나는 대부분의 화일 들)은 데이터 구조 이름과 서브루틴, 상수와 같은 C 로 프로 그래밍을 할 때 사용되어지는 것들을 담고 있다. /usr/include/sys에 있는 화일들은 일반적으로 유닉스 시스템 레벨의 프로그래밍을 할 때 사용된다. 만일 여러분이 C 프로 그래밍 언어에 익숙하다면, 여기에 printf()와 같은 함수 가 선언되어 있는 stdio.h와 같은 헤더 화일을 찾을 수 있 을 것이다. {{ /usr/g++include }} {{ }} /usr/g++include 는 C++ 컴파일러를 위한 include 화일들 을 담고 있다. {{ /usr/lib }} {{ }} /usr/lib 는 /lib에서 찾을 수 있는 "stub"와 "static"과 같은 라 이브러리를 담고 있다. 프로그램을 컴파일할 때, 프로그램을 /usr/lib에 있는 화일들과 링크되며 이 라이브러리 안에 실행 코드가 필요로 할 때, /lib를 찾는다. 덧붙여서, 많은 프로그 램들은 /usr/lib안에 환경설정 화일들을 저장한다. {{ /usr/local }} {{ }} /usr/local 은 /usr이 시스템에 반드시 필요로 하는 것은 아 니지만, 매우 흥미로운 것들을 포함하고 있는 것처럼 이런 비슷한 것들을 담고 있다. 일반적으로, /usr/local 에서 찾을 수 있는 프로그램들은 여러분의 시스템을 여러분만의 독특한 시스템을 구축할 수 있도록 해준다. -- 많은 유닉스 시스템사이에서 /usr/local은 매우 다르다. 여기서, 여러분은 TEX(문서 구문화 시스템), Emacs(크고 강력한 에디터) -- 여러분이 설치했다면 --와 같은 큰 소프 트웨어 패키지를 찾을 수 있을 것이다. {{ /usr/man }} {{ }} 실질적인 man page를 담고 있는 디렉토리이다. 모든 man page의 "section"을 위한 두개의 서브디렉토리를 가지고 있다 (자세한 것은 man man명령을 실행해보자.). 예를 들면, /usr/man/man1은 man page의 section 1에 대한 구문화되지 않은 소스를 담고 있으며, /usr/man/cat1에는 man page의 section 1에 대한 구문화된 것이 들어있다. {{ /usr/spool }} {{ }} /usr/spool 은 어떤 프로그램을 위한 스풀된 화일들을 담고 있다. 예를 들면, 만일 여러분의 시스템이 네트워크에 연결 되어 있다면, 받은 메일이 여러분이 읽거나 지우기 전에는 /usr/spool/mail안에 저장되어 있을 것이다. 뉴스 글을 보내거 나 받을 때에는 그 내용이 /usr/spool/news에서 찾을 수 있을 것이다. /usr/src 는 여러분의 시스템에서의 다양한 프로그램에 대한 소스 코드(컴파일되지 않은)를 담고 있다. 여기서 가장 중요 한 것은 /usr/src/linux이며, 이곳은 리눅스 커널의 소스 코드 를 담고 있다. 3.6 쉘의 종류 앞에서 여러번 언급했듯이, 유닉스는 멀티태스킹과 멀티유저의 운영체계이 다. 멀티태스킹은 아주 유용하고, 한번 써봤다면 여러분은 항상 쓰게 될 것이 다. 머지않아 여러분은 "background"로 프로그램을 실행시킬 수 있을 것이 며, 다중작업들을 전환하고, "pipeline" 프로그램을 함께 사용하여 하나의 명 령으로 복잡한 결과를 수행해 낼 수 있을 것이다. 이 절에서 다루게 될 대부분의 특징은 쉘 그 자체에 대한 것들이다. 시스 템 저변을 인터페이스하는 쉘은 유닉스(실질적인 운영체계)를 잘못 이해하지 않 도록 유의하자. 쉘은 유닉스 그 자체의 꼭대기에서 많은 함수의 기능들을 제공 한다. 쉘은 여러분이 프롬프트 상에서 입력하는 상호작용의 명령어들을 위한 명령 어 해석기만은 아니다. 쉘은 한화일 안에 여러 가지 쉘 명령어를 함께 사용 하여 만드는 쉘 스크립트를 작성하면 아주 강력한 프로그래밍 언어도 된다. MS-DOS 사용자들은 "batch file"과 유사하다고 생각할 것이다. 쉘 스크립 트의 사용은 유닉스의 사용을 자동적으로, 폭넓게 해주는 매우 강력한 도구 이다. 좀 더 알고 싶으면 3.12.1절을 참고하라. 유닉스 세계에서는 여러가지 종류의 쉘들이 있다. 그중 두 가지 중요한 쉘 이 있는데 그것은 "Bourne Shell"과 "C Shell"이다. Bourne Shell은 System III와 같은 초기 유닉스 시스템에서의 쉘과 비슷한 명령어 구문을 사용한다. 대부분의 유닉스 시스템에서 Bourne Shell의 이름은/bin/sh(sh는 "shell"의 약자이다.)이다. C Shell(sea shell로 혼동하지 말자.)은 프로그래밍 언어인 C 와 비슷한, 조금 다른 형식의 구문을 사용하며, 대부분의 유닉스 시스템에서 /bin/csh이라 이름지어져 있다. 리눅스 하에서, 이런 쉘들은 약간의 변화가 있다. 가장 보편적으로 사용되는 두 가지는 Bourne Again Shell, 또는 Bash(/bin/bash)와 Tcsh(/bin /tcsh)이다. Bash는 Bourne Shell을 토대로 C Shell에서 찾을 수 있는 많은 진보된 특 징들을 포함하고 있다. Bash는 Bourne Shell 구문을 지원하기 때문에 표준 Bourne Shell로 작성된 쉘 스크립트는 Bash에서도 작동한다. C Shell 구 문을 사용하기 원한다면, 리눅스는 C Shell의 확장된 버전인 Tcsh을 지원하므 로 이것을 사용하면 된다. 여러분은 어떤 Shell을 사용할 것인지를 결정해야 한다. 어떤 사람은 Bash 의 진보된 특징을 가진 Bourne Shell 구문이, 또 어떤 사람은 좀 더 구조 화된 C Shell 구문이 좋다고들 한다. cp나 ls와 같은 일반적인 명령어들은 같다. 그러나 여러분이 쉘 스크립트를 작성하려 할 때나, 쉘의 종류에 따 라 다른 몇 가지 쉘의 진보된 특징들을 사용하려 할 때 문제가 생긴다. 이제까지 쉘의 몇 가지 특징을 설명했고, 아래부터는 Bourne Shell과 C Shell사이의 차이점들을 다룰 것이다. 아무튼, 이 해설서의 목적은 이 쉘들의 차이점을 최소화하는 것이다. (이 점에 대해서 정말 궁금하다면,bash와 tcsh의 man page를 읽어보기 바란다.) 3.7 와일드카드 대 부분의 UNIX 쉘에서 하나의 key를 이용해서 여러개의 file을 이용할 수 있다. 이것이 흔히 말하는 wildcards 이다. 와일드 카드인 "*"를 이용하면 모든 이름의 file 을 다 참조 할 수 있다. 예를 들어 여러분이 file 이름에 영어 철자 대신 "*" 를 이용한다면 "*"부분에는 모든 철자가 다 쓰인다. 실질적인 에를 들어보겠다. Larry라는 디렉토리에 frog,joe 그리고 stuff라 는 file이 있다고 가정하겠다. /home/larry# ls frog joe stuff /home/larry# file 이름에 "o"가 들어가는 file 만 보기 위해서,우리는 다음과 같은 명령을 한 다. /home/larry# ls *o* frog joe /home/larry# 여러분은 "*" 와일드 카드를 어떻게 이용하는가를 보았을 것이다. "*"는 모든 filename에 잘 어울린다. 왜냐하면 모든 철자가 와일드 카드와 잘 어울리기 때문이다. /home/larry# ls * forg joe stuff /home/larry# 여기에 몇 가지 더 예가 있다. /home/larry# ls f* frog /home/larry# ls *ff stuff /home/larry# ls *f* frog stuff /home/larry# ls s*f stuff /home/larry# file 이름에 "*"를 넣는 것을 wildcard expansion이라고 말한다. 그리고 이 작 업은 쉘에 의해서 된다. ls 와 같은 것에서 "*"와 같은 와일드 카드의 사용은 매우 중요하다. "*" 와일드 카드 사용에 주의 할 점이 있다. "."로 시작하는 file에는 와일드카 드를 사용 할 수 없다. 이 file들은 "hidden" file 이 아니면서 hidden file 처럼 취급 된다. 그래서 이 file 들은 일반적인 ls 명령으로는 볼 수도 없다. 여기 한 예가 있다. 우리는 전에 디렉토리에 들어가는 방법에 관해 언급 한 적이 있다; "."는 current directory에,".."는 parent directory에 가려고 할 때 사용된다. 그러나 ls를 사용하면 이 것들이 보이지 않는다. /home/larry# ls frog joe stuff /home/larry# 만약 여러분이 ls를 쓸 때, -a 스위치를 사용한다면 "." 로 시작하는 file을 볼 수 있다. /home/larry# ls -a . .. .bash_profile .bashrc frog joe stuff /home/larry# 이제 우리는 ".",".." 를 볼 수 있고, "hidden" file인.bash_profile과 .bashrc도 볼 수 있다. 그리고 이 두 file은 larry가 login될 때 bash에 의해 startup file 이 된다. 좀 더 자세한 내용은 3.12.3.장에 있다. 우리가 "*" 와일드 카드를 사용하면, 이름이 "."로 시작하지 않는 file은 보 여진다. /home/larry# ls * frog joe stuff /home/larry# 이것은 안전한 기능이다; 만약 "*" 와일드 카드가 "."로 시작하는 file과 디렉토리 이름인 ".", ".."에 사용이 가능하다면 특정 명령에서 엄청나게 위험해 진다. 다른 와일드 카드로 "?"가 있다. "?"와일드 카드는 철자 하나만 대신한다. 그러나 "ls ?"는 모든 file이 다 보여지게 된다. "ls termca?"라는 명령은 "termcap"를 보여주지 "termcap.backup"를 보여주진 않는다. 여기에 또 다른 예가 있다. /home/larry# ls j?e joe /home/larry# ls f??g frog /home/larry# ls ????f stuff /home/larry# 여러분이 보는 바와 같이, 와일드 카드는 특정한 많은 file을 한번에 보여 준다. 간편한 명령어 요약이 3.4장에 있다; 우리는 cp 와 mv 명령어로 한번에 많은 file을 카피하고, 옮기는 것을 보여 준다.예를 들어, /home/larry# cp /etc/s* /home/larry 이 것은 /etc 에 있는 "s"로 시작하는 모든 file을 /home/larry 에 카피한다. 그리고 cp 명령의 기본 형태는 아래와 같다. cp ... <목적지> 에서 는 카피할 file의 목록이고, <목적지>에서 카피되어진다. <목적지>는 file이나 디렉토리가 되어야 한다. mv도 똑같은 방법으로 하면 된 다. 여러분이 한번에 하나 이상의 file 을 카피하려고 하면 <목적지>가 반드시 디렉토리가 되어야 한다. 3.8 유닉스 배관?(plumbing) 3.8.1 표준 입출력. 많은 유닉스명령들은 '표준입력'이라고 알려진 곳으로부터 입력받고 표준 출력으로 그들의 데이터를 내보낸다.(줄여서 "stdin"과 "stdout"으로 나타낸다) 여러분의 쉘은 표준입력은 키보드 표준 출력은 스크린으로 지정하기 위해 몇 가지를 지정한다. 여기 cat명령을 사용하는 예가 하나있다. 일반적으로,cat명령은 커멘드 라 인의 모든 화일명으로부터 데이터를 읽어서 이것들을 표준 출력으로 내보낸 다. 따라서, /home/larry/papers#cat history-final masters-thesis 이란 명령을 실행하면 history-final의 내용 뒤에 masters-thesis가 따라서 보인다. 그러나 cat에 인자로 아무 화일명도 오지 않으면,그것은 대신 표준입력으로 부터 데이터를 읽어들여서 표준출력으로 내보낸다.여기 예가 하나 있다. /home/larry/papers# cat Hellow there. hellow there. Bye. bye. 위에서 보듯이 사용자가 입력하는 모든 라인들(이탤릭체로 표시된)이 즉시 cat명령에 의해서 표준 출력으로 내보내진다.표준입력으로부터 입력받고 있을 때 명령은 EOT(end-of-text)신호를 입력받았을 때 입력이 "끝났다" 는 것 을 인식한다.일반적으로 이것은 [Ctrl-D]를 누름으로써 발생된다. 여기 또다른 예가 있다. sort명령은 여러줄의 문장을 읽어(다시말 하지만 커 멘드 라인에 화일명이 주어지지 않는다면 표준입력으로부터).정렬된 출력을 표 준 출력으로 내보낸다.아래 것을 따라 해보자. /home/larry/papers# sort bananas carrots apples [Ctrl-D] apples bananas carrots /home/larry/papers# 이제 우리는 쇼핑 목록을 알파벳순으로 정렬할 수 있다.....유닉스가 꽤 쓸 만하지 않은가? 3.8.2 입출력 방향 바꿈 이제 우리는 우리의 쇼핑 목록을 다른 곳에 저장하기 위하여 sort의 출력을 화일로 보내기를 원한다고 하자.쉘은 우리가 ">"기호를 사용함으로써 표준출력 을 화일명으로 바꾸기를 허용한다.여기에 그것이 어떻게 동작하는지 나와있다. /home/larry/papers# sort > shopping-list bananas carrots apples [Ctrl-D] /home/larry/papers# 위에서 보듯이, sort명령의 결과는 표시되지 않고, 대신 화일 shopping-list로 저장된다. 이 화일을 보자. /home/larry/papers# cat shopping-list apples bananas carrots /home/larry/papers# 이제 우리는 우리의 쇼핑 목록을 정렬할 수 있고,또 저장도 역시 할 수 있 다. 그러나 우리가 items이란 화일 안에 정렬않된 본래의 목록을 가지고 있다 고 가정하자.그 정보를 정렬하고 화일로 저장하는 방법중의 하나는 sort명 령이 표준입력 대신에 화일명을 읽을 수 있도록 제시하고 위에서 했듯이 표준 출력의 방향을 바꾸는 것일 것이다.아래처럼: /home/larry/papers# sort items > shopping-list /home/larry/papers# cat shopping-list apples bananas carrots /home/larry/papers# 그러나,이렇게 하는 또 다른 방법이 있다.우리는 "<"기호를 사용함으로 써 표준 출력뿐만 아니라 표준입력에서도 역시 방향전환을 할 수 있다. /home/larry/papers# sort < items apples bananas carrots /home/larry/papers# 기술적으로는,'sort < items'은 'sort items'와 동등하다.그러나 전자는 우 리가 포인트를 묘사할 수 있게 한다:sort < items 는 items란 화일의 데이터 가 마치 표준입력으로 입력된 것 처럼 동작한다.쉘은 방향전환을 조작 한다.sort는 화일명(items)을 입력받지 못했다;sort에 관한 한 그것은 마치 여 러분이 키보드를 조작해서 타자하는 것처럼 표준입력으로부터 읽고 있는 것이 다. 이것은 필터(filter)의 개념을 제시한다.필터는 표준입력으로부터 데이터를 입력받아 몇가지 방법으로 처리하고,처리된 데이터를 표준 출력으로 내보낸다. 방향전환을 사용하여,표준입력과 표준출력은 화일을 참조할 수 가 있는 것 이다. sort는 단순한 필터다:그것은 입력된 데이터를 정렬하고 결과를 표준 출력으로 보낸다.cat는 더 간단하다:그것은 들어온 데이터로 아무것도 하지 않고,무엇이 들어오건 단순히 내보낸다. 3.8.3 파이프의 사용(?) 우리는 이미 sort를 필터로써 어떻게 사용할 수 있는지 설명했다. 그러나, 이런 예들은 여러분이 데이터를 어딘가에 화일로 가지고있거나 여러분이 직접 표준입력으로 타자해 넣을 것이라고 가정한 이야기다.만약 여러분이 정렬하기 를 원하는 데이터가 ls같은 다른 명령으로부터 나온 결과라면? 예를 들 어,sort명령을 -r옵션과 같이 쓰면 데이터를 역알파벳 순으로 정렬할 것이다. 만약 여러분이 현 디렉토리의 화일 리스트를 역순으로 정렬하고싶다면,다음 은 그 일례가 될 것이다. /home/larry/papers# ls english-list history-final master-thesis notes /home/larry/papers# ls > file-list /home/larry/papers# sort -r file-list notes master-thesis history-final english-list /home/larry/papers# 여기 우리는 ls의 출력을 화일로 저장하고, 그 후에 그 화일에 대해서 sort -r명령을 실행했다. 그러나 이것은 현명하지 못한 방법이고 또, 우리가 ls로부 터의 데이터를 저장할 임시화일을 사용하게 한다. 해법은 파이프라인화 하는 것이다(pipelining).파이프라인화는 여러분이 명령어 문장을 첫 명령의 표준출력이 직접적으로 두번째 명령의 표준입력으로 보내 지고,등등의 일이 행해지는 "파이프"에 연결하도록 하는 쉘의 또 다른 특징이 다.여기서 우리는 ls의 표준출력을 sort의 표준입력으로 보내기를 원한 다."|"기호는 파이프를 생성하는데 쓰여진다. /home/larry/papers# ls | sort -r notes master-thesis history-final english-list /home/larry/papers# 이 명령은 훨씬 짧고,타자하기가 확실히 쉽다. 그 명령을 쓰는 또다른 유용한 예 /home/larry/papers# ls /usr/bin 은 기다란 화일리스트를 표시할 것이다.그들 중 대부분은 여러분이 읽기 에는 너무 빠른 너무 빠른 속도로 지나갈 것이다.대신 /usr/bin에 있는 화일리 스트를 표시하기 위해 more를 사용하자. /home/larry/papers# ls /usr/bin | more 이제 여러분은 여유를 가지고 화일리스트의 페이지를 넘겨 볼 수 있다. 그 러나 기쁨은 여기서 멈추지 않는다! 여러분은 두 명령어 이상을 파이프할 수 있다. 명령 head는 입력스트림 (여기서는 파이프로부터의 입력) 으로부터 처음 의 줄들을 표시하는 필터이다.만약 여러분이 현재 디렉토리에서 알파벳순 으로 마지막인 화일명을 표시하고싶다면 우리는 다음명령을 쓸 수 있다. /home/larry/papers# ls | sort -r | head -1 notes /home/larry/papers# head -1은 단순히 입력받은(이런 경우,ls로부터 받아 역순으로 정렬한 데이 터의 스트림) 첫번째 줄을 표시한다. 3.8.4 비파괴 방향전환(Non-destructive redirection) 출력을 화일로 하기 위해 ">" 을 쓰는 것은 파괴적이다.다른 말로,명령 /home/larry/papers# ls > file-list 는 file-list의 내용을 덮어쓴다.만약 대신에 ">>"기호로 방향전환을 한다면, 출력을 덮어쓰는 대신에 그 뒤에 이어 붙일 것이다 /home/larry/papers# ls >> file-list 은 ls명령의 결과를 file-list뒤에 덧붙일 것이다. 단순히 방향전환과 파이프의 사용은 쉘에 의해서 제공되는 특징이고 쉘은 ">"과">>"그리고"|"을 사용하는 편리한 구문을 제공하며 명령어와는 아무관 계 없다는 사실만 기억하라. 3.9 화일 허용권(file permission) 3.9.1 화일 허용의 개념 유닉스 시스템은 여러 사람이 사용하기 때문에 개개인의 화일을 다른 사 람들이 함부로 다루는 것을 방지하기 위해,유닉스는 file permission 이라고 알려진 메커니즘을 제공한다.이 메커니즘은 화일과 디렉토리를 특정 사용자 에게 "소유되도록" 허용한다.예를 하나 들자면,Larry 가 홈디렉토리에서 화 일을 만들었다면,Larry는 이 화일들을 소유하고 액세스할 권리를 가진다. 유닉스는 화일을 사용자들과 사용자들의 그룹이 공유하도록 허용한다. 만약 Larry가 원한다면, 다른 사용자들이 접근하지 못하도록 하는 것 과 같 이, 그의 화일들의 액세스 권한을 축할 수 있다. 그러나,대부분의 시스템에 서 디폴트값은 다른 사용자들이 여러분의 화일을 읽을 수 는 있지만,어떤 방 법으로도 그것을 갱신하거나 지우는 것은 허용하지지 않는다. 위에서 설명했 듯이,모든 화일들은 특별한 사용자에게 속해있다.그러나,화일들은 또한 시스 템이 정의한 사용자들의 특별한 그룹에 속해있다.모든 사용자들은 그 사용자 가 만들어졌을 때부터 최소한 한개의 그룹에 위치해있다.그러나 시스템 관리 자는 또한 사용자의 접근권한을 한개 그룹 이상에 부여할 수 있을 것이다. 그룹들은 일반적으로 기계에 접근하는 사용자들의 유형으로 정의된다.예를 들어,어떤 대학의 유닉스시스템에서는,사용자들은 학생, 직원, 교수, 또는 손님 으로 분류될 것이다.또 시스템 자원에 대한 접근을 조정하기 위해 사용되는 bin이나 admin같은 시스템 자체에서 정의한 그룹들도 있지만 사용자들을 이 런 시스템그룹에 포함시키는 일은 매우 드물다. 허용은 크게 읽기 쓰기 실행의 세 부분으로 나뉜다.이런 permission은 화일 의 주인,화일이 속해 있는 그룹,그리고 그룹에 관계없이 나머지 모든 사용자의 세 등급의 사용자들에게 주어진다. 읽기 권한은 어떤 사용자가 화일의 내용이나,디렉토리의 경우는 (ls를 사용 하여) 디렉토리에 포함된 내용의 목록을 읽는 것을 허용한다.쓰기 권한은 사 용자들이 화일을 쓰거나 갱신하는 것을 허용한다.디렉토리일 경우,쓰기 권한은 사용자들이 새 화일을 만들거나,그 디렉토리 안에서 화일을 지우는 것을 허용한다.마지막으로 실행권한은 사용자들이 그 화일은 프로그램이나 쉘 스 크립트로써 실행되는 것을 가한다 (if the file happens to be a program of shell script,that is). 디렉토리에서는, 실행권한을 갖는다는 것은 사용자가 그 문제의 디렉토리로 들어갈 수 있음을 나타낸다. 3.9.2 화일허용의 해석(Interpreting file permission) file permission을 설명하기 위해 예를 보도록 하자. ls명령을 -l옵션과 함께 쓰 면 file permission을 포함하여 화일의 "긴" 리스트를 보여줄 것이다. /home/larry/foo# ls -l stuff -rw-x--r-- 1 larry users 505 Mars 13 19:15 stuff /home/larry/foo# 첫째 field는 file permission을 상징하는 리스트로 출력되었다.세번째 field는 화일의 소유자(larry)이고,네번째 field는 화일이 속한 그룹(users)이다. 물론 마지막 field는 화일명(stuff)이다.나머지 field는 다음에 살펴볼 것이다. 이 화일은 larry의 소유이고,users라는 그룹에 속해있다. file permission 을 보자. 문자열 -rw-r--r--은 순서대로,화일의 소유자와,그룹,그리고 그 외 다 른 모든 이에 대한 허용된 권한이다. permission의 문자열에서 첫번째 문자 ("-") 는 화일의 형태를 설명한다. "-" 는 단지 이것이 보통의 화일 (디렉토리나 디바이스 드라이버가 아닌) 임을 의미 한다.그 다음 세 문자("rw-")는 화일의 소유자에게 허용된 권한을 설명한 다."r"은 "read"를 "w"는 "write"를 의미한다.따라서 larry는 stuff화일에 대해 읽 기와 쓰기 권한을 가진다. 앞서 언급했듯이,읽기와 쓰기 권한 말고도,"x"로 나타내어지는 "실행" 권한이 라는 것이 있다.그러나,여기에는 "x"대신 "-"가있다.따라서 Larry는 이 화일에 대해 실행권한을 가지고있지 않다.이것은 훌륭하다.화일 stuff는 어떠한 종 류의 프로그램도 아니다.물론 Larry는 화일을 소유하고있기 때문에,그는 원 한다면 그 자신에게 실행권한을 줄 수 있을 것이다.이것은 간단히 커버된 다.(?) 다음 세 글자(r--)는 화일의 그룹 허용을 나타낸다.이 화일을 소유한 그룹 은 users이다.여기서 오직 "r"자만이 보이기 때문에,이 그룹에 속한 어떤 사용 자도 이 화일을 읽을 수 있을 것이다. 마지막 세 글자 (역시 r--)는 그 시스템에서 (화일의 소유주와 users 그룹 에 속한 사람들을 제외한) 그 밖의 모든 사용자들의 권한을 나타낸다. 다시 말하면, 오직 "r"자만 있기 때문에,다른 사용자들은 화일을 읽을 수는 있으나, 쓰거나 실행할 수 없다. 여기 몇 가지 다른 그룹 권한에 대한 다른 예가 있다. -rwxr-xr-x 화일의 소유주는 읽고,쓰고 실행가능하다.화일의 그룹 에 속한 사용자나,그 밖의 모든 사용자들은 이 화일을 읽고 실행할 수 있다. -rw------- 화일의 소유주는 읽고,쓰기가 가능하다. 다른 사용자들 은 화일을 액세스할 수 없다. -rwxrwxrwx 모든 사용자들이 읽고,쓰고,실행하는 것이 가능하다. 3.9.3 의존성(Dependencies) 화일에 부여되는 permission은 또한 화일이 위치한 디렉토리의 permission에 의존된다는 사실을 기억하는 것은 중요하다.예를 들어,화일이 -rwxrwxrwx로 맞춰져 있을 때 조차도,다른 사용자들은 그들이 화일이 위치한 디렉토리에서 읽고, 실행하는 것을 할 수 없다면,그 화일을 액세스 할 수 없다. 예를 들어,만약 Larry가 자기의 모든 화일에 대해 액세스를 금지하고싶 다면,그는 간단히 그의 홈디렉토리인 /home/larry를 -rwx------로 permission 을 맞춰주면 된다. 이 방법에서, 다른 어떤 사용자도 그 디렉토리와 그 디렉 토리에 포함된 화일을 액세스할 권리를 가지지 못한다.Larry 는 그의 화일중 에 있는 각각의 permission에 대해서는 걱정할 필요가 없다. 다른 말로 하면,화일을 액세스하기 위해선 여러분은 화일 패스내의 모든 디 렉토리들에 대한 실행 권한을 가지고 있어야한다.그러고서야 그 화일을 액세 스할 수 있다. 일반적으로, 유닉스 시스템에서 사용자들이란 그들의 화일에 대해서 매우 개방적이다. 일반적인 permission의 셋은 다른 사용자들이 화일을 읽는 것은 허용하나 어떠한 방법으로도 바꿀 수 없도록 -rw-r--r--이다. 디렉토리에 주 어지는 permission의 기본 셋은 다른 사용자들이 여러분의 디렉토리를 볼 수 는 있지만 그 안에서 화일을 새로 만들거나, 지울 수 없도록 -rwxr-xr-x 로 되 어있다. 그러나,많은 사용자들이 다른 사용자들이 그들의 화일에 접근하는 것을 꺼려한다.화일 permission의 세팅을 -rw------- 으로 하면 어떤 다른 사용자들 도 그 화일에 접근하는 것을 방지할 수 있다.마찬가지로 디렉토리의 permission의 세팅을 -rwx------으로 하면 다른 사용자들을 문제의 디렉토리로 부터 배제할 수 있다. 3.9.4 permission 바꿈 chmod명령은 화일의 permission을 맞추는데 사용된다. 오직 화일의 주인만 이 그 화일의 permission을 바꿀 수 있다.chmod의 구문은 다음과 같다. chmod {a,u,g,o}{+,-}{r,w,x} (화일명) 간단히, 말해서 하나 또는 그 이상의 전체(a), 소유자(u), 그룹(g), 제3자(o)를 일일이 지정할 수 있다.그 다음 여러분은 권리를 더할(+) 것인가, 또는 그것 을 뺐어버릴 것인가(-)를 확정한다. 마지막으로 여러분은 하나 또는 그 이상의 읽기(r), 쓰기(w),그리고 실행(x)을 지정한다. chmod a+r stuff 모든 사용자에게 읽기 권한을 준다. chmod +r stuff 위와 동일하다.a,u,g,o를 정해주지 않으면 a로 인식된다. chmod og-x stuff 소유자 외에 다른 사용자들의 실행권한을 없앤다. chmod u+rwx stuff 화일의 소유자들이 읽고,쓰고,실행할 수 있도록 허용한다. chmod o-rwx stuff 소유자 외의 사용자에 대한 읽기와 쓰기,그리고 실행권한을 제거한다. 3.10 작업통제(Job Control) 3.10.1 작업과 프로세스 작업통제는 여러분이 동시에 여러 명령 또는 작업을 제어할 수 있도록 해 주는 (bash 와 tcsh를 포함하여) 많은 쉘들이 제공하는 특징이다. 더 깊숙이 들어가기 전에 우리는 프로세스에 대해 논할 필요가 있다. 여러분이 프로그램 을 실행할 때 마다, 여러분은 프로세스라고 알려진 것을 실행한다. 그것은 실행 중에 대한 대단히 좋은 이름이다. ps명령은 현재 실행되고있는 프로세스들의 리스트를 표시한다. 여기 예가 하나있다. /home/larry# ps PID TT STAT TIME COMMAND 24 3 S 0:03 (bash) 161 3 R 0:00 ps /home/ larry# 첫번째 열의 PID는 모든 실행중의 프로세스에 주어지는 유일무이한 수인 프 로세스 ID이다. 마지막 열의 COMMAND는 실행중인 명령의 이름이다.여기 우 리는 래리가 현재 실행중인 명령만을 보고 있다. 그것은 bash (larry의 쉘) 과 ps명령 자신이다.여러분이 볼 수 있듯이 bash는 ps명령과 동시에 실행되 고있다. bash는 larry가 명령어를 입력했을 때 ps를 실행했다. ps가 실행이 끝 난 다음 (프로세스들의 목록이 표시되고 난 뒤) 다른 명령을 받을 준비를 하고 프롬프트를 표시하고있는 bash 프로세스로 제어권이 넘어간다. 실행중인 프로세스는 쉘에게 작업으로써 알려진다. 프로세스와 작업이라는 단어는 서로 바꿔쓸 수 있다. 그러나 프로세스는 일반적으로 여러개의 독립적 작업사이를 옮겨갈 수 있도록 하는 쉘의 특징인 작업제어와 결합되었을 때 만 "작업"이라고 불린다. 대부분의 경우 사용자들은 한번에 한가지씩의 작업(그것은 대부분 어떤 명령 이든 마지막에 쉘에서 마지막에 입력한 명령이 될 것이다)만 실행시키고 있다. 그러나 작업제어를 사용하면 여러분은 필요한 작업만큼 작업 사이를 옮겨 다니면서 여러 작업을 한번에 실행시킬 수 있다. 이 얼마나 유용한 것인가? 여 러분이 텍스트 화일을 편집하고 있을 때 편집하던 것을 중단하고 다른 일을 할 필요가 생겼을 경우를 생각해보자. 작업제어가 있다면, 여러분은 잠시 편집 을 중단하고, 쉘 프롬프트로 돌아와서 무언가 다른 일을 시작한다. 그 일이 다 끝났을 때 마치 에디터에서 떠나지 않을 것처럼 여러분은 에디터에서 여러분 이 시작한 곳으로 돌아올 수 있다. 이것은 단지 하나의 예일 뿐이다. 작업제어 에는 이외에도 많은 실용적인 사용법들이 있다. 3.10.2 Foreground와 background 작업은 foreground에도 background에도 있을 수 있다. 단지 한번에 한가지 작업만 foreground에 있을 수 있다. foreground작업이란 여러분이 직접 조작 가능한 작업이다. 그것은 키보드로 입력받아서 여러분의 모니터로 출력을 내 보낸다. (물론 여러분이 3.8장에 설명된 것처럼 입출력 방향을 바꾸지 않는다 면) 다시 말해서 background에 있는 작업은 터미널로부터 입력을 받지 못한 다. 일반적으로 그들은 일반적으로 여러분과 전혀 상호작용할 필요없이 혼 자서 작동된다. 어떤 작업들은 끝내는데 상당히 오랜 시간이 걸리고 또 실행되는 동안 흥미 를 유발시키는 일을 전혀 하지 않는다. 컴파일프로그램이 그런 작업이고, 커다 란 화일을 압축하는 것도 마찬가지다. 이러한 작업이 그들의 태스크를 마칠 때 까지 여러분이 지루해하면서 앉아 있어야할 이유가 없기 때문이다. 여러분은 그것들을 단순히 background로 실행시킬 수 있다. 그 작업이 background로 실행되는 동안 여러분은 다른 작업을 자유롭게 할 수 있다. 작업은 일시적으로 중지될 수 있다. 일시중지된 작업이란, 현재 실행되고 있 지는 않으나, 잠시 중단된 작업이다. 한 작업을 일시중지시킨 다음에 여러분 은 그 작업이 foregrounde든 background든 필요에 따라서 다시 작업을 재개 하도록 명령할 수 있다. 일시중지된 작업을 다시 시작하는 것은 어떤 방법으 로든 작업상태를 변화시키지 않을 것이다. 그 작업은 그것이 남겨진 자리부터 다시 실행될 것이다. 일지정지된 작업은 중단된 작업과 틀리다는 것을 기억하라. 여러분이 실 행중인 프로세스를(일반적으로 [Ctrl-C] 를 많이 쓰는, 인터럽트키를 누름으 로써) 중지했다면 그것은 프로세스를 영원히 죽여버린다. 한번 작업이 죽으면, 그것을 다시 재개할 희망은 없다. 여러분은 그 명령을 다시 내려야 할 것이다. 또한 어떤 프로그램들은 인터럽트를 거부한다. 그래서 [Ctrl-c]를 눌러도 즉시 그 작업을 죽일 수 없다. 이것은 어떤 프로그램의 작업종료 전에 어떤 일을 완전히 수행할 수 있게 해준다. 사실 어떤 프로그램들은 인터럽트를 사용해 서는 간단히 죽이지 못하게 하는 것도 있다. 3.10.3 Bcakgrounding과 작업 죽이기 간단한 예로 시작하자. yes라는 명령은 겉보기엔 끝없이 y의 줄기를 표 준출력으로 내보내는 쓸모 없는 명령으로 보일지 모른다. (이것은 실제로는 유 용하다. 만약 여러분이 yes의 출력을 파이프를 사용하여 예 아니오 문제를 연 속으로 묻는 다른 명령으로 보낸다면, y의 줄기는 모든 문제에 적합할 것이다. 이것을 한번 실행해보자 /home/larry# yes y y y y y y는 영원히 계속될 것 이다. 여러분은 인터럽트 키를 (일반적으로 [Ctrl-c]가 많이 쓰인다.) 누름으로써 그 프로세스를 죽일 수 있다. 따라서 우 리는 성가신 y의 줄기를 참을 필요가 없다. yes의 표준출력을 /dev/null로 보 내보자.기억하겠지만, /dev/null은 데이터에겐 "블랙홀" 처럼 동작한다. 그것으 로 보내는 어떤 데이터도 사라질 것 이다. 이것은 다른 방법으로는 말많은 프로그램을 조용하게 하는 매우 효과적인 방법이다. /home/larry# yes > /dev/null 음, 훨씬 낫다. 아무것도 출력되지 않았지만, 쉘 프롬프트 역시 돌아오지 않 았다. 이것은 yes가 아직 실행되고 있지만, 그 공허한 y들을 /dev/null 로 보 내고 있기 때문이다. 다시 말하면 그 작업을 죽이기 위해서, 인터럽트 키를 눌 러라. 우리가 yes 명령은 실행을 계속하기를 원하지만, 또 다른 것들을 실행하기 위해서 쉘 프롬프트가 나오는 것도 원한다고 가정하자. 우리는 yes를 background로 돌릴 수 있다. 그것은 상호작용 (interaction) 없이 실행하는 것을 허락할 것이다. 프로세스를 background로 보내는 방법중 하나가 "&"를 명령의 맨 뒤에 붙이 는 것이다. /home/larry# yes > /dev/null & [1] 164 /home/larry# 위에서 보듯이, 우리는 쉘 프롬프트가 되돌아오게 했다. 그런데 "[1] 164"는 뭘까? 그리고 yes명령은 정말 실행되고 있는 것인가 ? "[1]" yes 프로세스에 주어진 작업번호이다. 쉘은 모든 실행중인 작업에 번호 를 부여한다. yes는 명령중의 하나고 현재 실행 중이기 때문에, 숫자 1을 받는 다. "164"는 시스템이 작업에 주는 번호인 프로세스 ID, 또는 PID이다. 둘 중 한 번호가 뒤에서 보듯이 작업을 언급하는데 쓰인다. 여러분은 이제 yes명령을 bacround로 실행하고있고, 계속적으로 y의 스트림 을 /dev/null로 보내고있다. 이 프로세스를 체크하기 위해서, 쉘 내부명령인 jobs 를 사용한다. /home/larry# jobs [1]+ Runniing yes >/dev/null & /home/larry# 물론 그것으로 충분하다. 여러분은 작업의 상태를 체크하기 위해 또한 ps 명령을 쓸 수 있다. 그 작업을 중단하기 위해선, kill명령을 사용하라. 이 명령 은 작업번호와 프로세스 ID 모두를 요소로 갖는다. 이것은 그 명령을 사용하는 법 중 작업번호를 사용하는 것이다. /home/larry# kill%1 는 그 작업을 죽일 것이다. 작업을 작업번호로 구분할 때는, 여러분은 반드시 그 번호 앞에 퍼센트("%")를 써넣어야 한다. 이제 우리는 그 작업을 죽였고, 체크를 해 보기 위해서 jobs를 한번더 사용할 수 있다. /home/larry/# jobs [1]+ Terminated yes >/dev/null /home/larry# 그 작업은 사실 죽었다. 그리고 만약 우리가 jobs명령을 한번 더 써준다면 아무것도 출력되지 말아야 한다. 여러분은 또한 작업을 여러분이 작업을 시작 할 때 작업 ID와 함께 출력된 프로세스 ID(PID)를 사용하여 작업을 죽일 수 있다. 예에서는, 그 명령의 프로세스 ID는 164다. /home/larry# kill 164 는 다음과 같은 동작을 한다. /home/larry# kill %1 여러분은 프로세스 ID로 작업을 언급할 때 "%"를 사용할 필요가 없다. 3.10.4 작업 끝내기와 다시 시작하기 작업을 background로 넣는 또 다른 방법이 있다. 여러분은 작업을 (foreground에서) 보통으로 시작할 수 있다. 그리고 그때 그것을 background에서 다시 시작할 수 있다. 아래서 예로 설명해 보이겠다. 먼저, yes프로세스를 여러분이 하고 싶은대로 foreground에서 시작하라. /home/larry# yes >/dev/null 다시, 여러분은 yes를 foreground로 실행하고 있기 때문에, 쉘 프롬프트가 나오지 않을 것이다. 이제 [Ctrl-c]로 인터럽트를 거는 대신, 우리는 그 작업을 일시 정지할 것이다. 작업을 일시 정지하는 것은 그것을 죽이지 않는다. 오직 그것을 다시 시작할 때까지 잠시 중단하고 있는 것이다. 이렇게 하기 위하여, 여러분은 일시정지키(일반적으로 [Ctrl-Z]가 많이 쓰인다)를 누르면 된다. /home/larry# yes >/dev/null [Ctrl-Z] [1]+ Stopped yes >/dev/null /home/larry# 작업이 일시 정지된 동안, 그것은 간단히 실행되고있지 않은 것이다. 이 작 업을 위해서는 CPU 시간이 전혀 배분되지 않는다. 그러나, 여러분은 그 작업 을 다시 시작할 수 있다. 이것은 아무일도 일어나지 않았다면, 그 작업을 다 시 실행될 수 있게 해 준다. 그것은 중지된 자리부터 일을 다시 시작할 것이 다. foreground에서 다시 시작하기 위해선, fg 명령을 쓴다. /home/larry# fg yes >/dev/null 쉘은 여러분이 foreground로 밀어넣은 작업이 뭔지 알려주기 위해 명령문을 출력한다. [Ctrl-z]를 사용해서 작업을 한번더 중지시켜라. 이번에는, bg 명령을 사용해서 작업을 background로 집어넣는다. 이것은 마치 여러분이 그 명령을 "&"와 함께 사용한 것과 같이 실행된다. /home/larry# bg [1]+ yes >/dev/null & /home/larry# 그리고, 프롬프트가 나왔다. jobs명령은 yes가 진짜로 실행되고있다고 나타 내야한다. 그리고 우리는 그 작업을 전에 했던 것처럼 kill명령을 사용해서 죽 일 수 있다. 그 작업을 어떻게 다시 죽일 수 있을까? 작업이 background에 있기 때문에 [Ctrl-z]는 작동하지 않을 것이다. 대답은 그 작업을 fg 명령을 사용해서 foreground에 놓고, 그 다음 정지시켜버리는 것이다. 결국 여러분은 fg명령을 정지된 작업과 background에 있는 작업, 양쪽 다 사용할 수 있는 것으로 판명 되었다. background에 있는 작업과 정지된 작업사이에는 큰 차이가 있다. 정지된 작 업은 동작하지 않는 것이다. 그것은 CPU시간을 전혀 사용하지 않고 아무일 도 안하고있다(비록 디스크 스왑으로 밀려났을지라도, 그 작업은 아직 시스 템 메모리를 차지하고 있다. background에 있는 작업은 실행중이다. 그리고 여러분이 다른 일을 하고 있을 동안 어떤 일을 마치고 있는 것과 동시에, 메 모리를 사용하고있다. 그러나, background에 있는 작업은 여러분의 터미널에 텍스트를 표시하려 할 수도 있다. 그것은, 여러분이 다른 일을 하려할 때 짜 증나게 할 수도 있을 것이다. 예를 들어 여러분이 명령 /home/larry# yes & 를 표준출력을 /dev/null 로 방향전환 하지 않고 사용했다면 y의 줄기는, 막을 방법 없이 화면에 출력될 것이다. (여러분은 background에 있는 작업에 [Ctrl-c]를 사용할 수 없다. 끝없는 y의 줄기를 정지시키기 위해서는, 여러분은 kill 명령을 사용해야 할 것이다. (여러분이 타자하는 글자를 볼 수 없는 상태 로) another note. fg와 bg는 일반적으로 마지막으로 정지된 작업을 foreground와 background 로 돌린다. (jobs명령을 사용했을 때 +로 가리켜진 명 령) 만약 여러분이 한번에 여러 명령을 실행중이라면, 여러분은 작업 ID 를 fg와 bg의 인자로 지정해서 특정한 작업을 foreground와 background로 돌릴 수 있다. /home/larry# fg %2 (작업번호 2번을 foreground로),또는 /home/larry# bg %3 (작업번호 3번을 background로). 프로세스 ID는 fg 와 bg와 함께 쓸 수 없다. 더욱이, 아래처럼 작업번호 혼자 사용하는 것은 /home/larry# %2 은 아래와 동일하다. /home/larry# fg %2 작업제어를 사용하는 것은 쉘의 특징이라는 점을 기억하라. 명령 fg, bg, jobs는 쉘 내부명령이다. 만약 여러분이 어떤 이유로 작업제어가 되지 않는 쉘 을 이용한다면, 이런 명령이 가능하리라고 기대하지 마라. 덧붙여서 말한다면, bash와 tcsh의 작업제어에는 약간의 차이가 있다. 사실 어떤 쉘들은 작업제어를 제공하지 않는다. 그러나, 대부분의 쉘들은 리눅스가 제공하는 작업제어를 사용할 수 있다. 3.11 vi 에디터 사용하기 텍스트 에디터는 편지나 C 프로그램, 또는 시스템 환경설정 화일과 같 은 텍스트를 담고 있는 화일을 수정하는데 사용하는 간단한 프로그램이 다. 리눅스에서 돌아가는 그런 많은 에디터들 중에 어떤 유닉스 시스템 에서라도 반드시 찾을 수 있는 에디터는 바로 vi -- "visual editor" -- 이 다. vi는 사용하기 쉬운 에디터는 아니다. 하지만, 유닉스 세계에서 이 것은 아주 보편적인 것이기 때문에, 또 언젠가는 여러분이 사용해야 할 필요 가 생길 것이기에 여기서 약간 다루기로 한다. 여러분이 사용하기 원하는 에디터는 대부분 개인적인 약간의 경험과 스 타일의 문제일 것이다. 많은 사용자들은 화려하고 설명이 필요 없는, 아주 강력한 Emacs -- 유닉스 세계에서 어떠한 단일 프로그램보다도 많은 특징을 가진 에디터 -- 를 즐겨 사용한다. 예를 들어, Emacs는 LISP 프로그래 밍 언어의 본래 갖추어진 단어를 자체로 내장하고 있으며, 많은 확장(AI 프로그램처럼 "Eliza"는 그 중의 하나이다.)을 가진다. 그러나, Emacs와 그것 을 지원하는 모든 화일들은 비교적 크기 때문에, 많은 시스템에서 여러분 들이 사용할 수 있는 것은 아닐 것이다. 반면에, vi는 작고 강력하지만 쓰 기가 좀 어렵다. 그러나, 여러분이 vi의 사용법을 터득한다면, 이것은 굉장히 쉽다. 이 절은 vi의 긴밀히 결부된 입문 -- 이것의 모든 특징들을 다루지 않고, 여러분이 시작할 때 꼭 필요한 것들만 -- 을 다루기로 한다. 여러분이 이 에디터의 특징들에 대해 좀더 알고 싶다면 vi를 위한 man page를 읽 어보라. 또는 O'Reilly와 그 동료들이 쓴 "Learning the vi Editor"를 읽어보 면 된다. 이것에 대해서는 부록 A를 보면 좀더 알 수 있을 것이다. 3.11.1 개요 vi를 사용하는 동안 여러분은 연산의 세 가지 모드중 하나를 언제라도 쓰 게 된다. 이 모드들은 명령 모드(Command mode), 입력 모드(Edit mode), 라스트 라인 모드(Last line mode)로 알려져 있다. vi를 시작하면 여러분은 명령 모드에 있게 된다. 이 모드에서 화일을 수정 하거나 다른 모드로 전환하기 위한 명령을 사용할 수 있게 해준다. 예를 들 어, 명령 모드에서 "x"를 입력하면, 커서가 있는 위치의 문자를 지우게 된다. 화살표 키로 여러분이 수정하고 있는 화일의 내용을 스크롤하면서 옮겨 다 닐 수 있다. 일반적으로, 명령 모드에서의 명령은 하나의 문자, 길게는 두개의 문자로 되어 있다. 실질적으로, 여러분이 텍스트를 삽입하고 수정하는 것은 입력 모드에서이다. vi를 사용할 때, 이 모드에서 대부분의 수정작업시간을 보내게 될 것이다. 여 러분은 명령 모드에서 "i(insert)"와 같은 명령을 사용해서 입력 모드를 시작 할 수 있다. 입력 모드에서는, 커서의 현재 위치에서부터 문서에 텍스트를 삽 입할 수 있다. 입력 모드를 끝내고 명령 모드로 돌아가기 위해서는 [esc]를 누 르자. 라스트 라인 모드는 vi에 좀더 확장된 명령을 제공하기 위해 사용되는 특별 한 모드이다. 이런 명령들을 입력하면 화면의 마지막 줄에 나타나게 된다(그 래서 라스트 라인 모드라고 이름지어졌다.). 예를 들자면, 명령 모드에서 ":"을 입력하면 라스트 라인 모드로 전환되고, "wq"(화일을 저장하고 vi를 빠져나간 다.)나, "q!"(저장하지 않고 vi를 빠져나간다.)와 같은 명령어들을 사용할 수 있 다. 라스트 라인 모드는 일반적으로 하나의 문자보다 긴 vi 명령으로 사용되어 진다. 3.11.2 vi 시작하기 이런 개요들을 이해하는데 가장 좋은 방법은 실지로 vi를 사용해서 화일을 수정해보는 것이다. 아래 "화면"의 예에서는 25줄 대신에 텍스트의 6줄 정도를 보일 것이다. vi의 구문은 다음과 같다. vi 여기서 은 여러분이 수정하려고 하는 화일의 이름이다. 다음과 같이 입력해서 vi를 시작해보자. /home/larry# vi test test라는 화일을 수정하는 것이다. 여러분은 다음과 같은 화면을 볼 수 있을 것이다. +--------------------------------------------------------------------------------------------------+ |~_ | |~ | |~ | |~ | |~ | |~ | |"test" [New file] | +--------------------------------------------------------------------------------------------------+ "~"라는 문자의 열은 여러분이 화일의 끝 부분에 있다는 것을 가리킨다. 3.11.3 텍스트 삽입하기 자, 여러분은 지금 명령 모드에 있다. 화일에 텍스트를 삽입하기 위해서 [i] (입력 모드로 들어가는 명령)를 누르고 입력을 시작하자. +--------------------------------------------------------------------------------------------------+ |Now is the time for good men to come to the aid of the party._ | |~ | |~ | |~ | |~ | |~ | +--------------------------------------------------------------------------------------------------+ 텍스트를 삽입할 때, 여러분이 원하는 만큼 많은 라인을 입력할 수 있고 (물론, 각 라인 뒤에 [return]키를 누른다.), 백스페이스 키를 이용해서 잘못된 부 분을 고칠 수 있다. 입력 모드를 끝내고 명령 모드로 되돌아 가기 위해서는 [esc]를 누르자. 명령 모드에서는 화살표 키를 이용해서 화일 안을 옮겨 다닐 수 있다. 하지만, 지금 우리는 텍스트의 단 한문장만을 입력했기 때문에 up-이나 down-화살표 키를 눌러도 vi는 아무 반응을 하지 않을 것이다. 텍스트를 삽입하는 방법에는 i 명령을 사용하는 것 말고도 여러가지가 있다. 예를 들어, a 명령은 텍스트를 현재 커서의 위치대신에 커서의 위치 다음부 터 삽입하게 된다. 예를 들어 보자. 왼쪽 화살표 키를 이용해서 커서를 "good"과 "men"사이로 옮겨라. +--------------------------------------------------------------------------------------------------+ |Now is the time for good_men to come to the aid of the party. | |~ | |~ | |~ | |~ | |~ | +--------------------------------------------------------------------------------------------------+ 입력 모드를 시작하기 위해 [a]를 누르고, "wo"라고 입력한 뒤 명령 모드로 돌아가기 위해 [esc]를 누르자. +-------------------------------------------------------------------------------------------------+ |Now is the time for good women to come to the aid of the party. | |~ | |~ | |~ | |~ | |~ | +--------------------------------------------------------------------------------------------------+ 현재 줄의 아래 줄에 텍스트를 삽입하기 위해 o 명령을 사용한다. 예를 들면, [o]를 누르고 다른 한 줄 내지 두 줄을 입력하자. +-------------------------------------------------------------------------------------------------+ |Now is the time for good women to come to the aid of the party. | |Afterwards, we'll go out for pizza and beer._ | |~ | |~ | |~ | |~ | +--------------------------------------------------------------------------------------------------+ 여러분은 언제라도 명령 모드(i나 a, o와 같은 명령으로 입력 모드로 갈 수 있다.)와 입력 모드(텍스트를 삽입하는 중이라도 [esc]로 명령 모드로 나갈 수 있다.)를 전환할 수 있다. 3.11.4 텍스트 삭제하기 명령 모드에서 x 명령은 커서 위치의 한 문자를 삭제한다. 만일 위에서 [x] 를 여섯번 누르면 아래와 같이 될 것이다. +-------------------------------------------------------------------------------------------------+ |Now is the time for good women to come to the aid of the party. | |Afterwards, we'll go out for pizza and_ | |~ | |~ | |~ | |~ | +--------------------------------------------------------------------------------------------------+ 자, 이제 [a]를 눌러 약간의 텍스트를 입력하고 [esc]를 누르자. +-------------------------------------------------------------------------------------------------+ |Now is the time for good women to come to the aid of the party. | |Afterwards, we'll go out for pizza and Diet Coke._ | |~ | |~ | |~ | |~ | +--------------------------------------------------------------------------------------------------+ 여러분은 dd 명령([d]를 연속해서 두 번 눌러라.)을 사용해서 한 줄 전체를 지울 수 있다. 만약, 커서가 두번째 줄에 있다면, dd를 입력해보자. +-------------------------------------------------------------------------------------------------+ |Now is the time for good women to come to the aid of the party. | |~ | |~ | |~ | |~ | |~ | +-------------------------------------------------------------------------------------------------+ 커서 위치에 있는 단어를 지우기 위해서는 dw 명령을 사용한다. 커서를 "good"이란 단어에 위치시키고 dw를 입력하자. +--------------------------------------------------------------------------------------------------+ |Now is the time for_women to come to the aid of the party. | |~ | |~ | |~ | |~ | |~ | +--------------------------------------------------------------------------------------------------+ 3.11.5 텍스트 변경하기 R 명령을 사용해서 텍스트의 일부분을 바꿀 수 있다. 커서를 "party"의 첫 글자에 갖다놓고, [R]을 누르고 "hungry"라고 입력하자. +-------------------------------------------------------------------------------------------------+ |Now is the time for women to come to the aid of the hungry. | |~ | |~ | |~ | |~ | |~ | +--------------------------------------------------------------------------------------------------+ 텍스트를 수정하기 위해 R의 사용은 i나 a 명령과 많이 비슷하지만, R은 텍 스트를 삽입하는 대신에 덮어써버린다. r 명령은 커서 위치의 한 글자만 바꾼다. 예를 들면, 커서를 "Now"의 처음 에 갖다놓고, [r]과 [C]를 차례로 입력하면 다음과 같이 된다. +-------------------------------------------------------------------------------------------------+ |Cow is the time for women to come to the aid of the hungry. | |~ | |~ | |~ | |~ | |~ | +--------------------------------------------------------------------------------------------------+ "~" 명령은 커서 위치에서부터 대문자와 소문자로 바꾼다. 예를 들어보 자. "Cow"의 "o"에다 커서를 위치시키고 반복해서 [~]를 눌러보자. 다음과 같 이 될 것이다. +---------------------------------------------------------------------------------------------------+ |COW IS THE TIME FOR WOMEN TO COME TO THE AID | OF THE HUNGRY._ | |~ | |~ | |~ | |~ | |~ | +---------------------------------------------------------------------------------------------------+ 3.11.6 이동 명령어 여러분은 이미 화살표 키를 이용해서 문서를 옮겨다니는 방법을 알고 있 다. 덧붙여서, 커서를 움직이기 위해서 h, j, k, 그리고 l 명령을 사용할 수 있고, 각각은 왼쪽, 아래쪽, 위쪽, 오른쪽이다. 이것은 만일 몇 가지 이유로 인해 여 러분의 화살표 키가 제대로 작동하지 않을 때 유용할 것이다. w 명령은 커서를 다음 단어의 첫 글자로 이동시킨다. b 명령은 커서를 이 전 단어의 처음으로 이동시킨다. 0(숫자) 명령은 현재 줄의 처음으로 커서를 이동시키고, $ 명령은 줄의 맨 끝으로 이동시킨다. 양이 많은 화일을 수정할 때 여러분은 한번에 한 화면 위나 아래로 이동하 려 할 수도 있다. 이때, [ctrl-F]은 한 화면 위로 페이지를 이동하고, [ctrl-B]는 한 화면 아래로 페이지를 이동한다. 커서를 화일의 맨 끝으로 옮길 때는 G를 입력하자. 또 여러분은 임의의 줄로 이동할 수도 있다. 예를 들어보자. 10G라는 명령을 입력하면 커서는 화 일의 10번째 라인으로 이동하게 된다. 화일의 처음으로 이동하기 위해 1G를 사용할 수도 있다. 여러분은 삭제와 같은 다른 명령을 이동 명령과 함께 사용할 수 있다. 예를 들면, d$ 명령은 커서 위치에서부터 그 줄 끝까지의 모든 내용을 삭제한 다. dG는 커서 위치에서부터 화일의 끝 부분까지의 모든 내용을 삭제한다. 그 외에도 많다. 3.11.7 화일 저장하기와 vi 빠져나가기 바꾼 내용을 저장하지 않고 vi를 빠져나가기 위해서는 :q! 명령을 사용한다. ":"을 입력했을 때는 커서는 화면의 마지막 줄로 이동할 것이다. 그곳이 바 로 라스트 라인 모드이다. +--------------------------------------------------------------------------------------------------+ |COW IS THE TIME FOR WOMEN TO COME TO THE AID | OF THE HUNGRY. | |~ | |~ | |~ | |~ | |~ | |:_ | +--------------------------------------------------------------------------------------------------+ 라스트 라인 모드에서는 확장된 명령어들이 가능하다. 저장하지 않고 vi를 빠져나가는 q! 명령이 그중 하나다. :wq 명령은 저장한 후에 vi를 빠져나간 다. ZZ(":"없이 명령 모드에서) 명령은 :wq와 같은 동작을 한다. 저장만 하고 vi를 빠져나가지 않을 경우에는 :w만 입력한다. 3.11.8 다른 화일 수정하기 다른 화일을 수정하기 위해서는 :e 명령을 사용한다. 예를 들어보자. test 의 수정을 그만두고, 대신에 foo 화일을 수정하려면 다음과 같이 입력한다. +--------------------------------------------------------------------------------------------------+ |COW IS THE TIME FOR WOMEN TO COME TO THE AID | OF THE HUNGRY. | |~ | |~ | |~ | |~ | |~ | |:e foo_ | +--------------------------------------------------------------------------------------------------+ 만일, 여러분이 :e 명령을 사용하기 전에 먼저 화일을 저장하지 않았다면, 다음과 같은 에러 메시지가 나타날 것이다. +--------------------------------------------------------------------------------------------------+ |No write since last change (":edit!" overrides) | +--------------------------------------------------------------------------------------------------+ 간단히 말해서, vi는 이전 화일을 먼저 저장하기 전에는 다른 화일을 수정 하지 않겠다는 말이다. 여기서, 여러분은 원래 화일을 저장하기 위해 :w를 사용한 뒤, :e나 다음의 명령을 사용할 수 있다. +-------------------------------------------------------------------------------------------------+ |COW IS THE TIME FOR WOMEN TO COME TO THE AID | OF THE HUNGRY. | |~ | |~ | |~ | |~ | |~ | |:e! foo_ | +--------------------------------------------------------------------------------------------------+ "!"는 여러분이 먼저 이전 화일을 저장하지 않고 새로운 화일을 수정하겠다 고 vi에게 알리는 것이다. 3.11.9 다른 화일 붙이기 :r 명령을 사용하면, 현재의 화일에 다른 화일의 내용을 포함할 수 있다. 예를 들자면, :r foo.txt 위의 명령은 텍스트의 현재 커서 위치에서부터 화일 foo.txt의 내용을 삽입 한다. 3.11.10 쉘 명령 실행하기 여러분이 vi에 의하여 화일을 편집하는 동안, vi에서 빠져나가지 않고도 모든 쉘 명령을 실행할 수 있다. 또한 쉘 명령의 실행 결과를 여러분이 편집중인 화일로 가져올 수도 있다. :r! 명령은 :r과 비슷하게 작동하지만, 화일을 읽어들 이는 대신에 현재 커서 위치에서 버퍼로 보내진 명령의 출력을 삽입한다. 아래와 같이 입력했다고 예를 들어보자. :r! ls -F 아래를 보라. 그 결과이다. +-------------------------------------------------------------------------------------------------+ |COW IS THE TIME FOR WOMEN TO COME TO THE AID | OF THE HUNGRY. | |letters/ | |misc/ | |papers/_ | |~ | |~ | +--------------------------------------------------------------------------------------------------+ 또다른 방법으로 vi상에서 명령을 실행한 뒤 다시 에디터로 돌아올 수도 있다. 다음의 예를 들어보자. :! ls -F ls -F 명령이 실행되어지고, 그 결과가 화면에 출력되지만, 여러분이 편집 중인 화일에는 삽입되지 않는다. 만약, :shell 와 같이 입력했다면, vi는 쉘로 잠시동안 빠져나와서 쉘 명령을 실행할 수 있 게 된다(MS-DOS에서 프로그램상의 도스쉘을 생각하면 이해가 쉬울 것 같 다.). exit를 입력하면 쉘을 마치고 다시 vi로 되돌아간다. 3.11.11 도움말 얻기 vi는 관련된 도움말을 많이 지원하지는 않지만(대부분의 유닉스 프로그램이 그렇다.), 여러분은 항상 vi를 위한 man page를 읽어볼 수 있다. 제 4 장 시스템 관리 이 장은 시스템 관리자를 비롯하여 모든 리눅스 사용자에게 필요한 많은 진 보된 특징을 포함하여 리눅스 시스템 관리에 관한 개요를 담고 있다. 아무리 하찮은 시스템일지라도 모든 시스템에는 관리자가 있게 마련이며, 시스템을 운 영하는 일은 비록 사용자가 여러분 혼자 일지라도 매우 중요하고 때로는 시간 을 잡아먹는 일에 속한다. 우리는 여러분이 리눅스를 사용하면서 시스템 관리에 대해서 알아야 할 필요 가 있는 가장 중요한 것들을 바로 여기에 담으려고 노력하였다. 간단 명료함을 유지하기 위해서, 우리는 단지 가장 기본적인 것들을 포함하였으며, 보다 중요 하고 상세한 부분에 대해서는 Linux System Administrator's Guide를 참고하 기 바란다. 여기에서 각각이 어떻게 동작하고, 어떻게 서로 연관되는지 더 잘 이해할 수 있을 것이다. 적어도 어떤 내용이 포함되어 있으며, 어떤 도움을 줄 수 있을 것인지 대충 훑어보아야 할 것이다. 4.1 루트라는 감투와 능력 알다시피, UNIX는 사용자와 시스템을 통제할 수 있도록 사용자화하여 관리 한다. (예를 들어, 누군가가 자기의 연애편지를 훔쳐보는 것을 원하지 않는다 면 말이다.) 각 사용자에게는 사용자 이름, 홈디렉토리 등을 포함한 계정 (account)이 주어진다. 실제 사용자에게 주어지는 계정 외에, 특권을 가지는 특 별한 시스템 정의 계정이 있다. 이들 중 가장 중요한 것은 사용자 이름 root 에 대한 root account이다. 4.1.1 루트 계정 보통 사용자는 대개 시스템의 다른 누군가에게 해를 끼칠 수 없도록 권한이 제한된다. 시스템상의 파일 허가는 일반 사용자들이 모든 사용자들에게 공유 된 (/bin,/usr/bin 같은) 디렉토리에 있는 파일들을 지우거나 수정하지 못하도록 조정되어 있다. 대부분의 사용자들 또한 그들 자신의 파일들을 다른 사용자가 접근하거나 수정할 수 없도록 적당한 파일 허가를 가지고 보호하고 있다. root에게는 그러한 제한이 없다. root 사용자는 시스템에 있는 어떠한 파일 에 대해서도 읽거나 수정하거나 지울 수 있으며, 어떤 파일에 대한 허가와 소 유권을 변경하고 드라이브를 파티션하거나 파일시스템을 생성하는 것과 같은 특별한 프로그램을 실행할 수 있다. 즉, 일반 사용자로서는 실행할 수 없는 작업들 (tasks) 을 수행할 필요가 있을 때 마다 root 로 log-in 하도록 하자는 것이다. 왜냐하면, root는 무엇이든 할수 있고, 따라서 이 계정을 사용하여 log-in 했을때 그만큼 중대한 재난을 가져올 실수를 저지르기 쉽기 때문이다. 예를들어, 보통 사용자로서 여러분이 실수로 /etc에 있는 모든 파일을 지우 려고 한다면, 시스템은 이를 허가하지 않을 것이다. 그러나, root로 로긴해서 이 와 같이 했을 때 시스템은 전혀 불평을 하지 않고 파일들을 지워버릴 것이 다. root를 사용하면 그만큼 시스템을 망가뜨리기 쉽다는 것이다. 이러한 사 고를 막기 위한 가장 좋은 방법은 다음과 같이 하는 것이다. 。 손상을 일으킬 수 있는 명령에서 return을 누르기 전에 한번 더 생각할 것. 예를 들면, 어떤 디렉토리를 몽땅 지우려고 한다면, return을 누르기 전에, 전 체명령을 다시 읽고 정확한지 확인할 것. 。 root를 사용하는 습관을 가지지 말 것. root 사용자의 역할이 편한 만큼 여 러분의 특권을 보통 사용자의 특권으로 혼동하기 쉽다는 것이다. 예를 들면, 실 제로는 root로 로긴하고 일반사용자로 로긴한 것으로 착각할 수 있다는 것이다. 。 root 계정을 위해서는 다른 프롬프트를 사용할 것. root의 .bashrc 나 .login 파일을 수정하여, 쉘 프롬프트를 보통 사용자와는 다른 것으로 설정할 것. 예를 들면, 대부분은 보통 사용자를 위한 프롬프트로는 "$"를 사용하고, root 사용자 프롬프트로는 "#"가 예약되어 있다. 。 절대적으로 필요할 때만 root로 로긴할 것. 그리고, root로서 작업을 끝내자 마자 로그아웃 할 것. root 계정을 적게 사용할수록, 그 만큼 시스템에 손상을 입히는 기회가 줄어드는 셈이다. 물론, 실질적인 것을 위해 root를 사용하는 UNIX 해커부류도 있다. 하지만, 그들 모두는 어떤 점에서는 root로서 어리석은 실수를 저지르고 시스템을 망 가뜨릴 수도 있다는 것이다. 일반적 규칙으로는 root에 제한이 없다는 것에 익 숙해지고, 그러한 제한 없이 시스템을 사용할 수 있을 때까지는 root로 로긴 하는 것을 자제하는 것이다. 물론, 누구나 실수를 저지르게 마련이며, Linus Torvalds 자신도 한때 잘못 하여 자신의 시스템에 전체 커널 디렉토리가 지워졌다. 몇 시간의 작업을 영 원히 잃어버린 것이다. 그러나, 다행히도 그는 파일시스템 코드를 알고 있었기 때문에, 그는 시스템을 다시 부팅하고 손수 디스크로부터 디렉토리를 복구할 수 있었다. 또다른 예로, 여러분이 root 계정을 사용하는 것을 많은 능력을 주는 특별 한 마술모자를 쓰는 것에 비유해 볼 때, 손을 흔들어 전체 도시를 파괴할 수 도 있다면, 손을 조심스럽게 다루어야 할 것이다. 또한 우연히 여러분의 손을 파괴적인 쪽으로 사용하기 쉽기 때문에, 굉장한 감동에도 불구하고 필요하지 않을 때는 마술모자를 쓰지 않는 것이 좋을 것이다. 4.1.2 시스템 남용 권력을 가지게 되면 해를 입히려고 하는 경향이 있다. 이것은 UNIX 시스템 관리에 있어서 상반되는 영역중의 하나이며, 대부분의 사람들이 한번쯤은 경험 하게되는 부분이다. UNIX 시스템의 대부분의 사용자는 이러한 권력을 행사할 능력을 결코 가질 수 없다-대학과 업무용 UNIX 시스템에서는, 높은 봉급을 받 으며 고도의 자질을 갖춘 시스템 관리자만이 root로 로긴한다. 사실, 많은 공공 기관에서 root 비밀번호는 극비이며, 그 기관의 성배로 취급될 정도이다. 실제 로, root로 로긴하는 것에 대한 많은 논란이 일어나고 있다; 유용하면서도 극 히 위험스런 능력을 가진다는 것이다. root 계정을 위한 이러한 종류의 마음가짐은 악의와 경멸을 싹트게 하는 종 류이다. root 는 너무 부풀려 있기 때문에, 어떤 사용자가 root 로 로긴하는 기 회를 가질 때(리눅스 시스템이든 다른 곳이든), root의 특권을 해로운 방법으로 사용하는 경향이 있다. 소위 "시스템 관리자"는 다른 사람의 메일을 읽어보고 다른 사용자의 파일을 아무런 경고도 없이 지워버리는 강력한 장난감을 가진 어린아이처럼 행동하는 사람을 보게 된다. root는 시스템에서 그런 특권을 가지기 때문에, 시스템을 의도한 대로 운영 하려면 그 계정을 사용하기 위해서는 좀 성숙하고 자제할 줄 알아야 한다. 시 스템 관리자와 사용자 사이에 묵묵한 믿음이 있어야 하는 법이다. 여러분의 시스템 관리자가 여러분의 전자우편이나 파일을 뒤져본다면 어떻겠는가? 시분 할 컴퓨터 시스템에서 전자매체에 의한 사적인 자유보장에 대한 강력한 법적인 선례가 아직 없다. UNIX 시스템에서, root 사용자는 시스템의 모든 보안과 보 안 알고리즘을 빠져나갈 수 있는 능력을 가지고 있다. 시스템 관리자는 시스 템의 사용자들과 신뢰를 주는 관계를 발전시키는 것이 중요하다. 더 이상 강조 한다면 사족에 불과할 것이다. 4.1.3 사용자 관리 UNIX 보안은 다소 느슨하게 설계되어 있다. 시스템 보안은 나중의 일이었다- 시스템은 원래 사용자들이 다른 사용자들을 침해하는 것이 알려지지 않은 환 경에서 개발되었다. 이 때문에 보안 수단이 있지만, 여전히 보통 사용자가 시 스템을 침해 할 수도 있다. 시스템 관리자는 시스템을 남용하는 사용자를 다룰 때 두 가지 자세를 취하 게 된다: paranoid 이나 trusting 이 될 수 있다. 즉, 원리 원칙적이거나, 융통 성 있는 신뢰하는 자세를 취할 것이다. 원리 원칙대로 하고자 하는 시스템 관 리자는 대개 시스템을 보호하기보다는 보복하려는 경향이 있다. 내가 가장 좋 아하는 속담의 중의 하나가 "어리석음은 결코 죄가 될 수 없다"는 것이다. 바꾸 어 말하자면, 대부분의 사용자는 그런 능력을 가지지도, 시스템에 해를 입힐 만큼의 지식도 가지고 있지 않다. 사용자가 시스템에 문제를 일으키는 (사용자 의 파티션을 큰 화일들로 채운다던가 큰 프로그램의 여러개의 제본(instances) 을 실행한다든지) 90%는 사용자 스스로 자신이 하고 있는 일이 문제를 일으 킨다는 사실을 인식하지 못하고 있다는 것이다. 많은 문제를 일으키는 사용자 들을 꾸짖어도 보겠지만, 그들의 행동은 무지에서 온 것이지 악의를 가지고 행 한 행동은 아니라는 것이다. 치명적인 문제를 일으키는 사용자를 다룰 때, 보복하려고 해서는 안된다. "유 죄가 증명될 때까지는 무죄"라는 오랜 원칙을 따르는 것이다. 사용자와 대화 를 나누고, 대결하는 대신 문제에 대해 조사하는 것이 바람직한 방법이다. 마지 막으로 대부분의 시스템 관리자는 사용자의 편에 서지 않는다는 것이다. 이것 은 시스템 관리자가 시스템을 올바르게 운영하는가에 대한 의심을 유발시키게 된다. 사용자들이 관리자가 자신들을 신뢰하지 않는다고 믿게 되면, 바로 여러 분이 시스템의 파일을 지우고 비밀을 파괴했다고 비방할지도 모른다. 이것이 여러분이 원하는 류의 시스템 관리자로서의 위치는 결코 아니었을 것이다. 어떤 사용자가 시스템을 파괴하려고 시도하거나 의도적으로 해를 입히려고 하 는 사실을 알게 되더라도 악의를 가지고 보복하려고 해서는 안된다. 대신에, 간단히 경고-하지만 아주 융통성 있는-를 하는 것이다. 대부분의 경우에는 시스 템에 해를 입히는 행동을 하는 사용자를 잡아놓고 경고를 한다. 다시는 그러지 말라고 하는 거겠지만..., 그러나, 그들이 또 다시 그런 행동으로 잡히면, 의도 적인 행동이었는지 반드시 확인해야 한다. 비록 사용자가 문제를 발생시켰지만, 사실은 사고 혹은 자신의 잘못이었던 많은 경우에 대해서 서술할 것까지는 없 을 것 같다. 4.1.4 사용지침 설정 시스템을 운영하는 최선의 방법은 강압적인 요소를 갖지 않는 것이다. 군대 에서는 통할지 몰라도 UNIX에서는 그런 원칙으로 가지고 설계되지 않았다. 사 용자를 위한 간단하고 융통성이 있는 사용지침(guidelines)을 규정하는 것이 보 다 사리에 맞다-그러나, 규칙이 적으면 적을수록 그 만큼 규칙을 어기는 기회 가 적게 된다는 것을 명심해야 할 것이다. 시스템 사용에 대한 규칙이 완전히 합법적이고 명확하다고 하더라도 사용자들은 오히려 따르려고 하기보다 이러 한 규칙을 깨려 들것이다. 이러한 현상은 처음 UNIX를 접하는, 그리고 시스템 의 내부 비밀을 연구하는 사용자에게 더욱 그러하다. 예를 들어, 1 GB 크기의 화일을 시스템의 모든 사용자에게 메일로 보낸다는 것은 기상천외하다. 사용자 들은 그런 규칙을 이해하고 왜 그런 규칙이 있는가에 대한 도움이 필요한 것이 다. 시스템의 사용지침을 규정하려면, 특정 안내에 대한 이유가 명확한지 확인 해야 한다. 그렇지 않으면, 사용자들은 그러한 규칙을 용케 빠져나가는 전혀 새로운 방법을 찾아서 규칙을 깨버리는 것이다. 하지만, 여러분은 이러한 사실 을 모르게 될 것이다. 4.1.5 시스템 관리자의 임무 시스템을 어떻게 운영해야 하는가에 대해서 상세하게 설명하기는 곤란하다. 대부분은 시스템을 어떻게 사용하고 있는가에 달려있다. 다중 사용자 환경의 시스템이라면, 몇몇 사용자만 있거나 혼자 사용하는 경우와는 엄청나게 다르 다.그러나, 어쨌든 시스템 관리자가 진정으로 무엇을 의미하는가를 이해하는 것 은 좋은 생각이다. 시스템 관리자가 된다고 해서 자신이 UNIX 전문가가 될 수는 없다. 대부분 시스템 관리자는 실제로 UNIX에 대해서 별로 모르는 사람이 대부분이다. 이와 마찬가지로, 어떤 경우에는 일반 사용자가 시스템 관리자 보다 UNIX에 대해 서 더 많이 알고 있을 수도 있다. 또한, 시스템 관리자가 된다는 것이 자신의 시스템의 사용자들에 대해서 어떤 악의를 가지고 사용하도록 하는 것이 아니 다. 시스템은 여러분에게 사용자 화일을 마음대로 할 수 있는 특권이 있다고 해서 그렇게 할 권리를 가진다는 것을 의미하지는 않는다. 마지막으로, 시스템 관리자의 길이 막강한 대우를 받는 것이 아니라는 것이 다. 자신의 시스템이 386이든 Cray 슈퍼컴퓨터이든 상관없다. 시스템이 돌아가 는 것은 그런 요소와는 관계없이 같다는 것이다. root 비밀번호를 안다고 해서 돈이나 명예 혹은 여자친구가 생기는 것도 아니다. 시스템 관리자는 단지 시스 템을 유지하는 것이 임무일 뿐이다. 4.2 시스템 부팅 시스템을 부팅하는데는 플로피 드라이브나 하드 드라이브를 사용할 수 있다. 4.2.1 플로피를 이용한 부팅 대부분의 사람들은 리눅스 커널을 포함한 "boot floppy"를 사용하여 부팅한다. 이 커널은 리눅스 루트 파티션이 그 안에 코딩되어 있다. 따라서, 루트 파일시 스템에 대한 하드 드라이브를 찾을 수 있다.(rdev 명령은 커널 이미지에서 루트 파티션을 설정하는데 사용된다; 아래를 보라) 예를 들어, 다음은 시스템 설치시 SLS에 의해서 만들어진 floppy의 형태를 설명하고 있다. 자신의 boot floppy를 만들려면, 먼저 하드 디스크에 있는 커널 이미지의 위 치를 정해야 한다. 파일 /Image 나 /etc/Image가 있어야 한다. 어떤 배포본에 는 커널로 파일 /vmlinux를 사용한다. 대신에 압축된 커널을 가질 수도 있다. 압축된 커널은 부팅때 저절로 풀려서 메모리에 올라가며 하드 디스크를 덜 차 지한다. 압축된 커널을 가지고 있다면 파일 /zImage 나 /etc/zImage를 찾을 수 있을 것이다.일단 어느 커널을 사용할 것인지 결정되면, rdev 명령으로 커널 이 미지에 있는 루트 디바이스를 자신의 리눅스 파티션으로 정할 수 있다. 명령 의 형식은 아래와 같다. rdev 여기에서 은 커널 이미지의 이름이며, 는 리눅 스 루트 파티션의 이름이다. 예를 들어, 커널 /etc/Image에 루트 디바이 스를 /dev/hda2로 설정하려면 다음 명령을 사용한다. # rdev /etc/Image /dev/hda2 rdev는 또한 부팅때 사용할 디폴트 SVGA 모드와 같은 다른 옵션을 커널 이 미지에 설정할 수 있다. 인자 없이 rdev"를 type하면 자세한 도움말을 얻을 수 있다. root device를 설정한 다음, 커널 이미지를 플로피로 복사한다. 플로피 디스크 에 데이터를 복사할 때는 먼저 MS-DOS(로) 포맷을 해야한다. 이렇게 함으로 써, 플로피 디스크에 섹터와 트랙 정보를 두게 되며, 고밀도인지 배밀도 인지를 할 수 있다. 예를 들어, 파일 /etc/Image에 있는 커널을 /dev/fd0에 있는 플로피로 복사하 려면, 다음 명령을 사용한다. # cp /etc/Image /dev/fd0 이제 이 플로피로 리눅스를 부팅할 수 있게 된 것이다. 4.2.2 LILO 를 사용한 부팅 또 다른 부팅하는 방법은 LILO를 사용하는 것이다. 이 프로그램은 하드 디스 크의 부트 섹터에 존재하게 되며, 시스템이 하드 디스크로 부팅될 때 실행되 며, 자동적으로 하드 디스크 자체에 저장된 커널 이미지로 리눅스를 부팅한다. LILO는 또한 여러개의 운영체제에 대하여 부트 로더로서 사용될 수 있으며, 부팅때 부팅할 운영체제(Linux 나 MS-DOS와 같은)를 선택할 수 있도록 해준 다. LILO를 사용하여 부팅하면, 부팅시에 ctrl 나 alt 혹은 shift 키를 누르지 않으 면 디폴트로 정해진 운영체제가 부팅된다. 이들 중 아무 키나 누르면, 부트 프 롬프트가 제공되며, 여기에 부트할("linux" 나 "msdos"와 같이) 운영체제의 이름 을 type하면 된다. 부트 프롬프트에서 tab 키를 누르면, 이용 가능한 운영체제 의 리스트를 볼 수 있다. LILO는 디렉토리 /etc/lilo(lilo를 가지고 있다면)에 위치한다. LILO를 설치하는 쉬운 방법은 파일 /etc/lilo/config를 수정하고 다음 명령을 실행하는 것이다. # /etc/lilo/lilo LILO 구성화일은 자신이 부팅하고자 하는 운영체제의 "stanza"를 가진다. LILO 구성화일의 예로 아래 셋업은 /dev/hda1에는 리눅스 루트 파티션을, /dev/hda2 에는 MS-DOS 파티션을 가지고 있는 시스템에 대한 것이다. # LILO에게 /dev/hda( 첫번째 non-SCSI 하드 드라이브)에 있는 # 부트 레코드를 수정한다고 알림. /dev/hda가 아닌 다른 드라이브 # 에서 부트하려면, 다음 라인을 변경한다. boot = /dev/hda # 부트 로더의 이름. LILO에 관한 중대한 해킹을 하지 않는다면 # 이 화일을 수정할 필요가 없다. install = /dev/lilo/boot.b # LILO가 최적화 수행을 함. compact # /dev/hda1에 있는 리눅스 루트 파티션을 위한 stanza image = /dev/Image # 커널의 위치 label = linux # OS의 이름(LILO 부트 메뉴를 위한) root = /dev/hda1 # 루트 파티션의 위치 vga = ask # 커널에게 부트때 SVGA 모드를 묻도록 알림 # /dev/hda2에 있는 MS-DOS 파티션을 위한 stanza other = /dev/hda2 # 파티션의 위치 table = /dev/hda # /dev/hda2를 위한 파티션 테이블의 위치 label = msdos # OS의 이름(부트 메뉴를 위한) 위의 /etc/lilo/config 화일에서 첫번째 운영체제가 LILO가 부팅할 디폴트 OS 이며, 위에서 언급했듯이, LILO 프롬프트에서 부팅할 다른 OS를 선택할 수 있 다. 프로그램 /etc/lilo/QuickInst는 셋업에 대해서 질문을 하고 LILO 환경설정 화 일을 생성해준다. 디스크에 있는 커널 이미지를 수정 할 때마다 그 변화를 부 트 섹터에 반영하기 위해서 /etc/lilo/lilo를 다시 실행해야 한다. 또한 위에서처럼 "root = " 라인을 사용한다면, rdev를 사용하여 커널 이미지 에 루트 파티션을 다시 설정할 필요가 없다. LILO가 부트때 설정한다. 리눅스 FAQ(부록 A 참조)는 LILO를 사용하여 OS/2의 부트 매니저와 함께 부팅하는 방법을 포함하여 LILO에 관한 더 많은 정보를 제공한다. 4.3 시스템 끄기 리눅스 시스템을 끄는 것은 다소 복잡하다. 시스템 실행 중에 절대로 power를 내리거나 reset 스위치를 눌러서는 안된다. 커널은 메모리 버퍼에 디 스크 I/O의 기록을 유지한다. 커널이 버퍼의 내용을 디스크에 기록할 기회를 주지 않고 시스템을 리부팅하게 되면 파일시스템이 손상을 입을 수 있다. shutdown 명령을 사용할 때 역시 주의가 필요하다. 모든 프로세스가 종료 시그널을 받고, 정상적으로 종료되도록(쓰기와 모든 파일을 닫는 등) 해야한 다. 파일시스템은 안전하게 unmount 되어야 한다. 원한다면, 사용자들에게 시 스템을 내린다는 경고를 주고 logoff할 기회를 줄 수 있다. 시스템을 안전하게 끄는 가장 쉬운 방법은 shutdown 명령을 사용하는 것이 다. 명령의 형식은 다음과 같다. shut 은 시스템을 끌 시간이며(hh:mm:ss의 형식으로), 는 shutdown하기 전에 모든 사용자의 터미널에 출력되는 메시지이다. 대신, 를 "now"로 지정하면 즉시 shutdown할 수 있다. -r 옵션은 시스템을 다 시 부팅하려고 할 때 사용한다. 예를 들어, 시스템을 8:00pm에 shutdown하려면 다음 명령을 사용한다. # shutdown -r 20:00 명령 halt는 어떠한 경고 메시지도 없이 강제로 즉시 shutdown할 때 사용된 다. halt는 혼자 시스템을 사용하고 있고 shutdown하고 시스템을 turn off하려고 할 때 유용하다. ◇ 다음 메시지를 볼 때까지는 시스템을 다시 부팅하거나 파워를 내리지 말 것. The System is halted shutdown 이나 halt 명령을 사용하여 시스템을 "말끔하게" shutdown하는 것 은 매우 중요하다. 어떤 시스템에서는 ctrl-alt-del를 누르면 트랩이 발생하여 shutdown을 부르게 되며, 그러나 또 어떤 시스템에서는 "Vulcan nerve pinch" 를 사용하여 시스템을 즉시 리부팅하며 재난을 일으킬 수 있다. 4.4 사용자 관리 자신의 시스템이 다중 사용자 환경이든 아니든, 리눅스 하에서 사용자 관 리의 관점을 이해하는 것은 중요하다. 심지어 혼자 사용할지라도, 자신을 위한 별개의 계정을 가질 필요가 있다.(대부분의 작업을 하는데는 root보다는 다른 계정을 사용하는 것이 안전하다.) 시스템을 사용하는 사람이면 누구나 자기 자신의 계정을 가져야 한다. 여러 사람이 같은 계정을 공유하는 것은 좋지 않다. 보안 문제를 야기시킬 뿐만 아니라, 계정은 시스템의 사용자를 유일하게 식별하는데 사용된다. 가끔씩은 누가 무엇을 하고 있는지에 대한 기록을 유지할 필요가 있다. 4.4.1 사용자 관리의 개념 시스템은 각 사용자에 대하여 많은 부분의 정보를 가진다. 요약하면 아래와 같다. username : 사용자 이름은 시스템에 모든 사용자에게 주어지는 유일한 식별자 이다. larry, karl, mdw등이 사용자 이름의 예이다. "_"(underscore) 와 "." (period)는 물론 문자와 숫자가 사용될 수 있다. 사용자 이름은 통상 8자로 제 한된다. user ID : 사용자 ID 혹은 UID는 시스템에 모든 사용자에게 주어지는 유일한 숫자이다. 시스템은 대개 사용자 이름보다는 UID에 대한 정보를 유지한다. group ID : 그룹 ID 혹은 GID는 사용자의 디폴트 그룹의 ID이다. 3.9절에서 그 룹 허가에 대해서 논의하였으며, 각 사용자는 시스템 관리자가 정의한 하나 혹 은 그이상의 그룹에 속한다. 아래에 더 자세히 되어있다. password : 시스템은 또한 사용자의암호화된 비밀번호를 저장한다. passwd 명 령은 사용자의 비밀번호를 설정하고 변경하는데 사용된다. full name : 사용자의 "실제 이름" 혹은 "완전한 이름" 또한 사용자 이름과 함께 저장된다. 예를 들어, 사용자 schmoj는 실제로 "Joe Schmo"라는 이름을 가지는 사용자이다. home directory: 홈디렉토리는 사용자가 로긴때 처음 들어가는 디렉토리이다.모 든 사용자는 자신의 홈 디렉토리를 가져야 하며, 대개 /home 아래에 있다. login shell: 사용자의 로긴 쉘은 로긴때 사용자를 위해서 시작되는 쉘이다. 예를 들면, /bin/bash 와 /bin/tcsh이다. 파일 /etc/passwd는 사용자에 관한 이러 한 정보를 포함한다. 파일에 각 라인은 한 사용자에 대한 정보를 가진다. 각 라 인의 형식은 다음과 같다. username:encrypted password:UID:GID:full name:home directory:login shell 예를 들면, 다음과 같다. kiwi:Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash 보는 바와 같이 첫번째 필드 "kiwi"는 사용자 이름이다. 다음 필드 "Xv8Q981g71oKK"는 암호화된 비밀번호이다. 비밀번호는 알아볼 수 없는 형 태로 시스템에 저장된다. 비밀번호는 그 자체를 기본 키로 사용하여 암호화된 다.바꾸어 말하자면, 해독할 비밀번호를 알아야 하며, 이런 형태의 암호화는 절 대로 안전하다. 어떤 시스템은 "shadow password"를 사용하며, 비밀번호 정보는 파 일 /etc/shadow로 이전된다. 왜냐하면, /etc/passwd는 누구나 읽을 수 있기 때문 에, /etc/shadow 화일을 사용하면 보안의 정도를 높여주게 된다. 쉐도우 비밀 번호는 비밀번호 만료기간과 같은 몇가지 다른 특징을 제공한다. 이러한 특징 에 대해서는 여기에서 다루지 않을 것이다. 세번째 필드 "102"는 UID이다. 이것은 각 사용자에 대해 유일해야 한다. 네번째 필드 "100"은 GID이다. 이 사용자는 그룹넘버 100에 속한다. 사용자 정보와 마찬가지로 그룹정보는 /etc/group화일에 저장된다. 4.4.5절에 더 많은 정보를 다루고 있다. 다섯번째 필드는 사용자의 완전한 이름 "Laura Poole"이다. 마지막 두 필드는 각각 사용자의 홈 디렉토리(/home/kiwi)와 로긴 쉘 (/bin/bash)이다. 사용자의 홈디렉토리는 사용자의 이름과 같은 이름일 필요는 없다. 하지만, 이렇게 함으로써 디렉토리를 식별하는데 도움이 된다. 4.4.2 사용자 등록 사용자를 추가 등록할 때, 취해야할 몇 가지 절차가 있다. 먼저, 사용 자는 /etc/passwd 화일에 유일한 username와 UID를 가진 항목을 넣어야 한 다. GID와 fullname, 그 외 정보도 지정해야 한다. 그 다음 사용자의 홈 디렉 토리를 만들고, 그 디렉토리의 허가를 사용자가 소유하도록 설정하여야 한다. 쉘 초기화 파일은 새로운 홈디렉토리에 제공되어야 하며, 또다른 다양한 시스 템 구성화일도 제공되어야 한다.(예를 들면, 새로운 사용자를 위한 도착한 e-mail를 위한 저장소를 설정하는 등) 수작업으로 일일이 사용자를 등록하는 일이 어렵지는 않지만 다중 사용자 시 스템에서는 이러한 것들을 잊어버리기 쉽다. 사용자를 등록하는 가장 쉬운 방 법은 필요한 정보를 질문하고 자동으로 모든 시스템 화일을 수정해 주는 대화 식 프로그램을 사용하는 것이다. 이 프로그램의 이름은 useradd 혹은 adduser이며, 설치된 소프트웨어에 따라 다소 다르다. 이러한 명령은 매뉴얼 페이지를 찾아보면 자세하게 알 수 있을 것이다. 4.4.3 사용자 삭제 사용자 등록과 유사하게, 사용자를 삭제하는 것은 설치된 소프트웨어에 따 라 userdel 혹은 deluser 이란 명령을 가지고 할 수 있다. 임시로 사용자가 시스템에 로긴하는 것을 "중지"하려면(사용자 계정을 삭제 하지 않고), 간단히 /etc/passwd 화일에 비밀번호 필드에 애스터리스크("*")를 앞부분에 첨가하면 된다. 예를 들면, 사용자 kiwi를 /etc/passwd 화일에서 변경 하려면, 다음의 보기와 같으며 kiwi의 로긴은 이제 제한된다. kiwi:*Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/sh 4.4.4 사용자의 환경설정 사용자를 등록한 다음, 그 사용자에 대한 홈디렉토리나 비밀번호 같은 속성 을 변경해야 한다. 가장 쉬운 방법은 /etc/passwd 화일에 직접 값을 변경하는 것이다. 사용자의 비밀번호를 설정하려면, passwd 명령을 사용한다. 예를 들면, # passwd larry 와 같이함으로써 larry의 비밀번호를 변경할 수 있다. root 사용자만이 이러한 방법으로 다른 사용자의 비밀번호를 변경할 수 있으며, 보통 사용자는 자신의 비밀번호를 또한 passwd 명령을 가지고 변경할 수 있다. 어떤 시스템에서는, chfn 과 chsh 명령을 제공하여 사용자가 자신의 fullname 과 login 쉘의 속성 을 설정할 수 있다. 일반적으로는 사용자가 이러한 속성을 변경하려면 시스템 관리자에게 요청해야 할 것이다. 4.4.5 그룹 위에서 언급했듯이, 각 사용자는 하나 혹은 그 이상의 그룹에 속한다. 그룹 관계가 실제로 중요한 것은 파일허가와 관계가 있기 때문이며, 3.9절을 돌이켜 볼 때, 각 파일은 "그룹 소유권"과 그 그룹에 속한 사용자가 파일을 어느 정도 접근할 수 있는지를 정의한 일련의 파일허가를 가지고 있다. bin, mail, sys와 같은 몇 개의 시스템-정의 그룹이 있다. 사용자들은 이 그 룹에 속해서는 안되며, 시스템 파일 허가를 위해 사용된다. 대신에, 사용자 는 users와 같은 개개의 그룹에 속해야 한다. 좀더 구체적으로 표현하려 면, student, staff, faculty와 같은 여러개의 사용자 그룹을 유지할 수 있다. /etc/group 화일은 이러한 그룹에 대한 정보를 포함하고 있다. 각 라인의 형 식은 다음과 같다. group name:password:GID:other members 몇 가지 그룹의 예는 다음과 같다. root:*:0: users:*:100:mdw,larry guest:*:200: other:*:250:kiwi 첫번째 그룹 root는 특별히 root 계정을 위해 시스템 그룹으로 예약되어 있 다. 다음 그룹 users는 일반 사용자를 위한 것이며, GID로 100을 가지고 있다. 사용자 mdw와 larry가 이 그룹에서 접근이 주어져 있다. /etc/passwd 화일에서 는 각 사용자에게 디폴트 GID가 주어진다. 그러나, /etc/group 화일에 사용자 이름을 다른 그룹에 추가함으로써 사용자는 하나 이상의 그룹에 속하게 된다. group 명령은 자신에게 접근이 주어진 그룹을 표시해준다. 세번째 그룹 guest 그룹은 게스트사용자를 위한 것이며, other은 "other" 사용 자를 위한 그룹이름이다. 사용자 kiwi가 이 그룹에서 접근이 주어져 있다. 보는 바와 같이, /etc/group 화일의 "password" 필드는 거의 사용되지 않는다. 때때로 그룹 접근에서 비밀번호를 설정하는데 사용되며 거의 필요하지 않 다. 보통은 사용자들이 (newgroup 명령으로)특권 그룹을 변경하는 것을 미연 에 방지하려면, 비밀번호 필드는 "*"로 설정한다. 시스템에 그룹을 등록하는데 addgroup 혹은 groupadd 명령이 사용된다. 대개는, 그룹을 등록하는데 별다른 조건이 필요 없으므로, /etc/group 화일에 바 로 항목을 추가하는 것이 더 쉽다. 그룹을 삭제하기 위해서는 간단히 /etc/group 화일에서 그 항목을 지우면 된다. 4.5 파일 아카이브와 압축 백업에 대해서 논하기 전에, 먼저 UNIX 시스템에서 소프트웨어를 아카이브 및 압축하는데 사용되는 도구들을 소개하고자 한다. 4.5.1 tar의 사용예 tar 명령은 주로 소프트웨어를 아카이브하는데 사용된다. tar 명령의 형식은 다음과 같다. tar ... 여기서 은 tar를 위한 명령과 옵션을 나타내며, 에서 은 아카이브화일을 만들거나 해제할 파일을 나타낸다. 예를 들어, 명령 # tar cvf backup.tar /etc는 /etc 디렉토리내의 모든 파일을 tar 아카이브 화일인 backup.tar로 묶어준다. 첫번째 인자인 "cvf"는 tar 명령의 "명령"이다. "c"는 새 로운 아카이브화일을 생성함을 말한다. "v" 옵션은 verbose 모드를 나타내며, 아카이브된 화일명을 표시한다. "f" 옵션은 파일과 디렉토리명을 아카이브 화일 에 추가하는 것을 의미한다. 다음 명령은 # tar xvf backup.tar 현재 디렉토리에 backup.tar 화일을 풀어놓을 것이다. 이러한 방법은 때로는 위험하다- tar 화일을 풀 때, 구화일들이 겹쳐 쓰여지게 된다는 것이다.더군다 나, tar 화일을 풀기 전에 풀리는 파일의 위치를 미리 알아야 한다. 예를 들어, 다음 화일들이 아카이브된다고 하자; /etc/hosts, /etc/group, /etc/passwd. 다음 명령을 사용하면, # tar cvf backup.tar /etc/hosts /etc/group /etc/passwd 디렉토리명 /etc/가 각 화일명의 시작부에 추가된다. 이 화일을 정확한 위치에 풀려면, 다음 명령을 사용해야 한다. # cd / # tar xvf backup.tar 왜냐하면, 파일이 아카이브 화일에 저장된 경로명을 가지고 풀리기 때문이다. 그러나, 다음과 같이 아카이브한다면 # cd /etc # tar cvf hosts group passwd 디렉토리명은 아카이브 화일에 저장되지 않는다. 그러므로, 그 화일을 풀기 전 에 먼저 "cd /etc"를 해야한다. 보는바와 같이, tar 화일이 어떻게 생성되었는가 하는 것이 푸는 위치를 다르게 한다. 다음 명령은 # tar tvf backup.tar 풀기 전에 tar 화일의 "index"를 출력하는데 사용된다. 이렇게 하여, 어떤 디렉 토리의 어떤 화일이 아카이브 화일에 저장되어 있는지를 알 수 있으며, 정확 한 위치에 아카이브 화일을 풀 수 있다. 4.5.2 gzip과 compress의 사용예 MS-DOS를 위한 아카이브 프로그램과 달리, tar는 자동으로 파일을 압축 해 주지 않는다. 그러므로, 두개의 1M 파일을 아카이브하면, 결과는 2M크기의 tar화일이 생길 것이다. gzip 명령은 파일을 압축하는데 사용된다. (압축을 위 해서 파일은 tar 파일일 필요가 없다). 다음 명령은 # gzip -9 backup.tar backup.tar를 압축하여 tar의 압축된 버전인 backup.tar.gz라는 화일을 남길 것이다. 스위치 -9 는 가장 높은 압축율을 사용한다는 것이다. gunzip 명령은 gzipped된 파일을 푸는데 사용된다. "gzip -d" 를 사용해도 될 것이다. gzip는 비교적 UNIX 계에서 새로운 압축 도구이다. 여러해 동안 compress 명령이 대 신 사용되어왔다. 그러나, 몇 가지 요소에 의해서 compress는 단계적으로 그 사용이 줄어들고 있다. compress로 압축된 파일은 끝에 확장자 .Z를 가진다. 예를 들어, backup.tar.Z는 backup.tar 화일의 compress로 압축된 버전이고 반면에, backup.tar.gz는 gzip으로 압축된 버전이다. uncompress는 compress로 압축된 화일을 푸는데 사용된다; gunzip 또한 compress로 압축된 화일을 처리해야 할 수 있다. 4.5.3 gzip과 compress를 결합한 사용예 그러므로, 파일 그룹을 archive하고 다시 그 결과를 압축하려면, 다음 명령 을 사용한다. # tar cvf backup.tar /etc # gzip -9 backup.tar 결과는 backup.tar.gz 화일이 생성된다. 이 화일을 풀려면, 압축할 때 명령의 순서를 반대로 사용하면 된다. # gunzip backup.tar.gz # tar xvf backup.tar 물론, 항상 tar 화일을 풀기 전에 올바른 디렉토리에 있는지 확인해야 한다. UNIX의 특성을 백분 활용해서 압축부분을 한 라인에 적으면 다음과 같다. # tar cvf - /etc | gzip -9c > backup.tar.gz 여기에서, tar 화일은 "-"로 출력을 보내며, 이것은 tar의 표준출력을 나타낸다. 이것은 다시 gzip으로 파이프되어 입력된 tar 파일을 압축해서 그 결과를 backup.tar.gz에 저장한다. gzip의 -c 옵션은 gzip의 출력을 표준출력으로 내 보 내도록 하며, 이것은 다시 backup.tar.gz로 재집적된다. 한 라인의 명령으로 이 아카이브 화일을 풀려면 다음과 같이 한다. # gunzip -c backup.tar.gz | tar xvf - gunzip는 backup.tar.gz의 내용을 풀어서 그 결과 tar 파일을 표준출력으로 내 보낸다. 그 결과는 다시 tar로 파이프되어서, "-" 로부터 읽어들인다. 즉, 이번 에는 "-" 가 tar의 표준입력으로 참조되는 것이다.다행히도, tar 명령은 허공에서 자동으로 파일을 compress/uncompress 할 수 있는 -z 옵션을 가지고 있다. 그 러나, 이것은 compress 알고리즘에 한정된 것이며, gzip을 사용하지 못한다.(-z 옵션을 사용할 때 gzip을 사용하는 새로운 GNU tar 버전이 나오기를 기대하 지만, 이미 너무나 오래 전부터(from the Stone Age)사용해왔으므로, 앞으로 도 gzip 알고리즘을 사용하는 -z 옵션을 가진 tar는 기대하기 어렵다.) 예를 들어, 다음 명령은 # tar cvfz backup.tar.Z /etc 다음명령과 동등하다. # tar cvf backup.tar /etc # compress backup.tar 이와 마찬가지로 # tar xvfz backup.tar.Z 는 다음 명령 대신 사용될 수 있다. # uncompress backup.tar.Z # tar xvf backup.tar tar 와 gzip에 대한 더 많은 정보를 위해서는 매뉴얼 페이지를 참고해야 할 것 이다. 4.6 플로피의 사용과 백업하기 플로피는 대개 백업 매체로 사용될 수 있다. 시스템에 테이프 드라이버가 연결되어 있지 않다면 비록 느리고 다소 신뢰성이 떨어지기는 하지만 플로피 가 대신 사용될 수 있다. 또한 별개의 파일시스템으로도 사용가능하며, 이렇게 하여 플로피를 마운트하고 데이터에 접근할 수 있다. 4.6.1 플로피를 이용한 백업 플로피를 사용하여 백업을 하는 가장 쉬운 방법은 tar를 사용하는 것이다. 다음의 명령은 # tar cvfzM /dev/fd0 / 플로피 드라이브 /dev/fd0를 이용하여 시스템을 완전히 백업 받을 수 있다. 여기서 "M" 옵션은 백업을 여러 장으로 받도록 해준다. 즉, 하나의 플로피가 가득 차면, tar는 다음 플로피를 넣으라는 프롬프트를 줄 것이다. 다음의 명령 은 # tar xvfzM /dev/fd0 백업을 완전히 복구하는데 사용된다. 이러한 방법은 시스템에 테이프 드라이 브가 연결되어 있어도 사용할 수 있다. 이러한 방법을 사용하면 compress 알 고리즘에 만족해야 한다; tar는 "z" 옵션을 가지는 gzip를 사용하지 않는다. 여 러 장으로 백업을 받을 수 있는 또 다른 프로그램이 있다; tsx-11.mit.edu에 있 는 backflops 프로그램을 직접 가져올 수 도 있다. 시스템의 완전한 백업을 받는 것은 시간과 자원을 낭비하는 셈이다. 대부 분의 시스템 관리자는 수정본에 한해서 백업을 받는 incremental backup 정책 을 사용한다. 즉, 매달 완전한 백업을 받으며, 매주 지난주 백업에서 수정된 파 일들만 백업을 하는 방법이다. 이러한 경우, 시스템이 월중간에 망가지더라도, 간단히 지난달의 완전한 백업본을 복구하고 필요한 경우 지난주 백업본까지 복 구할 수 있다. find 명령은 어떤 날짜이래 변경된 화일의 위치를 찾는데 유용 하다. 이러한incremental backup을 다루는 몇 가지 예는 sunsite.unc.edu에서 찾 아볼 수 있다. 4.6.2 플로피를 파일시스템으로 사용하기 하드 드라이브에 파티션이 있는 것처럼 플로피에 파일시스템을 생성하는 것 이 가능하다. 예를 들면, 다음 명령은 # mke2fs /dev/fd0 1440 /dev/fd0 상의 플로피에 파일시스템을 생성한다. 파일시스템의 크기는 플로피 디스크의 용량과 일치해야 한다. 고밀도 3.5" 디스크는 1.44M 혹은 1440 블럭 의 크기이다. 고밀도 5.25" 디스크는 1200블럭을 가진다. 플로피를 액세스하려면, 일단 파일시스템을 마운트해야한다. 다음 명령은 # mount -t ext2 /dev/fd0 /mnt /mnt 디렉토리에 /dev/fd0의 플로피를 마운트하게 된다. 이제, 플로피의 모든 화일은 /mnt 디렉토리 하에 나타날 것이다. "-t ext2"는 ext2fs 파일시스템을 나 타낸다. 플로피를 다른 타입의 파일시스템을 생성하려면, mount 명령에 그 타 입을 지정해야 한다. "mount point"(파일시스템을 마운트하는 장소)는 mount 명령을 사용하기 전 에 이미 존재해야 한다. 존재하지 않는다면, mkdir 명령으로 간단히 만들면 된 다. 파일시스템, 마운팅, 마운트 장소에 관한 더 많은 정보를 위해서는 4.8절을 참고하라. ◇ 플로피 디스크의 어떤 I/O도 하드 디스크의 I/O 처럼 버퍼화된다. 플로피에 데이터를 쓰더라도 커널이 I/O 버퍼를 flush(청산)하고 나서야 드라이브에 불이 들어올 것이다. 다시 말해서, 플로피를 언마운트 하기 전에 플로피 디스크를 제거해서는 안된다는 것이다. unmount는 다음 명령으로 이루어진다. # umount /dev/fd0 MS-DOS에서 하던 것처럼 플로피를 갈아 끼워서는 안된다. 즉, 플로피를 바꿔 넣을 때마다, 먼저 umount 하고 나서 다시 mount 해야한다. 4.7 새로운 소프트웨어의 업그레이드와 설치 시스템 관리자의 또 다른 의무는 새로운 소프트웨어를 업그레이드하고 인스 톨하는 것이다. 리눅스 시스템은 매우 동적이다. 새로운 커널 개정판이 몇 주마 다 나오고 또 다른 소프트웨어가 자주 갱신된다. 이 때문에 초보 리눅스 사용 자들은 자신의 시스템을 급속도로 변화하는 보조에 발맞추려고 끊임없이 업그 레이드할 필요성을 느끼게 된다. 사실은 그럴 필요가 없을 뿐더러 시간만 허비 하는 셈이다; 리눅스 세계의 사소한 변화마저도 수용하려고 한다면, 대부분의 시간을 업그레이드하는데 사용하고 실제로 시스템을 사용하는 시간은 별로 없 게 될 것이다. 그렇다면, 언제 업그레이드해야 하는가? 어떤 사람은 새로운 배포물이 나올 때마다 업그레이드를 해야한다고 생각한다-예를 들면, SLS가 새로운 버전으로 나오게 될 때. 많은 리눅스 사용자들이 최신의 SLS 개정판이 나올 때마다 다 시 인스톨할 것이다. 이 또한 시간낭비에 지나지 않는다. 일반적으로, SLS 개 정판의 변화는 미세하다. 단지 10%만이 실제로 수정된 소프트웨어를 30장의 디스크를 들여 다운 받고 다시 인스톨한다는 것 또한 시간낭비에 불과하다. 자신의 시스템을 업그레이드하는 최선의 방법은 직접 하는 것이다; 업그레이 드 해야할 필요성을 느끼는 소프트웨어만 골라서 업그레이드하는 것이다. 실제 로 이렇게 하는 사람은 많지 않다: 무엇을, 어떻게 업그레이드하며, 업그레이드 를 하지 않으면 어떤 영향이 있을 것인가에 대해 알고자 한다. 리눅스를 잘 다 루려면, 자기 스스로 하는데 대한 두려움을 극복하는 것이 중요하다-이것은 리 눅스에 관한 한 사실이다. 사실, 일단 시스템이 작동하고 있고 모든 소프트웨 어가 올바르게 구성되었다면, 새로운 SLS 개정판을 가지고 다시 인스톨하면 아 마 처음 시스템을 인스톨했던 것처럼 모든 설치환경을 지워버리게 될 것이다. 이런 방법으로 다시 세팅하는 것이 필요한 것이 아니라 진정 필요한 것은 시 스템을 업그레이드하는데 관한 know-how와 어떻게 하는 것이 올바른가하는 것 이다. 시스템의 한 요소를 업그레이드 하면서, 다른 요소를 망가뜨려서는 안될 것 이다. 예를 들어, 본인의 시스템의 대부분의 소프트웨어는 오래된 0.96 MCC Interim 인스톨을 그대로 가지고 있다. 하지만, 이런 한 소프트웨어를 가 지고도 아무런 문제없이 새로운 버전의 커널과 라이브러리를 돌리고 있다. 대부분은 무감각하게 "보조 맞추기"식으로 업그레이드하는 것은 전혀 중요하지 않다. 리눅스는 MS-DOS 나 Microsoft Winodows가 아니다. 모든 소프트웨어를 최신의 버전으로 실행시킬 만한 중요한 이유가 없다. 새로운 버전에서 꼭 필요 한 특징을 발견하게 되면, 그때 업그레이드해도 된다. 그렇지 않다면, 그럴 필 요가 없다. 바꾸어 말하자면, 무엇을 업그레드하며 언제 해야하는가 바로 이 것이다. 업그레이드 자체를 위한 업그레이드는 지양해야 할 것이다. 많은 시간 과 노력을 낭비하게 될 것이다. 자신의 시스템에서 업그레이드할 가장 중요한 소프트웨어는 바로 커널, 라이 브러리 그리고 gcc 컴파일러이다. 이러한 세 가지는 시스템의 필수적인 부분이 며, 대개는 이들 모두가 서로 의존해서 성공적으로 작동한다. 다른 대부분의 소프트웨어는 주기적으로 업그레이드할 필요가 없다. 4.7.1 커널 업그레이드 커널의 업그레이드는 단순히 소스를 구해서 컴파일하면 그만이다. 여러분은 자신의 기계에 커널이 최적화되어 실행되도록 하기 위해서뿐만 아니라 어떤 특 징은 enable 시키고 또 어떤 것은 disable 시키기 위해서 자신이 컴파일 해야 한다. 이러한 과정은 별로 어렵지 않다. 커널 소스는 어느 리눅스 FTP 사이트(부록 C 참고)로부터 구할 수 있다. 예 를 들어, sunsite.unc.edu에는 /pub/Linux/kernel에서 커널소스를 찾아볼 수 있다. 커널 버전은 버전번호와 패치레벨을 사용하여 번호가 매겨진다. 예를 들어, 커 널 버전 0.99 패치레벨 11은 주로 0.99.p11이나 그냥 0.99.11로 쓴다.커널소스 는 gzip으로 압축된 tar 화일 형식으로 배포된다. 예를 들어, 0.99.p11 커널소스 를 포함하는 화일은 linux-0.99.11.tar.gz 이다. 이 tar 화일을 /usr/src 디렉토리에서 풀면 커널소스를 포함하는 /usr/src/linux 디렉토리가 생성된다. 새로운 버전을 풀기 전에 이미 존재하는 /usr/src/linux는 지우든지 다른 이름으로 해야한다. 일단 소스가 풀리면, /usr/include에 있는 두개의 심볼릭 링크가 올바른지 확 인해야 한다. 이러한 링크를 위해서는 다음 명령을 하면 된다. # ln -sf /usr/src/linux/include/linux /usr/include/linux # ln -sf /usr/src/linux/include/asm /usr/include/asm 일단 한번 이러한 링크를 생성해두면, 다음 버전의 커널 소스를 인스톨할 때 다시 링크를 생성할 필요가 없다.(심볼릭 링크에 대한 자세한 내용은 4.10.3 절 참고하라) 커널을 컴파일하기 위해서는 gcc 와 g++ C & C++ 컴파일러가 자신의 시스 템에 인스톨되어 있어야 한다. 이러한 컴파일러는 가장 최근의 버전을 가질 필요가 있다; 좀더 상세한 정보는 4.7.3절을 참고하라. 커널을 컴파일하기 위해서는 먼저 작업 디렉토리를 /usr/src/linux 디렉토리로 변경해야 한다. 여기서 make config를 실행하라. 이 명령은 새로운 커널에 포 함할 파일시스템의 종류와 같은 각종 환경설정 옵션에 대해 물어올 것이다.다 음, /usr/src/linux/Makefile 화일을 수정하라. ROOT_DEV의 정의가 올바른지 확 인하라-이 장치는 부팅때 루트 파일시스템으로 사용된다. 일반적인 정의는 ROOT_DEV = CURRENT 루트 파일시스템을 변경하지 않으려면, 이 화일을 수정할 이유가 없다. 다음, 모든 소스 종속을 고치기 위해서 make dep 명령을 실행하라. 이것은 가장 중요한 단계이다. 마지막으로, 커널을 컴파일하면 된다. 명령 make Image는 커널을 컴파일 하고 새로운 커널 이미지를 /usr/src/linux/Image 화일로 생성한다. 대신에 make zImage 명령을 하게 되면 압축된 커널 이미지를 컴파일할 것이다. 이것 은 부팅때 저절로 압축이 풀리며 드라이브 공간을 덜 차지하게 된다. 일단 커널이 컴파일 되었으면, 그것을 부트 플로피로 복사하거나( "cp Image /dev/fd0" 명령을 가지고) 하드 드라이브에서 부팅하려면 LILO를 사용 하여 인스톨해야 한다. 더 많은 정보는 4.2.2절을 참고하라. 4.7.2 라이브러리 업그레이드 이미 언급했듯이, 시스템의 대부분의 소프트웨어는 공유 라이브러리를 사용 하여 컴파일되며, 공통의 서브루틴은 서로 다른 프로그램에서 공유하게 된다. 어떤 프로그램을 실행할 때 , 다음 메시지를 보게 되면, Incompatible libaray version 그 프로그램이 요구하는 라이브러리 버전으로 업그레이드할 필요가 있다. 라 이브러리는 하위 호환성을 가진다; 즉, 구 버전의 라이브러리를 사용하여 컴파 일된 프로그램은 새로 인스톨된 라이브러리 버전에서 작동한다. 그러나, 그 반 대는 안된다. 라이브러리 최신 버전은 리눅스 FTP 사이트에서 찾아볼 수 있다. sunsite.unc.edu 에서는 /pub/Linux/GCC 디렉토리에 위치하고 있다. 거기 에 있는 "release" 화일은 어떤 화일을 받아서 어떻게 설치하는가를 설명하는 화일이다. 간단히, image-version.tar.gz 와 inc-version.tar.gz 화일을 구해야 한 다.여기서 version은 4.4.1과 같은 인스톨할 라이브러리의 버전이다. 이러한 화 일들은 gzip으로 압축된 tar 형태의 화일이다; image 화일은 /lib와 /usr/lib에 인스톨할 라이브러리 이미지를 포함하며, inc 화일은 /usr/include에 인 스톨할 include 이미지 화일을 포함한다. release-version.tar.gz 는 인스톨 절차를 상세하게 설명하고 있다. 일반적으 로, /usr/lib에 라이브러리 .a 와 .sa 화일을 인스톨할 필요가 있다. 이 화일들은 컴파일 타임때 사용된다. 게다가, 공유 라이브러리 이미지 libc.so.version 파일 은 /lib에 인스톨된다. 이 화일들은 run time 때 그 라이브러리를 사용하는 프로 그램에 의하여 로드되는 공유 라이브러리 이미지이다. 각 라이브러리는 /lib에 있는 라이브러리의 주 버전 번호를 사용하여 심볼릭 링크를 가진다. 예를 들어, libc 라이브러리 버전 4.4.1은 주 버전 번호 4를 가지는 셈이다. 라이브러리를 포함하고 있는 화일은 so.4.4.1이다. libc.so.4 의 이름을 가진 심 볼릭 링크는 /lib에 있는 파일을 가리키게 된다. 그 라이브러리를 업그레이드 할 때 이러한 심볼릭 링크도 변경해야 한다. 예를 들어, libc.so.4.4 에서 libc.so.4.4.1로 업그레이드할 때, 심볼릭 링크는 새로운 버전을 가리키도록 변경 되어야 한다. ◇ 심볼릭 링크는 아래에 주어진 것처럼 한 단계씩 변경하는 것이 중요하다. 어떻게 하든지 libc.so.4 의 심볼릭 링크를 제거하면, 그 링크에 의존하는 프로 그램( ls와 cat와 같은 기본적인 유틸리티를 포함하여)은 동작을 멈출 것이다. 심볼릭 링크를 libc.so.4에서 libc.so.4.4.1 화일을 가리키도록 갱신하려면 다음 명령을 사용하라. # ln -sf /lib/libc.so.4.4.1 /libc/libc.so.4 또한 같은 방법으로 libm.so.version의 심볼릭 링크를 변경해야 한다. 다른 버전 의 라이브러리로 업그레이드 하려면 위에 있는 파일명으로 적당히 대치해야 한다. (심볼릭 링크에 대한 더 많은 정보를 위해서는 4.10.3절을 참고하라) 4.7.3 GCC 컴파일러 업그레이드 gcc C & C++ 컴파일러는 시스템의 여러가지 소프트웨어를 컴파일하는데 사 용된다. 무엇보다도 커널을 컴파일하는데 가장 중요하다. gcc의 최신의 버전 은 리눅스 FTP 사이트에서 찾을 수 있다. sunsite.unc.edu에서는 /pub/Linux/GCC(라이브러리와 함께) 디렉토리에 있다. gcc 배포에 대하여 무슨 화일을 다운 받고 어떻게 설치하는지에 대한 상세한 설명이 release 화일에 있 다. 4.7.4 기타 소프트웨어의 업그레이드 다른 소프트웨어를 업그레이드하는 것은 주로 적당한 파일을 다운 받고 인 스톨하는 문제이다. 리눅스를 위한 대부분의 소프트웨어는 소스나 바이너리 혹은 둘 다를 포함하여 gzip으로 압축된 tar 형식의 파일로 배포된다. 바이너리 가 배포물에 포함되지 않았다면, 자신이 컴파일하면 된다; 주로 이것은 소스가 있는 디렉토리에서 make 를 type 하는 것을 의미한다. 새로운 소프트웨어에 대한 소개인 USENET 뉴스그룹comp.os.linux.announce 를 읽어보는 것이 새로운 소프트웨어에 대하여 알 수 있는 가장 쉬운 방법이 다.FTP 사이트에서 소프트웨어를 찾으려고 할 때는 FTP 사이트에서 ls-lR 인 덱스 화일을 다운 받아서 grep을 사용하여 문제의 파일을 찾아보는 것이 소프 트웨어의 위치를 알 수 있는 가장 쉬운 방법이다. 물론 archie 서비스가 가능하 다면,그 쪽으로 도움을 받을 수도 있다. 좀더 상세하게는 부록 A를 참조하라. 리눅스 소프트웨어의 가장 간단한 형태의 소스는 SLS 배포 디스크 이미지이 다. 각 디스크에는 gzip으로 압축된 tar 형식의 많은 .tgz 화일이 포함되어 있 다. 디스크를 다운받는 대신에, FTP 사이트의 SLS 디렉토리에서 원하는 .tgz 화일을 다운받아서 직접 인스톨 할 수도 있다. SLS 배포본을 설치운영하 려면, sysinstall 명령을 사용하면 자동으로 일련의 디스크를 완전히 로드해서 설치할 수 있다. 예를 들어, 다음 명령은 # sysinstall -series t SLS t 시리즈 디스크 전체를 설치할 것이다. 물론, 오랜 시간 다운받을 수 없거나 전체 시리즈를 인스톨하지 않으려면, 직접 .tgz 화일을 풀어야 할 것이 다.대개는 새로운 SLS의 버전이나 다른 배포본을 다시 인스톨해서 업그레이드 하는 것은 별로 좋은 생각이 못된다. 특히 SLS는 쉽게 업그레이드할 수 있도록 설계되어있지 못하다. 이러한 방법으로 다시 인스톨하려면, 아마 사용자 디렉 토리와 잘 정돈된 모든 환경을 포함하여 현재 인스톨된 버전을 파괴하고 말 것 이다. 소프트웨어를 업그레이드하는 최선의 방법은 부분지향(piecewise)이다; 즉, 자 주 사용하며, 새로운 버전이 나와 있다면, 그것을 업그레이드하라. 그렇지 않 다면, 그냥 내버려 두는 것이 바람직하다. 부셔지지 않는 한 고칠 필요가 없는 것이다. 현재 소프트웨어가 작동한다면, 업그레이드할 이유가 없다. 4.8 파일시스템 관리 또다른 시스템 관리자가 해야할 일은 파일시스템을 관리하는 일이다. 이러 한 대부분의 작업은 파일시스템이 손상을 입었는지 혹은 깨진 화일이 없는지를 주기적으로 검사하는 것을 의미한다. 많은 시스템들은 자동적으로 부팅때 파일 시스템을 검사한다. 4.8.1 파일시스템 마운팅 먼저, 파일시스템에 관한 몇 가지 개념을 살펴보자. 시스템이 파일시스템에 접근할 수 있으려면, 먼저 어떤 디렉토리에 마운트되어져야 한다. 예를 들어, 플로피 디스크에 파일시스템을 가지고 있다면 파일에 접근할 수 있으려면, 어 떤 디렉토리 아래, 말하자면, /mnt와 같은 디렉토리아래에 마운트해야 한 다.(4.6.2절 참고) 그 디렉토리에 파일시스템을 마운트한 다음, 그 파일시스템 에 있는 모든 파일은 그 디렉토리에 나타난다. 플로피의 경우라면 파일은 디렉토리 /mnt에 나타날 것이다. 플로피를 언마운트하고 나면 디렉토리 /mnt 는 비어있게 될 것이다. 하드 디스크에서의 파일시스템의 경우도 같다. 시스템은 자동으로 부팅때 하 드디스크의 파일시스템을 마운트한다. 소위 "루트 파일시스템"은 디렉토리 / 에 마운트된다. 예를 들어 /usr을 위한 별개의 파일시스템을 가지고 있다면, /usr 디렉토리에 마운트된다. 루트 파일시스템만 가지고 있다면, 모든 파일(/usr 에 있는 파일을 포함하여)은 그 파일시스템 상에 존재할 것이다. mount 명령은 파일시스템을 마운트하는데 사용된다. 명령 mount -av 는 /etc/rc (부팅때 실행되는 시스템 초기화 화일이다; 4.10.1절 참고) 파일에서 실행된다. mount -av 명령은 파일시스템에 대한 정보를 얻게 해주며, 마운트에 대한 정보는 파일 /etc/fstab에서 나타난다. # device directory type options /dev/hda2 / ext2 defaults /dev/hda3 /usr ext2 defaults /dev/hda4 none swap sw /proc /proc proc none 첫번째 필드는 장치이며 mount할 파티션이름이다. 두번째 필드는 마운트되는 위치를 나타내며, 세번째 필드는 ext2(ext2fs) 혹은 minix (minixfs) 와 같은 파일시스템의 타입 이다. 마지막 필드는 마운트 옵션을 나타내며 대개는 "defaults"로 설정된다. 보는바와 같이, 스왑 파티션도 /etc/fstab에 포함되어 있다. none이라는 마운 트 디렉토리를 가지며, swap 타입을 가진다. swapon -a 명령은 /etc/rc에서 실 행되며, /etc/fstab에 나타난 모든 스왑 장치에 대하여 스와핑을 가능하게 하는 데 사용된다. fstab 화일은 하나의 특별한 항목 즉 /proc 파일시스템을 포함한다. 3.10.1절 에서 언급했듯이, /proc 파일시스템은 시스템 프로세스, 이용가능한 메모리 등 에 대한 정보를 저장하는데 사용된다. /proc 파일시스템이 마운트되지 않으면, ps 와 같은 명령이 작동하지 않는다. ◇ mount 명령은 root 만이 사용할 수 있다. 이것은 시스템 보안을 유지하려 는 의도이다; 즉 보통 사용자들이 파일시스템을 장난삼아 마운트하거나 언마운 트하는 것을 원하지는 않을테니까. 보통 사용자가 시스템 보안을 손상시키지 않고도 (특히 플로피에 대해서) 파일시스템을 마운트하거나 언마운트할 수 있 게 하는 몇 가지 소프트웨어 패키지가 있다. mount -av 명령은 실제로 루트 파일시스템(위에 테이블에서 /dev/hda2)을 제 외한 모든 파일시스템을 마운트한다. 루트 파일시스템은 커널이 부팅때 자동적 으로 마운트한다. mount -av 를 사용하는 대신에, 직접 파일시스템을 마운트할 수도 있다. 명령 은 # mount -t ext2 /dev/hda3 /usr 위의 fstab 파일의 예에서 /dev/hda3를 가진 것과 동일하게 파일시스템을 마운 트한다. 일반적으로, 직접 파일시스템을 마운트하거나 언마운트해서는 안된다. /etc/rc 에 있는 mount-av 명령은 부팅때 파일시스템을 마운트한다. 또한 파일시스템은 자동적으로 시스템을 끄기 전에 shutdown이나 halt 명령에 의해서 언마운트 된다. 4.8.2 파일시스템 검사 가끔씩 파일시스템을 조사하여 손상의 여부와 깨진 화일이 있는지를 검사 하는 것이 좋다. 때로는 시스템이 자동적으로 부팅때(/etc/rc화일에 적당한 명 령을 둠으로써) 파일시스템을 검사한다. 파일시스템을 검사하는데 사용되는 명령은 파일시스템의 타입에 따른다. ext2fs(가장 일반적으로 사용되는 타입)의 경우는 e2fsck이며, 예를 들어, 명령 # e2fsck -av /dev/hda2 은 /dev/hda2의 ext2fs 파일시스템을 검사하고 자동으로 에러를 복구한다. 대개는 파일시스템을 언마운트하고 나서 검사하는 것이 바람직하다. 예를 들어, 명령은 # umount /dev/hda2 /dev/hda2의 파일시스템을 언마운트한다. 그런 다음 검사를 할 수 있다. 한 가지 예외는 루트 파일시스템은 언마운트할 수 없다는 것이다. 따라서, 루트 파일시스템을 언마운트하고 나서 검사를 하려면, boot/root 디스크를 사용해야 한다. 파일시스템 안에 어떤 파일들이 "busy" 즉, 실행중인 프로세스가 사용하 고 있는 경우에는 파일시스템을 언마운트할 수 없다. 예를 들어, 어떤 사용자 의 작업 디렉토리가 그 파일시스템에 있다면 언마운트할 수 없다. 사용중일때 파일시스템을 언마운트할려고 하면 "Device bush"라는 에러를 만나게 될 것이 다.다른 파일시스템은 efsck 와 xfsck같이 e2fsck와는 다른 형태의 명령을 사용 한다. 어떤 시스템에서는 단순히 fsck만으로 가능하며, 시스템이 파일시스템 의 타입을 결정하고 적당한 명령을 실행해준다. ◇ 어떤 파일시스템이 에러복구가 이루어졌다면, 파일시스템을 검사한 직후, 바로 시스템을 다시 부팅시키는 것이 중요하다. 예를 들어, e2fsck가 파일시스 템이 가진 에러를 복구했다는 메시지를 보고하면, shutdown -r해서 시스템을 즉시 다시 부팅시켜야 한다. 이것은 e2fsck가 수정한 파일시스템에 관한 정보 를 re-sync할 수 있도록 하는 것이다.물론, /proc 파일시스템은 이런 방법으로 검사할 필요가 없다. /proc는 메모리 파일시스템이며, 커널이 직접 관리한다. 4.9 스왑 파일의 사용 스왑 공간을 위해서 별개의 파티션을 가지는 대신에, 파일을 사용할 수도 있 다. 그러나, 그렇게 하려면 리눅스 소프트웨어를 인스톨하고 스왑화일을 만들기 전에 관련된 모든 것을 알아야한다. 리눅스 시스템을 설치하였다면 다음 명령을 사용하여 스왑파일을 만들 수 있 다. 아래에 8208 블럭(약 8M bytes)을 가진 스왑파일을 만들려고 한다. # dd if=/dev/zero of=/swap bs=1024 count=8208 이 명령은 스왑화일 자체를 생성한다. "count="에 블럭단위의 스왑파일의 크기 가 지정된다. # mkswap /swap 8208 이 명령은 스왑파일을 초기화 하며, 스왑파일의 이름과 크기를 적당한 값으로 지정한다. # /etc/sync # swapon /swap 이제 생성된 /swap 파일에서 스와핑이 된다. 먼저 sync 를 하는 것은 그 파 일이 디스크에 쓰여지도록 하는 것이다. 이러한 방법으로 스왑파일을 사용하는 주요한 단점은 스왑화일에의 접근이 파일시스템을 통해서 이루어진다는 것에 있다. 이것은 스왑화일을 구성하는 블럭이 연속적이지 않을 수 있다는 것을 의 미한다. 그러므로, 성능에 있어서는 별개의 스왑 파티션을 사용하는 것보다 떨 어진다. 왜냐하면, 블럭이 연속적이면, I/O 요청이 직접 디바이스 수준에서 이 루어지기 때문이다. 스왑화일을 사용하는 또 다른 단점은 파일시스템의 데이터를 파괴할 소지가 있다는 것이다. 특히 큰 스왑화일을 사용할 때, 잘못되면 파일시스템을 망칠 소 지가 다분히 있다. 파일시스템과 스왑 파티션을 따로 유지하는 것이 이러한 사 고를 미연에 방지해줄 것이다. 일시적으로 좀더 많은 스왑공간이 필요할 경우 스왑파일을 사용하는 것이 유용하다. 예를 들어, 큰 프로그램을 컴파일하면서 그 속도를 다소 높이고 싶다면, 임시적으로 스왑화일을 만들어서 기존의 스왑 공간에 추가하여 사용할 수 있다. 4.10 기타 작업들 실제로는, 주요한 어느 분류에도 포함되지 않는 시스템 관리자가 다루어야 할 많은 일이 있다. 4.10.1 시스템 구동화일 시스템이 부팅될 때, 많은 스크립트화일들이 사용자가 로긴하기 전에 시스 템에 의하여 자동적으로 실행된다. 아래에 어떤 일이 일어나는지 설명하고 있 다.부팅때, 커널은 /etc/init 프로세스를 spawn한다. init 프로세스는 구성화일 /etc/inittab을 읽어서, 이 화일의 내용에 포함된 다른 프로세스를 spawn하는 프로그램이다. inittab에서 시작되는 중요한 프로세스중의 하나는 각각의 가상 콘솔에서 시작하는 /etc/getty 프로세스이다. getty 프로세스는 가상콘솔을 가로 채서 가상콘솔에서 login을 실행시킨다. 이것은 각각의 가상콘솔에서 login할 수 있게 한다; /etc/inittab에 가상콘솔에 대한 어떤 getty 프로세스도 포함되어 있지 않으면, 그러한 가상콘솔에 로긴할 수 없다. /etc/inittab에서 실행되는 또 다른 프로세스는 /etc/rc이며, 이는 주요 시스템 초기화 화일이다. 이 화일은 파일시스템(4.8절 참고)을 마운트하고 스왑공간을 초기화하는 등의 부팅때 필요한 초기화 명령을 실행시키는 쉘 스크립트 화일 이다. 자신의 시스템에서 /etc/rc.local과 같이 다른 초기화 스크립트를 실행할 수도 있다. /etc/rc.local 은 대개 자신의 시스템에 호스트명(다음절 참고)을 설정하는 등의 특수한 초기화 명령을 포함한다. rc.local은 /etc/rc로부터 혹은 /etc/inittab에서 바로 실행될수도 있다. 4.10.2 호스트명 설정 네트워크로 연결된 환경에서, 호스트명은 특정 기계를 유일하게 식별하는데 이용되며 반면에, 고립된 환경에서 호스트명은 시스템의 성격과 특성을 제공해 준다. 애완동물의 이름을 짓는 것과 비슷하다; 그냥 "개"라고 하는 것보다는 Spot 이나 Woofie와 같은 이름을 짓는 것도 흥미로운 일이다. 시스템의 호스트명을 정하는 것은 hostname이란 명령을 쓰면 간단한 일이 다. 네트워크 상에 있다면, 호스트명은 goober.norelco.com과 같은 완전한 호스 트명이어야 한다. 어떤 형태의 네트워크에도 연결되어 있지 않 다면, loomer.vizza.com, shoop.nowhere.edu, floof.org등과 같이 임의의 호스트 명과 도메인명을 가져도 상관없다. 호스트명을 정하면, /etc/hosts화일에 나타나며, 각각의 호스트명에 대한 IP 주소가 할당된다. 비록 네트워크에 연결되어 있지 않더라도, /etc/hosts에 자신 의 호스트명을 가져야 한다. 예를 들어, TCP/IP 네트워크에 연결되어 있지 않다면, 단순히 다음 라 인을 /etc/hosts에 포함시키면 된다. 127.0.0.1 floof.org localhost 이는 호스트명 floof.org를 순환(loopback) 주소 127.0.0.1로 할당한다. localhost 별명도 이 주소로 할당된다. 그러나, TCP/IP 네트워크에 연결되어 있다면, 실제 IP 주소와 호스트명 이 /etc/hosts에 나타나야 한다. 예를 들어, 호스트명이 goober.norelco.com이 고 IP 주소가 128.253.154.31라면, /etc/hosts에 다음 라인을 추가하면 된다. 128.253.154.31 goober.norelco.com 호스트명이 /etc/hosts에 나타나지 않으면, 설정된 것이 아니다. 호스트명을 설정하려면, 간단히 hostname 명령을 사용하면 된다. 예를 들어, 다음 명령은 # hostname -S goober.norelco.com 호스트명을 goober.norelco.com로 설정한다. 대부분은 hostname 명령 은 /etc/rc 나 /etc/rc.local과 같은 시스템 스타트업 파일중 하나에서 실행된다. 이러한 두 화일을 수정해서 hostname 명령을 발견한 자리에 자신의 호스트들 을 설정해서 변경할 수 있다; 시스템을 다시 부팅하면 호스트명은 새로운 값 으로 설정될 것이다. 4.10.3 파일 링크 관리 링크는 하나의 파일에 대해서 여러 이름을 줄 수 있게 한다. 파일은 실제로 시스템에서 자신의 inode 번호에 의하여 식별되며, 이는 파일에 대한 유일한 파일시스템 식별자이다. 디렉토리는 실제로 해당 화일명을 가진 inode번호의 리스트이다. 디렉토리에 있는 각 파일은 특정 inode에 연결되어 있다. 4.10.3.1 하드 링크 ln 명령은 하나의 파일에 대하여 다중 링크를 생성할 때 사용된다. 예를 들 어, 한 디렉토리에 파일 foo를 가지고 있다고 하자. ls -i 명령을 사용하면, 이 화일에 대한 inode 번호를 볼 수 있다. # ls -i foo 22192 foo # 여기서, 파일 foo는 그 화일시스템에서 inode 번호 22192 를 가진다. foo 에 bar라는 이름의 또 다른 링크를 생성할 수 있다. # ln foo bar ls -i 를 해보면, 두 화일의 inode가 같다는 사실을 확인할 수 있다. # ls -i foo bar 22192 bar 22192 foo # 이제 foo나 bar중 어느 화일에 접근을 하더라도 같은 화일에 접근하게 된 다. foo의 내용을 변경하면, 이러한 변화는 bar에서도 일어난다. 어떠한 목적에 서도 이 두 화일은 같은 화일이다. 이러한 링크는 inode에 직접 링크를 생성하기 때문에 hard links라고 알려 져 있다. 하드 링크는 같은 파일시스템에 존재하는 파일에 대해서만 가능하지 만, 심볼릭 링크(아래 참조)는 이러한 제한을 가지지 않는다. rm 으로 파일을 삭제할 때, 실제로는 이 화일에 대한 하나의 링크만 삭제하 는 것이다. 다음 명령을 사용한다면 # rm foo 단지 foo 이름을 가진 링크만이 삭제되고 bar는 여전히 존재할 것이다. 실제 로 아무런 링크를 가지지 않을 때 비로소 화일은 시스템에서 삭제된다. 대개, 화일은 하나의 링크를 가지며 따라서 rm 명령을 사용하여 삭제된다. 하지만, 다중 링크를 가진 화일이라면, rm 명령은 단지 하나의 링크만을 삭제하는 것이 된다. 그 파일을 삭제하기 위해서는 그 파일에 연결된 모든 링크를 삭제해야 한다.명령 ls -l은 다른 정보를 포함하여 화일에 링크된 수를 나타내준다. # ls -l foo bar -rw-r--r-- 2 root root 12 Aug 5 16:51 bar -rw-r--r-- 2 root root 12 Aug 5 16:50 foo # 리스트의 두번째 칼럼의 "2"는 그 파일에 연결된 링크수를 나타낸다. 결국, 디렉토리는 실제로 link-inode 변환에 대한 정보를 포함한 하나의 화일 이다. 또한, 모든 디렉토리는 적어도 두개의 하드 링크를 가진다; "."(디렉토리 자신을 가리키는 링크)와 ".."(부모 디렉토리를 가리키는 링크). 루트 디렉토리(/) ".." 링크는 다시 / 를 가리키도록 되어있다. 10.4.3.2 심볼릭 링크 심볼릭 링크는 링크의 또 다른 형태로서, 위에서 기술한 하드링크와는 다르 게 동작한다. 심볼릭 링크는 한 화일에 대한 또 다른 이름을 가지게 하지 만, inode에 의해서 파일을 연결하지는 않는다. 명령 ln -s 는 어떤 화일에 대한 심볼릭 링크를 생성한다. 예를 들어, 다음 명령을 사용하면 # ln -s foo bar foo 파일을 가리키는 심볼릭 링크 bar를 생성하게 된다. ls -i 를 해보면, 두 화일이 정말 다른 inode를 가진다는 것을 알 수 있을 것이다. # ls -i foo bar 22195 bar 22192 foo # 그러나, ls -l를 해보면, bar 화일이 foo 화일을 가리키는 표시를 볼 수 있을 것 이다. # ls -l foo bar lrwxrwxrwx 1 root root 3 Aug 5 16:51 bar -> foo -rw-r--r-- 1 root root 12 Aug 5 16:50 foo # 심볼릭 링크에 있는 허가비트는 사용되지 않는다(항상 rwxrwxrwx로 나타난 다). 대신에, 심볼릭 링크에 대한 허가는 심볼릭 링크의 목표물의 허가에 의해 결정된다 (여기에서는 foo화일의 허가에 의해서) 기능적으로, 하드 링크와 심 볼릭 링크는 유사하지만, 몇 가지 차이점이 있다. 한가지는, 심볼릭 링크는 존 재하지 않는 화일에 심볼릭 링크를 생성하지만 하드 링크는 그렇지 않다. 심 볼릭 링크는 하드 링크와는 달리 커널에 의해서 처리된다. 기술적인 차이지만 때로는 중요한 것이다. 심볼릭 링크는 어떤 화일을 가리키는지 식별되지만 하 드 링크에서는 어느 화일이 같은 inode로 링크되었는지를 결정하기가 쉽지 않 다. 링크는 리눅스 시스템에 여러 곳에서 사용된다. 심볼릭 링크는 /lib에 있는 공유된 라이브러리 이미지에 있어서 특히 중요하다. 좀더 많은 정보를 위해서 는 4.7.2절을 참고하라. 4.11 긴급상황을 어떻게 대처할 것인가 어떤 경우에, 시스템 관리자는 루트 비밀번호를 잊어먹는다든가 파일시스템 을 손상시키는 등의 중대한 재난을 복구해야하는 문제에 당면하게된다. 하지 만 당황할 필요는 없다. 모든 사람은 어리석게도 실수를 하게 마련이며 더군다 나 이러한 방법이 시스템 관리에 대해서 확실하게 배울 수 있는 최선의 방법이 다. 리눅스는 UNIX와 같이 불안정한 버전이 아니다. 사실, 본인은 많은 플랫폼 상에서 상용 UNIX 버전이 가진 시스템의 불안정한 요소를 덜 가지고 있다고 본다. 또한 리눅스는 이러한 어떤 속박으로부터 벗어나 강력한 전문가적 재능 을 가지게 한다는 이점을 제공한다. 먼저여러분이 어떤 문제를 연구할 때 해야할 것은 스스로 처리하려고 시도하 는 것이다. 여기저기 뒤져서, 어떻게 동작하는지 알아야 한다. 많은 시간을 가 지고도, 어떤 시스템 관리자는 그 문제를 전혀 해결하려고 시도도 하지 않고 절망적인 변명을 늘어놓는다. 많은 시간을 투자하면, 스스로 문제점을 해결하 는 것이 실제로 매우 쉽다는 것을 알게 될 것이다. 이게 바로 도사가 되는 지 름길이다. 곤경에 처하더라도 시스템을 다시 인스톨해야하는 경우는 매우 드물다. 많 은 리눅스 초보사용자는 실수로 어떤 시스템 화일을 지우게 되며, 즉시 인스톨 디스크에 손이 가는 경향이 있다. 이것은 별로 좋지 못한 생각이다. 그런 비상 수단을 가지기 전에 먼저 문제점을 알아보고 다른 사람에게 도움을 청하는 것 도 좋은 생각이다. 대부분의 경우에, 시스템 유지보수디스크(boot/root 디스크)로 시스템을 복구할 수 있다. 4.11.1 유지/보수 디스크를 이용한 복구 시스템 관리자를 위한 한 가지 필수적인 도구는 소위 "boot/root disk"라고 불 리는 하드 디스크와 무관하게 완전한 리눅스 시스템을 부팅할 수 있는 플로피 이다. Boot/root 디스크는 사실 매우 간단하다-플로피 상에 루트 파일시스템을 만들고, 필요한 유틸리티를 넣고, LILO와 부팅가능한 커널을 설치하면 된다. 또 다른 방법은 커널용으로 하나와 루트 파일시스템용으로 또 하나를 사용하는 것이다. 어떻게 하든 결과는 같으며 플로피로 완전한 리눅스 시스템을 운영할 수 있다. boot/root 디스크의 표준적인 예는 바로 SLS의 a1 디스크이다. 이 디스크는 부팅가능한 커널과 루트 파일시스템 모두를 가지고 있다. 대개는 SLS를 설치할 때만 사용되지만, 시스템 유지를 위해서는 아주 유용하다. H.J Lu의 boot/root 디스크는 sunsite.unc.edu의 /pub/Linux/GCC에서 구할 수 있는 시스템 유지를 위한 또다른 디스크의 예이다. 그렇지 않고, 호기심이 있다면, 자신만의 boot/root 디스크를 만드는 것도 괜찮은 방법이다. 그러나, 대 개의 경우에는 이미 만들어진 boot/root 디스크를 사용하는 편이 훨씬 더 쉬울 것이며, 아마도 좀더 완벽할 것이다. boot/root 디스크를 사용하는 것은 매우 간단하다. 이 디스크로 시스템을 부 팅하고 root 로 로긴하기만 하면 된다(대개는 비밀번호가 없다). 하드 디스크의 파일에 접근하려면, 파일시스템을 직접 마운트해야 한다. 예를 들어, 명령은 # mount -t ext2 /dev/hda2 /mnt /mnt 디렉토리 하에 /dev/hda2에 대한 ext2fs 파일시스템을 마운트할 것이 다. / 는 boot/root 디스크 자체의 루트이며, 하드 디스크의 파일을 접근하려면 하드 드라이브 파일시스템을 마운트해야 한다. 그러므로, 루트 파일시스템을 /mnt 디렉토리에 마운트했다면, 하드 드라이브 상에 있는 /etc/passwd 화일은 현재는 /mnt/etc/passwd에 있게 된다. 4.11.2 루트 비밀번호의 복구 root의 비밀번호를 잊어먹었다고 해도 별로 문제되지 없다. boot/root 디스크 로 부팅하고 나서 루트 파일시스템을 /mnt에 마운트하고 나서, 다음과 같이 /mnt/etc/passwd 화일의 root에 대한 비밀번호 필드를 블랭크로 채워버리면 된 다. root::0:0:root:/:/bin/sh 이제 root는 비밀번호가 없다. 하드 디스크로 다시 부팅해서 root로 로긴하고 passwd 명령을 사용해서 비밀번호를 다시 설정하면 그만이다. vi 사용방법을 배운 것이 기쁘지 않은가? boot/root 디스크에는 Emacs와 같은 에디터는 아마 이용할 수 없겠지만, vi는 가능하다는 것이다. 4.11.3 망가진 파일시스템 복구 어쩌다가 파일시스템을 망가뜨렸다면, e2fsck(물론, ext2fs 파일시스템 타입을 사용하고 있다면)를 실행해서, 파일시스템에서 손상을 입은 데이터를 플로피로 부터 가져오든지 복구할 수 있다. 다른 파일시스템 타입은 e2fsck명령과는 다른 형태의 명령을 사용한다. 자세하게는 4.8절을 참고하라. 플로피에서 하드 디스 크의 파일시스템을 검사할 때는 파일시스템을 마운트하지 않는 것이 좋다. 4.11.4 잃어버린 화일 복구 시스템의 중요한 파일을 지워버렸다면, 그것들을 "undelete"할 방법이 없다. 그러나, 플로피에서 해당화일을 찾을 수 있다면, 그 파일을 하드 디스크로 복사 하면 될 것이다. 예를 들어, 시스템에서 /bin/login을 지워버렸다면, 간단히 boot/root 플로피로 부팅하고 루트 파일시스템을 /mnt 에 마운트하고 나서 다음 과 같은 명령을 하면 될 것이다. # cp -a /bin/login /mnt/bin/login 여기서 -a 옵션은 복사되는 화일의 허가를 그대로 유지하라는 의미이다. 물론, 지워진 화일이 boot/root 플로피에도 없는 필수적인 시스템 화일이 아 니라면, 운이 나쁜 것이다.백업을 받아두었다면, 백업으로 복구하면 되겠지만... 4.11.5 망가진 라이브러리 복구 라이브러리나 /lib와 심볼릭 링크된 파일들이 망가졌다면, 그런 라이브러리와 관련된 유사한 명령들은 더이상 실행될 수 없다.(4.7.2절 참고). 가장 쉬운 해 결책은 boot/root 디스크로 부팅해서 루트 파일시스템을 마운트하고 나서 /mnt/lib 디렉토리에서 라이브러리를 고치는 것이다. 제 5 장 발전된 특징 이 장에서는 Linux에 관한 보다 흥미 있는 특징들을 소개할 것이다. 이 장에 서는 독자가 적어도 유닉스를 사용해본 경험이 있고, 이 앞장에 포함된 정보 를 이해한다고 가정한다. 다른 UNIX로 부터 Linux를 구별 하게 하는 가장 중요한 사항은 리눅스의 개방설계 와 그 철학이다. 리눅스는 단일 목적을 가진 마케팅 위원회를 중심으 로 한 소규모 프로그래머들에 의해 개발된 것이 아니다. 자신들의 유닉스 시 스템에 원하는 기능을 첨가하는 발전적인 해커 그룹에 의해서 개발되었다. 리 눅스의 세계에서는 많은 형태의 소프트웨어가 있어서 설계에 있어서도 다양 하다. 어떤 사람들은 정해진 표준이 없기에 꺼려하지만, 사실은 이러한 점이 리눅스를 가장 돋보이게 하는 특성중의 하나이다. 5.1 X Window의 시스템 X window system은 거대하고 강력한(다소 복잡한) UNIX 시스템을 위한 그 래픽환경이다. 원래의 X window code는 MIT에서 개발됐다; 그 후에, 상업적 회사들이 X 를 UNIX 플랫폼에서의 산업표준으로 만들었다. 사실상 세계의 모 든 워크스테이션에서 약간씩 상이한 X window 들이 동작한다. 80386/80486 유닉스 시스템에서 MIT의 X window 버전 11 relase 5(약칭 X11R5)의 이식은 David Wexelbalt를 중심으로 한 프로그래머 집단에 의해서 개발되었다. XFee86이라고 알려진 이판(X11R5)은 리눅스를 포함한 V/386, 386BSD, i386 유닉스 시스템에서 돌아간다. XFree86에는 필요한 모든 실행화 일, 각종 하드웨어 지원 화일과 라이브러리 그리고 개발도구들을 모두 포함하 고 있다. X window system를 구성하고 사용하는 방법은 이 책의 범위를 넘는 것이 다.구성과 사용법은 Valerie Quercia and Tim O'Reilly가 쓴 "The X Window System User's Guide"을 읽어보기 바란다. 부록 A를 보면 그 책에 대한 정보가 있다. 이 절에서는 리눅스에서의 X window 설치와 구성에 대한 일반적인 개요에 대한 것이며 완벽하지는 않다. 좀더 자세한 정보는 Linux X Window 배포에 포함된 man pages와 Readme 을 참고하면 도움이 될 것이다. Liniux XFree86 HOWTO(자세하게는 부록 A 참조)에 리눅스에서 X window 인스톨하고 환경을 설정하는 등에 대한 논의를 포함한다. 관심 있는 독자는 이 문서를 참조하면 될 것이다. 5.1.1 하드웨어 요구사항 Xfree86은 다양한 종류의 비디오 컨트롤러와 모니터를 지원한다. Xfree86 2.0에서는 다음의 SVGA 칩셋을 지원한다. Nonaccelerated chipsets: Tseng ET3000,ET4000AX, ET4000/W32; Western Digital/Paradise PVGA1; Western Digital WD90C00, WD90C10, WD90C11, WD90C30; Genoa GVGA; Trident TVGA8800CS, TVGA8900B, TVGA8900C, TVGA8900CL, TVGA9000; ATI 28800-4, 28800-5, 28800-a; NCR 77C22, 77C22E; Cirrus Logic GLGD5420, CLGD5422, CLGD5424,CLGD6205, CLGD6215, CLGD6225, CLGD6235; Compaq AVGA; OAK OTI067, OTI077. Accelerated chipsets: Cirrus CLGD5426, CLGD5428; Western Digital WD90C31. 이들 칩들은 256 칼라만 지원하는 ATI와 Grrus 칩을 제외하고는 모두 256 칼라와 흑백 모드를 지원한다. ET 4000/W32는 ET4000 계열로 지원되 며,accelerated 기능은 사용되지 않는다. 흑백 모니터 서버 또한 일반적인 VGA 카드(단일뱅크로 비디오 메모리의 64K를 사용), 허큘레스 및 현대 HGC-1280 카드를 지원한다. XFree86-2.0은 다음과 같은 accelerated 칩셋을 지원하기 위하여 별개의 서 버를 가진다; S3 86C911, 86C924, 86C801, 86C805, 86C928; ATI mach8; ATI mach32; and IBM 8514/a. 그러나 다음과 같은 칩들은 지원하지 않는다.; Weitek P9000, TIGA, IIT AGX, Microfield, 기타. 이들 중 일부는 미래의 XFree86 개정판에서 지원할 것 이다. TIGA는 TI사가 라이센스(와 소스배포를 허가하지 않음)를 요구하는 한 결 코 지원되지 않을 것이다. Microfileld 보드 또한 알려지지 않은 microcode 인 터페이스를 사용하는 한 결코 지원되지 않을 것이다. Diamond 社의 비디오 카드도 문제시된다. 다음은 Diamond 社의 그래픽 카 드에 관한 XFree86 Core Team의 발표문이다. "모든 Diamond 카드는 XFree86에 지원되지 않는다. 심지어 지원되는 칩셋 을 가지고 있더라도(내부 클럭 발생기를 가지고 있는 Cirrus 칩셋을 제외한). 이러한 이유는 Diamond 사가 픽셀 클럭 주파수를 선택하는데 사용되는 메커 니즘을 바꾸었기 때문이며, 비공개하에 프로그래밍 정보를 노출할 수만 있기 때문이다. 우리가 이렇게 밖에 할 수 없는 이유는 소스가 제공될 수 없기 때문 이며,이에 대해서 Diamond 社와 논의를 해왔다. 하지만, 그들은 이러한 정책을 바꾸려고 하지 않는다. 그러므로, 앞으로도 Diamond 社의 제품이 지원되지 않 을 것이다. XFree86은 Diamond 사의 하드웨어를 지원하지 않는다. 몇몇 가 능한 것도 있지만, 이것을 하도록 도와줄 수가 없다." 리눅스는 또한 Local bus를 지원한다. 리눅스 하에서 XFree86를 설치하려면 적어도 8M RAM과 ET4000 VESA Local bus 비디오 카드를 가진 486을 제 안한다. 이것은 일반적인 하드웨어 구성이며 굉장히 빠르다. 물론 로컬 버스 비디오 카드를 사용하려면 VESA 로컬방식의 마더보드를 가지고 있어야 한다. 필 자는 486/50MHhz에 8M RAM에서 XFree86을 작동 시킨다. 이것은 UNIX 와 X가 돌아가는 대부분의 칼라 워크스테이션만큼 빠르거나 더 빠르다. 여러분은 적어도 4M의 물리적 RAM과 16M의 가상 RAM(예를 들어, 8M 물 리적 RAM과 8M의 스왑)이 필요하다. 당연히 물리적 RAM이 빠르다. 물리적 RAM이 4M인 시스템은 8M 또는 그이상의 RAM이 있는 것보다 (10배 이상) 훨 씬 느리다. 게다가, 스와핑은 너무 느려서 물리적 RAM의 부족을 대신하지는 못한다. 따라서, 적어도 8M RAM을 가질 것을 제안한다. 5.1.2 소프트웨어의 요구사항 XFree86-2.0을 사용하려면 , 커널 버전 0.99 p12 혹은 그 이상이 필요하다. 또한 설치된 라이브러리는 버전 4.4.1보다 높아야 한다. 그리고 Id.so 버전은 1.3 이거나 더 최신의 것이어야 하다. Id.so는 새로운 라이브러리 개정판에서 사용되는 runtime용 공유 동적 링커이다. XFree86.20은 적어도 17M 디스크 공간을 요구한다. 서버 링크킷까지 설치하 려면 적어도 21M의 공간은 있어야 한다. 물론 이러한 수치는 man page와 같은 XFree86에 함께 있는 "optional" 패키지들을 설치하지 않는다면 상당히 줄 어들 것이다. 5.1.3 XFree86 설치 XFree86의 리눅스 실행화일 배포판은 여러 리눅스 FTP 사이트에서 발견 된다. sunsite.unc.edu에서는 /pub/Linux/X11/XFree86-2.0 디렉토리에서 발견할 수 있다. (이 글이 쓰여진 때 가장 최근 판은 2.0이며, 새로운 버전이 주기적으 로 발표된다.) 이러한 실행화일 배포판에는 gzip으로 압축된 tar 형태의 많은 화일로 구성되며, 모두 / 에서 풀어야 한다. 설치는 매우 간단하다; 이들 tar화 일을 풀면 모든 것이 올바른 장소에 들어갈 것이다. 여러분은 클라이언트 프로그램과 지원화일은 물론 적어도 이들 서버중의(대 문자 XF86"으로 시작하는 화일) 하나는 있어야 한다. 선택적인 화일은 다음 과 같이 표시되어 있다. -------------------------------------------------------------------------------------------------------------- ------- Package Name Description -------------------------------------------------------------------------------------------------------------- ------- XF86_SVGA.tar.gz An SVGA server (most chipsets use this) XF86_8514.tar.gz An accelerated server for cards using IBM8514 chips XF86_Mach32.tar.gz An accelerated server for cards using Mach32 chips XF86_Mach8.tar.gz An accelerated server for cards using Mach8 chips XF86_Mono.tar.gz A Monochrome server XF86_S3.tar.gz An accelerated server for cards using S3 chips XF86_VGA16.tar.gz An experimental server for 16 colour graphics modes xf86-svr-2.0.tar.gz All of the above servers xf86-bin-2.0.tar.gz Client programs (required) xf86-lib-2.0.tar.gz Dynamic libraries,bitmaps and minimal fonts(required) xf86-cfg-2.0.tar.gz XDM configuration files and chooser (optional) xf86-fnt-2.0.tar.gz All of the fonts(optional,but required for some apps) xf86-kit-2.0.tar.gz Linkkit for building your own X servers (optional) xf86-man-2.0.tar.gz Manual pages (both client + programmer, optional) xf86-pex-2.0.tar.gz PEX libraries and sample clients (optional) xf86-prg-2.0.tar.gz Static libs,dynamic stubs,configs and include file xf86-doc-2.0.tar.gz Documentation and release notes for XFree86 2.0 xf86-doc2-2.0.tar.gz Extra documentation (optional) -------------------------------------------------------------------------------------------------------------- ------ 설치방법은 XFree86-HWOTO에 실려있다; 반드시 /에서(root로서) 풀어야 한 다. 이 소프트웨어를 인스톨한 후, /usr/X386/lib와 /lib의 공유 라이브러리를 링 크해야 한다. 이것을 하는 한 가지 방법은 다음의 명령을 사용하는 것이다. # ln -s /usr/X386/lib*.so.? /lib 대신에 물리적으로 화일들을 복사해도 되지만, 이 단계는 새로운 XFree86배 포판에서는 불필요 할 수도 있다. 더 자세한 정보는 이 개정판에 제공된 문서 들을 참고하면 될 것이다. 만약 SLS나 slackware 같은 표준 리눅스 배포판에 XFree86을 설치했다면, 이미 그 화일 모두가 올바른 위치에 있을 것이다. 만약 SVGA 칼라 서버를 사용하기를 원한다면, 화일 /usr/bin/X11/X는 /usr/bin/X11/XF86_SVGA 화일 과 링크시켜야 한다. 대신, 흑백 서버를 사용하기를 원한다면 다음 명령으로 이 화일을 XF86_MONO와 링크시켜야 할 것이다. # ln -sf /usr/bin/X11/XF86_MONO /usr/bin/X11/X 다른 서버를 사용한다고 하더라도 같은 방법을 사용하면 된다. 5.1.4 XFree86의 구성(환경설정) XFree86의 설치는 대부분의 경우 어렵지 않다. 단지 하드웨어가 비표준일 경 우에만 XFree86 구성시 몇가지 문제가 발생할 것이다. XFree86의 구성은 이 문서의 범위를 넘는다. 여기서는 어떻게 작업하는가에 대한 간단한 개요를 담 고 있다. XFree86의 구성에 대한 자세한 논의는 XFree86-2.0에 포함된 (xf86-doc-2.0.tar.gz 화일에) Readme.Config에서 찾아볼 수 있다. 시스템 구성 에 대한 자세한 정보를 원한다면 이 화일을 참고하기 바란다. 그 외에, 설치한 서버(XF86_SVGA같은), XFree86, Xconfig에 대한 man pages를 읽어야 한다. manpages에는 환경설정 화일에 대한 유용한 모든 선택사항이 기술되어 있다. XFree86설치의 주된 화일은 /usr/lib/X11/Xconfig이다. 이 화일은 마우스, 비디 오 카드, 그 밖의 정보가 들어있다. Xconfig.sample에는 XFree86의 Xconfig 예제를 담고 있다. XFree86의 man pages에서 이 화일에 대해 자세하게 설명 하고있다. 일반적으로 여기서는 어떻게 작동하는가에 대해서 설명할 것이다.여러분은 비디오 카드 클럭 주파수인 많은 수의 "dot clocks"을 조종할 수 있다. 또한, 각 도트 클럭은 640x480 or 1024x768 같은 해상도와 관계가 있다.(보는 바와 같이, 표준 해상도를 사용할 필요는 없다.) Xconfig 화일에는 마우스, 키보드 등을 설정하는 절이 있다. 또한 각 서버에 대한 절이 존재한다; SVAG 서버에 대한 VGA256, 흑백 서버에 대한 vga2, 그리고 기타 등등. 각 서버에 대한 절 아래에는 가상 해상도, 칩 형태, 그 밖에 비디오 카드에 대한 것을 정의하는 라인이다. MODE 라인은 여러분의 비디오 카드에서 가 능한 mode을 지정한다. 주로 Modes 다음에 해상도가 따라온다. 예를 들어, Modes "640x480" "800x600" "1024x768" 이 라인의 각 모드는 Xconfig의 마지막 부분에 있는 ModeDB에 대한 인덱 스이다. modeDB 절은 각 mode에서 실제 비디오 카드에 대한 인자를 결정하 는 화일의 부분이다. 또한, 여러분의 비디오 카드에서 사용 가능한 도트 클럭을 설정하여 사용할 수 있는 Clocks 라인이 있다. 디폴트로 XFree86은 구동시간에 클럭을 결정할 것이다; 그러나, 클럭 타이밍이 시스템에서 실행중인 다른 프로그램에 의하여 벗어날 수도 있기 때문에, Xconfig 화일에서 클럭을 설정해주는 것이 쉽다. Xfree86 화일에서 ModeDB절은 가장 중요한 부분이다. 각각의 카드와 모니 터들은 다른 해상도에 대한 고유의 타이밍 집합과 동기 주파수를 가 진다. /usr/lib/X11/etc/modeDB.txt는 몇 가지 알려진 모니터와 비디오 카드 타 이밍 수에 대한 데이터베이스를 포함하고 있다. 대부분의 카드와 모니터는 예제Xconfig 화일에 있는 VESA 표준 타이밍을 사용한다. /usr/lib/X11/etc 디렉토리에는 여러분이 읽어야 하는 다양한 다른 문서가 있 다. 만약 modeDB.txt 에서 타이밍 주파수를 얻을 수 없다면, Video Modes.txt 에서 여러분이 가지고 있는 모니터의 주파수 타이밍에 대한 해킹을 할 수 있 는 방법이 있다. sunsite.unc.edu의 /pub/Linux/X11/Xconfig.tgz 화일에 Xconfog 화일에 대한 예제가 수집되어 있다. 또한 XFree86의 man pages에도 많은 정 보가 있다. ◇ Xconfig 화일 설정시 주의를 요한다. 만약, 모니터가 지원하는 것보다 높은 주파수를 선택한다면, 모니터에 손상을 입힐 수도 있다. 높은 클럭 주파수에서 조정하기 전에, 여러분의 모니터에 대한 매뉴얼을 찾아보아야 할 것이다.만약 여러분이 가지고 있는 비디오 하드웨어가 어떤 종류인지 확실하지 않다면, /usr/bin/X11/SuperProbe 프로그램을 실행해서, 비디오 하드웨어에 대한 검사 를 하면 될 것이다. 그렇지만, SuperProbe가 항상 올바르게 찾아주는 것은 아 니다. 따라서, 이러한 결과를 완전히 믿기 전에 매뉴얼과 상식을 동원해야 할 것이다. 또한, SuperProbe는 Xfree86-2.0가 지원하는 하드웨어보다 더 많은 것을 검색할 수 있다는 것이다.다시 말하지만, 설치에 관한 완벽한 정보는 linux Xfree86-HWPTO 에서 참고하기를 바란다. 5.1.5 X 구동 Xconfig 화일 수정후, startx 명령어로 서버를 구동할 수 있다. 그러나, 먼저 고려해야할 몇 가지 사항이 있다. 여러분의 경로에 /usr/bin/X11 디렉토리가 있는지 확인하라. 이 디렉토리는 모든 X 실행 화일과 서버 자체를 포함한다. 그 다음, X 서버는 VC 전환이 가 능한 하나의 자유로운 VC를 요구한다. 다시 말해서, login 프로세스가 가동되지 않은 이용 가능한 VC 중 하나를 가지고 있어야 한다. 이 것을 보증할 수 있는 가장 쉬운 방법은 /etc/inittab을 편집하여, 각 VC에 설정되어 있는 login 프로세스를 구동하는 getty 라인중의 한 라인 을 지우는 것이다. 예를 들어, 본인의 inittab에는 /dev/tty1에서 /dev/tty7 (즉,1에 서 7까지의 VC만 사용)까지 getty를 사용하며, /dev/tty8은 남겨 두었다.startx를 실행하면 $HOME/.Xinitrc 화일이 읽혀진다. 이 화일은 X서버가 작동된 다음부 터 실행될 명령어가 담겨져 있는 shell script 화일이다. 만약 이 화일이 존재 하지 않으면, /usr/lib/X11/xinit/xinitrc가 위의 화일 대신에 기본적으로 사용된다. 이 화일을 .xinitrc의 샘플로 사용해도 될 것이다. X-window를 사용에 관한 것은 너무 큰 주제이며, 여기에서 모두를 설명할 수는 없다. 더 자세한 것은 X 사용에 관한 다른 책이나 "The X window System User's Guide"를 읽어야 할 것이다. 이 책에 대한 정보는 부록 A를 보 라. 5.1.6 X 끝내기 대개는, .xinitrc에서 구동되는 마지막 클라이언트가 완전히 X를 종료시키는 데 사용된다. 예를 들어, .xinitrc 안에 있는 마지막 명령어가 exec twm 이면, twm 프로세스를 죽이는 결과로 X를 끝내게 될 것이다. 하지만, X 서버를 즉 시종료 시킬 필요가 있다면, ctrl-alt-backspace 키의 조합을 사용하면 될 것이 다. 5.1.7 MS-DOS 화일 접속 어떤 이유에서든 MS-DOS 화일에 접근할 필요가 있다면, 리눅스 상에서 매 우 간단히 할 수 있다. MS-DOS 화일에 접근할 수 있는 일반적인 방법은 리 눅스 하에서 MS-DOS 파티션이나 플로피를 마운트하는 것이며, 파일시스템을 통하여 직접 접근할 수 있다. 예를 들어, /dev/fd0에 MS-DOS용 플로피가 있다면, 다음의 명령어는 #mount -t msdos /dev/fd0 /mnt /mnt에 플로피를 마운트할 것이다. 플로피 마운트에 대한 더 자세한 정보는 4.6.2절을 참고하라. 또한 리눅스 상에서 하드 디스크의 MS-DOS 파티션을 마운트 할 수 있다. MS-DOS 파티션이 /dev/hda1이라면, 다음 명령은 # mount -t msdos /dev/hda1 /mnt MS-DOS 파티션을 /mnt로 마운트할 것이다. 사용이 끝났을 때 반드시 그 파 티션을 umount 명령을 사용하여 unmount해야 할 것이다. /etc/fstab 화일에 이 에 대한 항목을 포함시키면 부팅때 자동으로 MS-DOS 파티션을 마운트 할 수 도 있다; 4.8절을 참고하라. 예를 들어, /etc/fstab 화일의 다음 명령은 부팅때 /dos 디렉 토리에 /dev/hda1에 있는 MS-DOS 파티션을 마운트할 것이다. /dev/hda1 /dos msdos defaults Mtools 소프트웨어 또한 MS-DOS 화일에 접근하는데 사용될 수 있다. 예를 들어, mcd, mdir, mcopy 등은 MS-DOS 명령어처럼 동작한다. 만약 Mtools들 을 설치하였다면, 이들 명령어에 대한 이용 가능한 man page가 있을 것이다. MS-DOS 화일들에 접근하는 것과 리눅스에서 MS-DOS 용 프로그램을 실행 하는 것은 별개의 것이다. 이를 위하여 리눅스 환경 하에는 MS-DOS Emulator 가 있으며, 심지어 SLS 배포판에서도 이용 가능하다. 다양한 Linux FTP 사이 트를 포함하여 많은 장소에서 찾을 수 있다(부록 C에 자세히 나와 있다). MS-DOS 에뮬레이터는 리눅스 상에서 Wordperfect를 포함한 여러 가지 응용 프로그램들을 실행할 정도로 강력하다. 하지만, 리눅스와 MS-DOS는 완전히 다 른 운영체제이며, UNIX하의 어떠한 MS-DOS 에뮬레이터라도 한계가 있다. 게 다가, X-WINDOW 상에서 돌아가는 Microsofr Windows 에뮬레이터가 개발 진 행중이다. 뉴스그룹과 FTP 사이트에서 보다 더 자세한 정보를 얻을 수 있을 것이다. 5.2 TCP/IP을 사용한 통신 Linux는 TCP/IP(Transport Cotrol Protocol/Internet Protocol)통신 규약을 완벽 하게 구현하고 있다. TCP/IP는 전세계의 컴퓨터를 네트워크로 연결한 가장 성공적인 메커니즘이다. 리눅스와 이더넷 카드를 가지고 있다면, 여러분의 시 스템을 LAN(local area network)혹은 인터넷-전세계에 연결된 TCP/IP 통신망 에 네트워크로 연결 될 수 있다. UNIX에서 작은 LAN을 접속하는 것은 쉽다. 간단하게 각 컴퓨터에 이더넷 컨트롤러와 적당한 이더넷 케이블과 기타하드웨어만 있으면 된다. 혹은, 여러 분의 회사나 대학에서 인터넷에 접근할 수 있다면, 여러분의 Linux 시스템을 이 러한 네트워크에 쉽게 연결할 수(dial-up) 있다. 또한, Linux TCP/IP는 SLIP(Serial line internet Protocol)을 지원한다. SLIP은 모뎀을 사용하여 인터넷에 연결될 수 있도록 한다. 만약 여러분의 회 사나 대학에서 SLIP에 접근을 제공한다면, SLIP 서버에 연결하여(dial-in)하여 전화선을 통하여 인터넷에 여러분의 시스템을 연결할 수 있다. 또한, 여러분의 리눅스 시스템에 인터넷에 접근할 수 있는 이더넷카드를 가지고 있다면, 시스 템을 SLIP 서버로 구성할 수도 있다. Linux상에서 TCP/IP설치에 대한 완벽한 정보 얻으려면, sunsite.unc.edu 로 부터 익명의 FTP 통해서 입수할 수 있는 Linux NET-2 HOWTO를 읽기를 권한다. NET-2 HOWTO는 리눅스 상에서 SLIP와 이더넷 설치를 포함한 완벽한 TCP/IP치에 관한 도움을 준다. Linux Ethernet HOWTO는 리눅스 상에서 다양 한 이더넷 카드의 설치에 대해 기술한 관련 문서이다. 리눅스 문서 프로 젝트 중 리눅스 Network Administrator's Guide 또한 TCP/IP에 대해 알 수 있으 며, 이들 문서에 대한 더 많은 정보는 부록 A를 참고하라. Craig Hunt가 쓴 TCP/IP Nwtwork Administration 이라는 책 또한 흥미 있으 며, 이 책은 UNIX상에서 TCP/IP의 설치와 사용에 관한 완벽한 정보를 담고 있다. 5.2.1 하드웨어 요구사항 별다른 Networking 하드웨어 없이도 즉시 Linux TCP/IP을 사용할 수 있다 -"loopback" 모드를 이용하면 자신과 대화할 수 있다. 이것은 "loopback" 네트워크 디바이스를 사용하는 몇몇 응용프로그램과 게임에서 필요하다. 그러나, Ethernet TCP/IP를 가진 Linux를 사용하고자 한다면, 다음 이더넷 카드 중에서 하나가 필요하다; 3com 3c503, 3c503/16; Novell NE1000, NE2000; Western Digital WD8003, WD8013; Hewlett Packard HP27247, HP27250. 다음 계열은 작동한다고 보고되었다; WD-80x3 계열; LANNET LEC-45; NE2000 계열; Alta Combo, Artisoft LANtastic AE-2, Asante Etherpak 2001/2003, D-Link Ethernet II, LTC EFD490 EtherBoard 16, D-Link DE-600, SMC Elite16. Linux Ethernet HOWTO를 보면, 리눅스 이더넷 하드웨어 호환에 대한 보다 자세한 정보를 얻을 수 있을 것이다. 리눅스는 또한 SLIP을 지원하며, 이는 여러분이 모뎀을 사용하여 전화선을 통하여 인터넷에 접근할 수 있도록 해준다. 이와 같은 경우에, 여러분은 SLIP와 모뎀이 호환이 되어야 한다-대부분의 서버는 14.4bps V.32vis 모뎀을 요구한다. NET-2 HOWTO 는 SLIP에 대한 완전한 정보를 담고 있다. 5.3 UUCP를 이용한 네트워킹 UUCP(UNIX-to-UNIX Copy)는 UNIX 시스템간의 정보전송을 위해 사용된 오래된 방법이다. UUCP를 사용함으로써, 다른 시스템에 모뎀을 통하여 접속해 서, 메일을 주고받는다든지, 새로운 문서 및 화일 등을 전송할 수 있다. TCP/IP나 SLIP에 접근할 수 없다하더라도, UUCP를 사용하여 전세계 어느 곳 이라도 통신할 수 있다. 대부분의 메일/뉴스 소프트웨어(5.4절과 5.5절 참고) 는 다른 시스템으로 정보전송을 위하여 UUCP를 사용할 수 있도록 구성되어 있다. 사실, 가까이에 접속할 수 있는 인터넷 사이트가 있다면, 그러한 사이트 로부터 UUCP를 통하여 자신의 리눅스 시스템으로 인터넷 메일을 보낼 수 있 다. Linux Network Administrator's Guide는 리눅스 하에서 UUCP를 구성하고 사 용하는 방법에 대한 자세한 정보가 포함되어 있다. 또한, sunsite.unc.edu 에anonymous(익명의) FTP 를 통하여 구할 수 있는 리눅스 UUCP HOWTO를 읽어볼 수 있다면 도움이 될 것이다. UUCP에 대한 또 다른 정보는 Tim O'Reilly 와 Grace Todino가 쓴 Managing UUCP and USENET이란 책을 참 고하면 되겠다. 좀더 많은 정보는 부록 A를 찾아보라. 5.4 전자 우편 대부분의 UNIX 시스템과 마찬가지로, 리눅스는 전자우편을 사용하기 위한 많 은 종류의 소프트웨어 패키지를 제공한다. 전자우편은 Local(즉, 자신의 시스템 내의 사용자들 에게만 메일을 주고받을 수 있다.)일수도 있으며, Networked (즉, TCP/IP나 UUCP를 사용하여 네트워크상의 다른 시스템에 있는 사용자에 게 메일을 주고받을 수 있다.) 일수도 있다. 전자우편 소프트웨어는 대게 두 부분, mailer와transport로 구성된다. mailer는 사용자 수준의 소프트웨어로 서 실제메일을 작성하고 읽고 하는데 사용된다. 가장 대표적인 mailer는 elm과 mailx를 들 수 있다. Transport는 저 수준 소프트웨어로서, 지역적 혹은 원격지 로의 실제 우편배달을 담당하게 된다. 사용자는 이러한 transport 소프트웨어 를 외부에서 전혀 볼 수 없으며, 단지 mailer를 통하여 접촉하게 된다. 하지만, 시스템관리자에게 있어서 transport 소프트웨어에 대한 개념을 이해하고, 구 성하는 방법을 아는 것은 중요한 일이다. 리눅스용으로 가장 일반적인 transport 소프트웨어는 Smail이다. 이 소프트웨 어는 구성하기 쉽고, 지역적 혹은 TCP/IP 통한 원격지에 전자우편을 보낼 수 있다. 보다 강력한 sendmail transport가 대부분의 UNIX 시스템에서 사용되지 만, 너무 복잡하여 대부분의 리눅스 시스템에서는 사용하지 않고 있다. 리눅스 Mail HOWTO 로부터 메일 소프트웨어에 관한 더 많은 정보와 자신 의 시스템에 구성하는 방법에 대하여 알 수 있다. 원격지로 메일을 주고 받을 계획이라면, 자신의 시스템이 네트워크에 어떻게 연결되었는지에 따라 TCP/IP 나 UUCP를 이해할 필요가 있다(5.2절과 5.3절 참고). 부록 A에 제시된 UUCP 와 TCP/IP에 관한 문서를 보면 도움을 얻을 수 있을 것이다. 대부분의 리눅스 메일 소프트웨어는 sunsite.unc.edu의 /pub/Linux/system/Mail 디렉토리에서 anonymous(익명의) FTP를 통하여 찾아볼 수 있다. 5.5 뉴스와 뉴즈넷 리눅스는 또한 전자뉴스를 관리하기 위한 많은 기능을 제공한다. 자신의 시스 템에 지역 뉴스서버를 설치하여, 사용자들이 다양한 뉴스그룹으로 아주 생동감 있게 문서를 보낼 수도 있다. 또한, TCP/IP나 UUCP 네트워크로 접근할 수 있다면, 전세계의 네트워크 뉴스 서비스인 USENET에 참가할 수 있다. 뉴스 소프트웨어는 두 부분, server와 client가 있다. 뉴스 서버는 뉴스그룹을 조정하고 다른 시스템으로(network에 연결되어 있다면) 문서를 배달하는 것을 다루는 소프트웨어이다. 뉴스 클라이언트 혹은 newsreader는 사용자가 뉴스를 읽고 부칠 수 있도록 서버와 통신하는 소프트웨어이다. 리눅스용으로 이용가능한 몇 가지 형태의 뉴스서버가 있다. 이들 모두는 같은 프로토콜과 설계방식을 따른다. 두 가지 기본적인 버전은 "C News" 와 "INN"이다. 또한, rn과 tin과 같은 많은 종류의 newsreaders가 있다. newsreader 의 선택은 다소 흥미 있는 문제이다; 모든 newsreader는 다른 버전의 서버 소 프트웨어와 동일하게 작동해야 한다. 즉, newsreader는 서버 소프트웨어와 혹 은 그 반대로도, 독립적이다. 단순히 지역적으로 news를 운영하려고 한다고 하더라도(USENET의 부분으 로서가 아니라)사용자들을 위해서 newsreader를 설치하는 것은 물론 시스템에 뉴스서버를 운영할 필요가 있을 것이다. 뉴스서버는 문서들을 /usr/spool/news 디렉토리에 저장할 것이며, newsreader는 이러한 디렉토리에서 뉴스문서를 찾 아 편집을 할 것이다. 그러나, 네트워크를 통한 뉴스를 운영하고자 하면, 여러분에게 몇 가지 옵션 이 열려 있어야(주어져 있어야)한다. TCP/IP 네트워크 기반 뉴스는 NNTP(Network News Trans-mission Protocol)로 알려진 프로토콜을 사용 한다. NNTP는newsreader가 네트워크를 통하여 원격 시스템 상에 있는 뉴스 를 읽을 수 있도록 한다. 또한, NNTP는 뉴스서버가 네트워크를 통하여 서로 다른 newsreader에게 문서를 보낼 수 있게 한다. 이것은 USENET이 기반을 둔 소프트웨어이다. 대부분의 회사 및 대학은 하나 이상의 NNTP 서버를 가지 며, 그 사이트에 대한 모든 USENET 뉴스를 다루도록 설정되어 있다. 그 사 이트에 있는 모든 다른 기계는 NNTP 서버를 통한 네트워크를 통해서 newreader가 뉴스를 읽고 부칠 수 있도록 NNTP 기반에서 운영된다. 이것은 NNTP 서버만이 실제로 새로운 문서를 디스크에 저장한다는 것을 의미한다.여 기에 몇 가지 가능한 뉴스 구성에 대한 지침이 있다. * 지역적으로 뉴스를 운영한다. 즉, 네트워크에 연결되어 있지 않거나 네트워 크를 통한 뉴스를 운영하기를 원하지 않는다. 이러한 경우에 여러분의 기계에 C News나 INN을 운영하며, newsreader가 지역적으로 뉴스를 읽도록 설치한 다. * 여러분은 TCP/IP 네트워크와 NNTP 서버를 가지고 있어야 한다. NNTP 뉴스서버를 설치했다면, NNTP 기반 newreader를 설치함으로써 리눅스 시스템 으로부터 뉴스를 읽고 부칠 수 있다. (대부분의 newsreader는 지역적으로 혹은 NNTP를 사용하여 운영되도록 구성될 수 있다.) 이러한 경우에 여러분은 여러 분의 시스템에 뉴스 서버를 설치하거나 뉴스를 저장할 필요가 없다. newsreader는 네트워크를 통하여 뉴스를 읽고 부칠 수 있다. 물론, TCP/IP를 가져야 하며, 네트워크에 접근할 수 있어야한다. (5.2절 참고) * TCP/IP 네트워크에 접근할 수 있지만 NNTP 서버가 없다. 이러한 경우, 여 러분은 NNTP 뉴스서버를 자신의 리눅스 시스템에 실행할 수 있다. 당신은 지 역적인 혹은 NNTP 기반의 newsreader를 설치할 수 있고, 서버는 당신의 시 스템에 뉴스문서를 저장할 것이다. 게다가, 서버를 다른 NNTP 뉴스서버와 통 신하여 뉴스 문서를 전송할 수 있도록 구성할 수 있다. * UUCP를 사용하여 뉴스를 전송하기를 원한다. 여러분이 UUCP에 접근할 수 있다면(5.3절 참고), 여러분은 또한 USENET에 참가할 수 있다. 당신은 (지 역) 뉴스서버와 newsreader를 설치할 필요가 있다. 게다가, UUCP 소프트웨어 가 주기적으로 뉴스를 다른 가까운 UUCP시스템(news feed로 알려진)으로 전 송할 수 있도록 구성할 것이다. UUCP는 뉴스를 전송하기 위하여 NNTP를 사용하지 않는다. UUCP는 뉴스를 전송하기 위하여 자신의 방법을 사용한다. 대부분의 뉴스 서버와 newreader 소프트웨어는 직접 컴파일되어야 한다. 뉴 스 소프트웨어의 대부분은 환경 설정화일을 사용하지 않는다. 대신에, 컴파일 타임때 환경설정 옵션이 결정된다. 대부분의 표준 뉴스 소프트웨어는(ftp.uu.net의 /news 디렉토리로부터 anonymous FTP 를 이용하여) 리눅스 외부에서 컴파일 될 것이다.필요한 패치 는sunsite.unc.edu의 /pub/Linux/system/Mail(리눅스용 메일 소프트웨어도 여기 에서 발견된다)에서 찾아볼 수 있다. 리눅스용의 다른 뉴스 소프트웨어 또한 이 디렉토리에서 찾아볼 수 있다 좀더 많은 정보를 위해서는, sunsite.unc.edu의 /pub/Linux/docs/HOWTO 디렉 토리의 리눅스 News HOWTO를 참고하라. 또한, LDP의 Linux Network Administrator's Guide 에는 리눅스용 뉴스 소프트웨어를 구성하기 위 한 자세한 정보를 포함하고 있다. Tim O'Reilly 와 Grace Todino가 쓴 책, Managing UUCP and Usenet는 UUCP와 뉴스 소프트웨어를 설치하는데 훌륭 한 안내를 하고 있다. 또한, ftp.uu.net의 /usenet/news.announce.newusers 디렉 토리에서 구할 수 있는 USENET 문서인 "How to become a USENET site"도 흥미롭다.