리눅서는 어떻게 크는가?
이제 초보 리눅서에게 도움이 되는 이야기를 하기로 하자. 무슨 일이든 기본이 있고 원칙이 있다. 이 것을 지킨다면 빨리 그 분야에 적응할 수 있다. 리눅서가 되기 위한 원칙은 어떤 것이 있는가? 오늘도 통신과 유저넷에는 질문들이 쏟아지고 있다. 그 질문의 대부분은 정말 기본적인 내용에 관한 것이다. "fsck는 어떻게 씁니까?", "mount가 무엇입니까?"... 이미 초보를 통과한 리눅서들에게는 황당하게 보이지만, 이런 질문을 하는 사용자들을 나무랄 수는 없다. 윈도우에 익숙한 사용자들에게 아무리 mount의 개념을 설명해도 알아듣지를 못하기 때문이다. 그래서 유닉스(리눅스)의 기본적인 개념이 없는 사용자는 모든 것이 난해하고 복잡해서 조금 용기를 내 보다가 중도하차하게 된다. 리눅서들에게는 형용모순처럼 보이는 질문을 하지 않을 수 없는 윈도우 사용자의 위치를 이해하기로 하자. 필자는 최근에 두 명의 윈도우 사용자에게 리눅스에 대해서 알려 주어야 할 일이 생겼다. 한 명은 윈도우 비쥬얼 프로그래밍을 7년 이상 해 온 개발자이고 다른 한 명은 윈도우 95/98에서 그래픽을 조금 해 본 초보 프로그래머이다. 이 들에게 어떻게 리눅스에 대해서 설명할 것인가? 이 둘을 만족 시킬 수 있는 한가지 설명 방식을 찾을 수 있을까?
RTFM의 진정한 뜻
유저넷을 검색하다 보면 RTFM이라는 문장을 자주 만나게 될 것이다. AFAIK(As Far As I Know), IMHO(In My Humble Option), IIRC(If I Remember Correctly) 처럼 축약된 용어인데 이 말의 뜻을 알고 있는 독자들이 많을 것이다. 그 뜻은 "잘 정리된 설명서를 읽어라"(Read The Fine Manual)이다. 그런데 뉴스 그룹에서 보면 조금 이상한 문장 속에서 이 말이 나온다. 즉 "hey, shit! rtfm!!" 이런 방법으로 쓰이고 있는 것이다. 그 이유를 알아보자. 리눅스를 익히기 위해서 구할 수 있는 수많은 문서가 있다. 그러나 사용자의 대부분은 이런 설명서를 읽지 않는다. 영어가 모국어인 사람들도 이런 지경인데 한글을 쓰는 사용자들은 더 말할 필요가 없다. 이들은 뉴스그룹을 뒤지고 알고 싶은 것이 있으면 그냥 뉴스그룹에 포스팅한다. "이 것을 알려 주세요." 이런 뉴스 때문에 뉴스그룹의 토론이 제대로 이루어지지 않고 수많은 질문 글 사이에서 정보가치가 있는 글이 묻혀 버린다. 거의 대부분의 질문이 FAQ나 HOWTO 또는 LDP 문서에서 찾을 수 있음에도 오늘도 같은 질문이 계속되고 있다. 한 두번 이런 질문에 대해 친절히 대답을 알려 주던 리눅서들이 지치게 된다. 계속되는 질문에 응답하지 않게 되고 질문한 사람들은 왜 대답해주지 않느냐는 글을 올린다. 결국 화난 리눅서는 외칠 수 밖에 없다. rtfm!(read the FUCKING manual), rtfm의 진정한 뜻은 리눅서가 되고 싶으면 "설명서를 읽어라"라는 가장 기본적인 원칙을 무시하는 사용자들을 질타하는 목소리이다. 리눅서가 되고 싶은가? rtfm!!!
어떤 것을 읽어야 하는가?
리눅서가 되려면 메뉴얼을 읽으라는 말을 듣고 그러고 싶어서 문서들을 뒤져보아도 아직 막막할 것이다. 설명들을 하나도 이해할 수 없고 이 책에서는 저 책을 참조하라고 하고 저 책은 다른 것을 참조하라고 하고 그 책은 다시... 초보자에게 메뉴얼을 읽으라는 말은 사전을 통채로 모두 읽으라는 말과 같이 들린다. 언제 사전을 모두 다 읽는단 말인가? 사전을 모두 읽는다고 그 언어를 자유자재로 구사할 수 있는가? 초보 리눅서들에게 필요한 것은 이런 메뉴얼을 관통하는 기본 원리에 대한 설명이다.
리눅스의 기본 원리는 무엇인가? 리눅스는 유닉스다. 그러므로 리눅스의 기본 원리는 유닉스의 기본 원리와 같다. 그렇다면 유닉스의 기본원리는 무엇인가? 그 것은 멀티유저 멀티타스킹 운영체제란 사실이다. 여기서 다시 지루한 유닉스의 특징을 나열하지는 않겠다. 유닉스 개론서 앞부분에 잘 정리되어 있는 내용을 읽어 볼 것. 멀티유저 시스템이란 사용자와 관리자란 계층이 있음을 뜻한다. 멀티유저 시스템을 유지하기 위해서는 관리자가 필요하다. 사용자들의 권한을 제어하고 서비스 해야 할 프로그램들을 정리하는 관리자는 유닉스에 대한 전반적 지식을 가진 사람이 할 수 있는 일이다. 과거 대부분의 유닉스 사용자들은 단말기 앞에서 자기 계정을 가지고 허락된 작업만을 할 수 있었다. 그 때는 유닉스 프로그램 설명서 정도만 가지고 있으면 유닉스를 쉽게 이해할 수 있었다. 복잡한 관리는 할 필요도 할 권한도 주어지지 않았기 때문에 그런 부분은 생각하지 않아도 되었기 때문이다. 그러나 PC에 직접 인스톨 할 수 있는 유닉스 클론들이 나타나면서 유닉스에 전혀 문외한인 사람들에게 유닉스 프로그램 사용부터 시스템 관리까지 모든 것을 한꺼번에 하도록 요구함으로써 아무 것도 할 수 없도록 만들어 버렸다. 리눅스가 더 어려워진 것이다.
유닉스의 경험은 사용자 계정으로 로그인하여 cp,rm등의 명령을 익히는데서 부터 출발한다. 센드메일 설정등의 복잡한 일은 차후로 미루고 가장 기본적인 명령어들에 대한 이해를 먼저 시작하자. I&GSG와 LUG를 들고 ls, cp, vi 명령을 익히자. 시스템 관리는 지금 할 일이 아니다. I&GSG가 너무 단순하다면 유닉스 사용자 설명서를 한 권 구해서 읽으면서 설명되어 있는 프로그램을 직접 실행해 보는 것이 좋을 것이다. 요즘은 자신이 무슨 내용을 쓰고 있는지 확실히 알면서 쓴 책들이 많다. 유닉스 로그인, 셸에 대한 설명, 메뉴얼 페이지 사용법, 모든 명령어가 따르는 일반 형식, 네트웍 관련 사용자 프로그램들, 파이프와 필터, 파일의 처리, vi 사용법, 파일 시스템에 대한 이해, 유저넷과 뉴스그룹등등.. 유닉스 사용자 권한으로 할 수 있는 것이 많고 이 것을 제대로 익히면 시스템 관리도 어려운 것이 아니다.
시스템 관리를 위해서는 LSAG가 필요하다. 이제 /etc 디렉토리를 관리해야 한다. 또한 리눅스 파일 시스템 표준(FSSTND)에 대한 이해를 해야 할 때이다. 모든 관리자용 프로그램은 /bin, /sbin, /usr/sbin, /usr/bin에 있고, 설정 파일은 /etc에, 로그는 /var/log에, 각 개인별 설정파일은 ~/.xxxrc 형태로 두는 것, 비표준 패키지는 /usr/local 아래에 인스톨 된다는 것, /var, /tmp, /usr, /etc, /lib 등의 디렉토리가 왜 만들어져 있고 어떻게 이용되는지 이해하게 될 것이다. 특정 프로그램이 실행되면서 어떤 파일을 참고하는지 알고 싶으면 다음과 같이 실행해 볼 것. 프로그램이 리눅스 시스템 안에서 어떤 함수를 호출하고 어떤 파일들을 열고 읽는지 한 눈에 볼 수 있다.
# strace vi 2>a
# less a
파일 시스템 표준과 필터 프로그램에 대해 익히고 기본 에디터를 제대로 사용할 수 있다면 이제 설정 변경을 할 수 있다. /etc/hosts, /etc/exports 파일등을 다룰 수 있을 것이다. /etc 아래의 파일들은 메뉴얼 페이지가 있다. "man exports"라고 하면 그 파일의 형식을 자세히 보여 줄 것이다. 물론 이 파일이 어디에 쓰이는지는 파악을 해야 한다. 메뉴얼 등에서 이 파일이 쓰이는 곳을 찾아 보던지 "rpm -qf /etc/exports"라고 쳐서 이 파일이 어느 패키지에 속하는지 확인하고 그 패키지가 하는 일은 무엇인지 파악해도 된다. 많은 설정파일에 있듯이 "당신이 무슨 일을 하고 있는지 알지 못한다면 손대지 말것".
이제 본격적으로 /etc/rc.d 아래의 파일을 손보자. 이 디렉토리에는 리눅스가 기동 되면서 필요한 작업을 하도록 되어 있는 곳이다. 지금 "ps axf"라고 실행해 보면 알 수 없는 프로그램들이 떠 있을 것이다. 쓰지도 않는 nfs, autofs, gpm등의 데몬이 떠 있다면 이들은 모두 /etc/rc.d/init.d 아래에서 찾을 수 있다. 어떤 데몬인지 확인하고 필요한지 여부를 판단한 다음 필요없다면 지워도 된다. 각 데몬들은 도스의 램상주 프로그램처럼 메모리를 낭비하고 있으므로 이 데몬들을 정리하면 컴퓨터의 반응이 훨씬 빨라질 것이다. 필자가 만난 한 유닉스 관리자는 인디고를 관리하고 있었는데 사용자가 컴퓨터가 잘 작동하지 않는다고 하면 6개짜리 인스톨 CD를 모두 재설치하는 것을 본 적이 있다. 256M의 메인메모리를 쓸데 없는 데몬이 모두 점유해서 정작 사용자가 띄운 그래픽 프로그램은 쓸 수 없을 정도로 느리게 실행되었다. 사용자는 컴퓨터가 후지다고 본체를 발로 차며 사용하고 있었다. /etc/rc.d/ 디렉토리를 마음대로 고칠 수 있다면 이제 스스로 리눅서라고 생각해도 좋다.
웬만한 설정을 할 수 있고 감을 잡았다면 구체적 문제를 위해서 HOWTO 문서를 읽으면서튜닝을 하자. 백여개의 HOWTO 문서를 참고한다면 못할 일이 없다. 고정된 IP를 할당 받을 수 있다면 웹서버와 네임서버를 설치해서 사용해 보고 센드메일을 사용해서 메일을 내 컴퓨터에서 받아보기도 하자. 학생이라면 이제 프로그래밍에 눈을 돌릴 때이다. 커널부터 라이브러리 소스까지 가능하면 이들을 뒤져 볼 것. 버그를 발견했거나 성능을 향상시킬 방법을 알았다면 오픈소스 프로젝트에 참가해도 좋다.
어떻게 읽어야 하는가?
다시 처음으로 돌아가자. 유닉스 개론서를 읽고 가이드를 보고 HOWTO를 보면 리눅서가 될 수 있다. 참 좋은 말이다. 그런데 여기에도 문제가 있다. 예를 들어 ipfwadm이라는 프로그램을 이용해서 IP-Masquerade를 하고 싶다. HOWTO 문서도 있지만 모든 것을 설명하고 있지는 않다. 그래서 스스로 "man ipfwadm"으로 사용법을 익히려고 한다. 알짜에는 한글로 된 메뉴얼 페이지가 나온다. 그러나 각각의 옵션에 대해서만 설명하고 있으며 이 설명도 잘 이해되지 않고 옵션들간의 연관관계에 대한 정확한 지침이 없다. IP-Masquerade mini HOWTO에는 다음과 같이 사용하라고 나와 있다.
#ipfwadm -F -a m -S yyy.yyy.yyy.yyy/x -D 0.0.0.0/0
yyy..에서 출발한 패킷을 x로 마스크해서 문제가 없으면 모든 주소(-D)로 masquerade해서 보내라는 옵션이다. 그런데 메뉴얼페이지 어디에도 -a 다음에 m을 사용하는 이유를 설명해 놓지 않고 있다. 그러므로 ipfwadm을 사용해서 masquerade를 할 수 있다는 것을 알아내고 메뉴얼페이지를 아무리 읽어도 이 것을 할 수 없는 것이다. 이 문제를 어떻게 해결할 것인가? 마찬가지로 셸프로그래밍을 하면서 이 셸스크립트가 600초 후에는 스스로 끝내게 하는 기능을 넣고 싶다. 셸 스크립트 언어에는 전역변수로 SECONDS가 있다. 셸스크립트가 기동하면서 이 것을 0으로 초기화 시키면 그 때부터 1초마다 값이 증가한다. 이 값을 저장한 후에 나중에 비교해 보면 600초 후에 셸스크립트를 끝낼 수 있다. 그런데 bash 의 메뉴얼 페이지는 3960줄이다. 언제 이 설명서를 다 읽는단 말인가? 그리고 읽더라도 이 변수를 이런 용도로 사용할 수 있음을 어떻게 안단 말인가? bash 메뉴얼의 SECONDS 부분의 설명은 다음과 같다.
SECONDS
Each time this parameter is referenced, the number of seconds since shell invocation is returned. If a value is assigned to SECONDS, the value returned upon subsequent references is the number of seconds since the assignment plus the value assigned. If SECONDS is unset, it loses its special properties, even if it is subsequently reset.
영어를 모국어로 사용하는 사람들도 이해하기 힘든 이런 설명을 보고 어떻게 이 변수의 용도를 짐작할 수 있을까? 그러므로 아무리 설명서를 읽어도 조금도 이해되지 않고 읽을 수록 머리만 복잡해질 뿐 리눅스를 사용하거나 관리하는데 도움이 되지 않는다. 셸프로그래밍에 대한 책도 나와 있지만 간단한 작업을 하기 위해 이런 책을 사서 읽는 다는 것은 낭비일 뿐이다. 셸프로그래밍 책을 보면 셸스크립트 언어만을 설명한 것이 아니라 필터 프로그램의 조합에 대한 설명이 더 많다. 또다시 필터 프로그램의 메뉴얼페이지를 읽어야 한다. 셸프로그래밍 책에서 셸스크립트의 한계를 지적하며 궁극적으로는 perl을 사용하라고 권한다. 공식 perl사이트인 http://www.perl.com에서 제공하는 perldoc 문서는 1256페이지에 달한다. perl 문서를 읽는다고 perl에 대해서 정통해 질 수 없다. perl로 짠 암호화 같은 스크립트 파일들은 그 내부를 들여다보고 한 줄 한 줄 분석해야 무슨 일을 하는지 알 수 있다. 원하는 일을 위해 perl로 스스로 프로그램을 짜는 것은 또다른 문제이다. 이렇게 얼키고 설켜있는 문서와 문서사이에서 중심을 잡고 개념을 파악하려면 어떻게 해야 할까?
이전 글 : 이전 글이 없습니다.
다음 글 : O"Reilly 동물들의 뒷 이야기
최신 콘텐츠