지금까지 익혀 온 기본 명령어들을 바탕으로, GNU/Linux 시스템이 제공하는 여러가지 서비스들을 자신의 목적에 맞게 활용해 보자. 먼저 다른 컴퓨터가 제공하는 서비스를 이용하기 위한 GNU/Linux 시스템에서의 네트웍 관련 명령어를 소개하고, 반대로 이 컴퓨터(자신의 계정이 있는 GNU/Linux 시스템)의 서비스를 다른 컴퓨터에서 이용하는 방법도 다룰 것이다. 특히 간단하게나마 자기의 홈페이지를 만들어서 관리해 보는 것을 오늘의 목표로 한다. 이것은 지금까지의 과정 - 자신의 홈 디렉토리에서 파일과 디렉토리를 관리하고 몇 줄의 텍스트 문서를 만드는 일만 할 수 있다면 땅 짚고 헤엄치는 것 만큼이나 쉬운 일이다.
지금 보고 있는 이 페이지에서는 그래도 몇 가지 따분한 이야기들, 말하자면 시스템 서비스가 무엇인지에 대해 소개하겠다. 이것은 단지 시스템 서비스의 관리에 흥미를 느끼는 소수의 회원을 혹시라도 만들 수 있지 않을까 하는 기대감에서 소개하는 내용이며 특별히 관심이 없다면 강조된 몇몇 부분만 훑어보고 다음 페이지로 넘어가도 좋다.
modules / daemons
시스템이 사용자들에게 제공하는 서비스들(네트웍 서비스를 포함해서)은 사실 시스템의 핵심이라 할 수 있는 커널(kernel)이 제공하는 것이 아니다. 핵심은 말 그대로 핵심으로서의 역할을 할 뿐, 실제 하드웨어의 동작은 모듈(modules), 그리고 각 서비스의 동작은 데몬(daemons)이라는 단위(units)들이 처리한다.[29] 시스템에 붙어 있는 수많은 하드웨어들 각각에 대해서, 그리고 시스템이 제공하는 수많은 서비스들 각각에 대해서 모든 세부적인 제어를 커널이 직접 한다면 그것은 걷잡을 수 없이 비대해지고 둔해질 것이다. 게다가 하드웨어의 이용 형태를 조금 바꾸거나 또는 새로운 서비스를 시작할 때, 멀쩡히 돌아가는 그 외의 것들도 몽땅 (MS-Windows 시스템처럼) "다시 시작"되어야 한다! 하지만 GNU/Linux 시스템은 어지간해선 "시스템 다시 시작"할 일이 없다.
하드웨어 모듈 - 하드웨어들, 예를들어 키보드, 마우스 등의 입력 장치나 네트웍 카드, 사운드 카드, 그래픽 카드 등 본체에 붙어 있는 장치들을 정상적으로 작동시킬 수 있도록 정의한 소프트웨어(실행 명령이 아니라 목적 파일 형태)를 모듈이라고 한다. 일반적으로 /lib/modules/ 디렉토리 아래에 커널의 각 버전에 해당하는 모듈들이 있다. 만약 하드웨어의 종류가 바뀌거나 또는 새 하드웨어가 연결되면 그것을 다루기 위해 만들어진 또다른 모듈로 바꿔 이용해야 되는 것이다. 시스템의 하드웨어 구성을 관리하는 것은 물론 일반 이용자가 관심가질 내용이 아니다.
서비스 데몬 - 시스템에서 직접 이용할 수 있는, 또는 멀리 떨어진 곳에서도 네트웍을 통해 접근해서 이용할 수 있는 다양한 서비스들을 담당하고 있는 단위들이다. 서비스의 예로는 곧 그 이용법을 소개할 것들; 쉘 계정으로 접속할 수 있도록 한다거나 자신의 홈페이지를 유지해 주는 것 등이 있다. 특별히 네트웍 환경과 관련된 데몬들은 각자의 프로토콜[30]이나 포트[31]를 이용하므로 서로 동작을 방해하거나 왜곡하는 일을 방지할 수 있다.
![]() |
알아두면 그럴듯할 데몬들 |
---|---|
일반 이용자가 데몬에 대해 자세히 알 필요는 없지만 그래도 21C를 살면서 상식적으로, 또는 관리자급 친구들이 주고받는 이야기에 조금 끼어들기 위해서라도 여기서 소개하는 정도는 알고 있는 것이 좋다. 대부분 데몬의 이름은 d 문자로 끝나며 그 의미는 물론 그것이 Daemon임을 나타내는 것이다.
|
아무 것도 하지 않고 노는 것 같이 보이는 시스템이 얼마나 많은 능력을 가지고 있는지, 그리고 현재 얼마나 많은 일을 후면 작업으로 하고 있는지를 확인해 보자.
$ ls /lib/modules/2.4.7-10/kernel/drivers/ # 하드웨어 모듈들, $ ls /lib/modules/2.4.7-10/kernel/drivers/net/ # 예를들어 네트웍 카드 $ ls /etc/rc.d/init.d/ # 시스템 서비스, 데몬 $ ps aux |more # 어떤 데몬이 동작 중인지 확인
특히 세 번째 명령을 실행해 보면 실행가능한 명령(?)들을 볼 수 있다. 이들이 바로 각 서비스 데몬을 실행시키는 명령이다. 현재 동작 중인 데몬들을 확인하려면 네 번째처럼 명령하면 될 것이다. 어떤 데몬이 동작 중이라는 것은 바로 그것이 제공하는 서비스를 이용할 수 있다는 의미다.
참고할 것은 이들이 echo $PATH 명령으로 볼 수 있는, 즉 일반적인 명령어나 어플리케이션이 속해 있는 디렉토리에 있지 않다는 사실이다. 심지어 시스템의 관리 권한이 있는 root 이용자(super user)가 실행하는 경로, 예를들어 /sbin도 아니다. [32] 물론 root 이용자는 시스템 내에서 전지전능한 신적 존재이므로 각 데몬의 절대 경로를 명시, 원하는 것을 실행(start) 또는 중지(stop), 다시 시작(restart)할 수 있지만 일반적으로 모든 데몬들은 시스템 부팅 과정의 일부로서 시작되고, 또 종료 과정의 일부로서 멈춘다고 알아 두자. 아래의 보기는 하나의 예로서 World-Wide-Web 서비스를 제공하는 httpd를 직접 실행하는 것이다. (일반 이용자가 명령하면 먹혀 들지 않는다 :-) [33] 시스템이 부팅되면서 실행될 때도 같은 메시지가 보인다.
# /etc/rc.d/init.d/httpd start Starting httpd: [ OK ] # /etc/rc.d/init.d/httpd stop Stopping httpd: [ OK ]
만약 GNU/Linux 시스템이 처음 시동되는(booting) 모습이나 종료되는(shutting down) 모습을 구경한 적이 있다면 이들 명령이 시작되고 중지되는 모습을 볼 수 있었을 것이다. 아직 본 적이 없다면 그 시스템의 관리자에게, 언젠가 시스템을 재부팅할 때 자기에게 보여줄 것을 요구(?)하라 :-) 이 문서의 목적은 관리자를 위한 정보를 소개하는 것이 아니므로 특별히 하드웨어 모듈에 대해서는 더이상 다루지 않는다. 시스템 서비스에 대해서도 이제부턴 원론적이고 따분한(?) 이야기들보다 "그 괴물들의 능력을 어떤 식으로 이용할 수 있는지"에 초점을 맞출 것이다.
[29] daemons(demons) - 사전적인 의미는 어떤 일을 겁나게 잘하는, 일종의 귀신같은 존재다. GNU/Linux 외의 또다른 공개 유닉스 시스템인 FreeBSD 운영체제의 로고이기도 하다.
[30] protocols - 네트웍을 통해 컴퓨터 사이의 데이터와 신호를 주고받기 위한 일종의 규칙, 통신규약
[31] ports - 컴퓨터 본체가 외부로 연결된 부분, 또는 하나의 네트웍 케이블(예를들어 랜선, 전화선이나 인터넷 전용선)이 가상적으로 여러 개를 가질 수도 있는, '외부와의 데이터 송수신이 이루어지는 출입구의 번호'. 몇 가지 예로 Telnet 서비스는 23번, WWW 서비스는 80번 포트를 이용.
[32] 시스템 관리자로 로그인하면 대개 /sbin, /usr/sbin 디렉토리들이 환경 변수 $PATH에 추가된다. 이들은 system binary, 즉 시스템 관리에 관련된 명령들이며 일반 이용자는 자세히 알 필요가 없는 것들이다.
[33] 여기서 Bash의 프롬프트를 나타내는 문자가 #로 바뀐 것은 root 이용자의 프롬프트임을 상기시키기 위함이다. 이런 프롬프트에서는 시스템 관리를 위한 작업만 해야 한다, 반드시!