Postfix를 이용한 스팸 및 바이러스 필터링 시스템 구성하기

회사에서 사용하는   MS Exchange Edge Server를 이용한 스팸 및 바이러스 필터링 시스템에 몇가지 부족한 부분과 수정이 안되는 문제 때문에 필터링 시스템을 Postfix로 변경하기 위해 작업을 해보았다.

MS제품군은 편리하기는 하지만 필자처럼 리눅스 환경에 익숙한 사람들에게는 자유도가 너무 부족하다…^^;

전체적인 구성도는 아래와 같다. 물론  DNS에서 MX레코드 설정을 변경하여  제일 먼저  Postfix필터서버가 메일을 받도록 설정해줘야 된다.

spamfilter

각각에 대한 간단한 설명은 아래와 같다.

Postfix – MTA(mail tranfer agent) 로 메일메시지를 전송하는 역할을 한다.

Amavis – 펄로 제작된 프로그램으로 외부의 스팸필터링 프로그램,백신들을 호출할 수 있도록 해준다.

ClamAV – 오픈소스 백신 프로그램으로 메일에 첨부된 바이러스를 필터링 한다.

Spamassassin – 오픈소스 스팸 필터링 프로그램으로 스팸룰과 스팸학습기능을 제공해준다.

 

간단히 설명하자면 외부로 부터 오는 모든 메일메시지는 제일 앞단에 위치하는  Postfix  server로 들어오고Postfix서버에 설치된  amavis 시스템을 통해 스팸과 바이러스를 필터링 한 이후 다시 최종적으로 실제 메일서버에 전달해주는 형태가 되겠다.  amavis는  다른 상용프로그램들도 연결하기가 아주 쉽다.

필자의 경우 우분투 서버를 기준으로 구성했다. 다른 배포판도  설치는 간단하니 그냥 환경설정 정도만 변경해 주면 된다.

Postfix설치 및 설정하기

sudo apt-get install postfix

postfix 설정하기

/etc/postfix/main.cf   및 /etc/postfix/master.cf  에서 설정을 해주면 된다.

main.cf 수정하기

myhostname = 스팸필터링호스트 네임을 적어준다.(ex. spamgw.abc.com)
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = 메일을 받을 도메인을 적어준다. (ex. abc.com mail.abc.com localhost)
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination

# 메일을 전송할 호스트 설정
transport_maps = hash:/etc/postfix/transport 
# 로컬 수신설정
local_recipient_maps =
# 필터링 설정
content_filter = smtp-amavis:[127.0.0.1]:10024 

아래 3라인 transport_maps,local_recipient_maps,content_filter부분은 필터링 시스템에서 가장 중요한 부분이다.

transport_maps설정

transport_maps는 /etc/postfix/transport  파일에 설정된 메일서버로 메일을 전송하는 설정이다. 따라서 스팸 필터를 모두 마치고 나서 실제 최종 메일서버로 메일을 전송하도록 설정해 줘야 한다.

아래 예제를 참고해서 /etc/postfix/transport파일을 반드시 작성하도록 한다. 192.168.30.85는 Exchange server의 IP address 이다.

mydomain.com smtp:[192.168.30.85]
abc.com      smtp:[192.168.30.20]

각각 메일 도메인에 대해서 라우팅을 설정해 주는 것이다.

 

로컬메일 recipient 설정

기본적으로 postfix는 계정이 존재하지 않은 메일메시지에 대해서는 모두 반송을 하게 되어있다. 스팸 필터링 서버에는 리눅스 계정이나 가상메일 계정이 존재할 필요가 없고 단순히 필터링만 하기 때문에 들어오는 모든 메일 메시지를 허용해줘야 하며 아래의 설정이 바로 그것이다. 따라서 아래의 설정이 없으면 모든 메일은 반송이 된다.

local_recipient_maps =

 

필터링 설정

content_filter = smtp-amavis:[127.0.0.1]:10024

필터링 엔진에 대한 설정이며 amavis에 메시지를 전달해주는 설정이다.

/etc/postfix/master.cf에 추가해준다. 아래는 smtp를 이용해서 메시지를 전달해주며  lmtp를 이용해도 된다.

smtp를 이용하는 방법

smtp-amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20

lmtp를 이용하는 방법

smtp-amavis unix - - n - 2 lmtp
-o disable_dns_lookups=yes
-o lmtp_send_xforward_command=yes
-o lmtp_data_done_timeout=1200

postfix  설정

/etc/postfix/master.cf 에 아래와 같이 추가해 준다.

127.0.0.1:10025 inet    n       -       -       -       -       smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_delay_reject=no
        -o smtpd_client_restrictions=permit_mynetworks,reject
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o smtpd_data_restrictions=reject_unauth_pipelining
        -o smtpd_end_of_data_restrictions=
        -o mynetworks=127.0.0.0/8
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o smtpd_client_connection_count_limit=0
        -o smtpd_client_connection_rate_limit=0
        -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

 

위의 설정까지 마무리하면 기본적인 스팸 필터링 구조는 만들어둔 것이다.

이제 실제 필터링을 하는 amavis 와 clamav,spamassassin  을 설치해 보자.

apt-get install amavisd-new spamassassin clamav-daemon
sudo adduser clamav amavis 
sudo adduser amavis clamav

 

설치가 되었다면 amavis  설정을 해준다.

/etc/amavis/conf.d/15-content_filter_mode 파일을 열어서  아래와 같이 주석을 제거해주자.

@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

 

amavis 데몬 시작

/etc/init.d/amavis start

Postfix 재시작

/etc/init.d/postfix restart

 

최종 메일 서버의 설정

메일이 최종적으로 저장이 되는 메일서버는 Postfix메일서버로 부터의 연결을 허용해줘야 한다.

익스체인지 서버의 경우 수신커넥터 설정을 해주면 되고 qmail,postfix,sendmail서버의 경우 postfix필터서버를 relay를 허용해주면 된다.

잘 구성이 되었다면 메일 로그에 아래와 같이 나오게 될 것이다.

Nov 16 12:40:58 host1 amavis[21780]: (21780-07) Passed CLEAN {RelayedInbound}, 
[xxx.xxx.xxx.xxx]:41666 [xxx.xxx.xxx.xxx] <Andy.Kim@abc.com> -> <stone@abc.net>, 
Queue-ID: 6BEB2340011, Message-ID: <83B36BA2-D05C-43A9-A440-45BCE51EE141@raon-tech.com>, 
mail_id: U_w6o4Gmz7Mz, Hits: 1.277, size: 3983, queued_as: 7EBDD340016, 2654 ms

나머지 기타 세세한 부분들은 각자 테스트 해보기 바란다.

스팸어세신의 학습 기능을 이용한다면 저장된 스팸메일을 학습시켜서 거의 대부분의 스팸메일을 자동으로 걸러낼 수 도 있다. 그리고 clamav 뿐만 아니라 기타 상용 백신엔진들도 사용하도록 amavis 에서 제공하고 있으니 참고해 보기 바란다.

 

 

 

WDS를 활용한 Linux 시스템 네트워크 설치-Kickstart

기본적으로 레드햇 리눅스 계열은  kickstart라는 네트워크 설치 프로세서를 제공한다.

대부분의 경우  tftp서버 및 nfs,http,dhcp서버등을 리눅스로 구성한 다음 네트워크 설치를 구성하지만 필자의 경우 windows 시스템과 리눅스 시스템이 혼용이 되어 있어서 간략한 시스템을 구성하기 위해 통합 작업을 하였다.  아래 포스트에 WDS와 syslinux를 이용한 네트워크 설치 서버 구성편을 읽어보고 구성이 되어 있다고 가정한다.

http://www.nuxinfo.net/wdssyslinux%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%B9%98%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0/

전체적인 작업 순서

  1. WDS에 리눅스 부팅 이미지를 적당한 곳에 위치한다. 리눅스 부팅 이미지는 설치CD/images/pxeboot/ 에  커널(vmlinux) 과 초기화램디스크 이미지(initrd.img)  두개의 파일을 이용해서 네트워크 부팅을 시작
  2. 자동설치를 위해서 kickstart  설정파일(ex. ks.cfg) 파일을 생성하고 적당한 위치에 둔다. ks파일은 http,ftp,nfs등을 이용해서 접근하도록 구성하면 된다.
    ex)  http://example.com/ks/rhel6-32bit.ks.cfg ,ftp://example.com/ks/rhel6-32bit.ks.cfg,nfs://nfsserver/ks/ks.cfg
  3. 네트워크 부팅 후 initrd 에 kickstart 설치 값을 전달한다.(WDS설치디렉토리(RemoteInstall)\Boot\x86\pxelinux.cfg\default 파일에서 설정해 준다.)
    예제)

    LABEL CentOS 6.8(64bit)
    MENU LABEL CentOS 6.8 64bit
    KERNEL /Linux/CentOS/6.8/x86_64/vmlinuz
    APPEND initrd=/Linux/CentOS/6.8/x86_64/initrd.img ks=ftp://192.168.30.100/ks/cent6-ks.cfg

     

 

Kickstart환경설정 파일 생성

kickstart설치를 위한 환경설정 파일은 미리 만들어진 파일을 참고하여 만들어도 되고 가장 편한 방법은 레드햇 계열의 시스템을 설치하면 자동으로 생성되는 anaconda-ks.cfg(/root 디렉토리에 자동생성된다.) 를 이용하는 방법이 있다.

아래는 Centos 6 ks.cfg 예제이다.  Centos 7버전은 형식이 조금 달라졌으니 확인하기 바란다.

install #설치할 것인지 업그레이드 할 것인지 선택
text # text모드로 설치
url --url http://ftp.daumkakao.com/centos/6.8/os/x86_64 #미러서버 경로(내부에 구성했다면 내부서버경로를 잡아주자)
lang en_US.UTF-8 #설치 언어
keyboard us #키보드 설정
network --onboot no --device eth0 --bootproto dhcp --noipv6 #네트워크 설정
rootpw --iscrypted $6$bsimcTMIypuVEJKu$yeYkKkqQUSW8nwhx4HbCL8x9V6KqBC9.nMVMlTLwfO.# root사용자 비번
firewall --service=ssh #방화벽 설정
authconfig --enableshadow --passalgo=sha512 # 인증 및 암호화 알고리즘
selinux --disabled # selinux설정
timezone --utc Asia/Seoul # 시간설정
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" # 부트로더 설정

clearpart --all --drives=sda #sda의 기존 파티션을 모두 삭제한다.주의할 것!

part /boot --fstype=ext4 --size=500
part pv.008002 --grow --size=1

volgroup vg_lvs --pesize=4096 pv.008002
logvol / --fstype=ext4 --name=lv_root --vgname=vg_lvs --grow --size=1024 --maxsize=51200
logvol swap --name=lv_swap --vgname=vg_lvs --grow --size=1638 --maxsize=1638

%packages --nobase #설치할 패키지
@core #패키지 및 패키지 그룹을 적어준다.
%end

참고)  암호화된 rootpw 생성방법

anaconda로 생성된 ks 파일에 이미 설치할때 입력한 root패스워드를 이용하지 않고 새롭게 입력하고 한다면 아래의 방법을 사용하도록 하자. 생성된 암호를  rootpw 라인에 넣어주면 된다.

  •  암호화 알고리즘을  md5 로 설정한 경우(authconfig --enableshadow --enablemd5)

    openssl passwd -1 "사용할패스워드"
    
    grub-crypt --md5
  • 암호화 알고리즘을 sha512 로 사용하는 경우(authconfig –enableshadow –passalgo=sha512)
    grub-crypt --sha-512

 

 

 

WDS,syslinux를 이용한 네트워크 설치서버 구축하기

언제나 그렇듯이 경어는 생략합니다. 글에 대한 의견이나 반론은 stone@nuxinfo.net으로 메일 주시면 됩니다. 아니면 코맨트 남겨주시면 제가 확인하도록 하겠습니다.

시스템 관리자의 업무 중 에서 꽤 많은 비중을 차지하는 시스템 설치 작업을  좀더 편하고 쉽게 하기 위한 방법에 대해서 기술해보고자 한다.

네트워크를 통한 OS설치 작업은 그 역사가 꽤 깊다. 솔라리스의 jumpstart,리눅스의 kickstart,윈도우즈의  RIS(현재는 WDS로 변경됨) 등등이 그 종류이다.

현재 출시되는 대부분의 PC,Laptop,Server등은 모두 네트워크 부팅을 지원하며 심지어는 가상화 시스템도 네트워크 부팅을 지원하므로 통합설치서버를 구성해두면 대부분의 시스템을 CD나 플로피등을 이용하지 않고도 손쉽고 빠르게 OS설치 및 펌웨어 업그레이드 등을 진행할 수 있게 된다.

아래는 구성된 설치 서버의 예제화면이다.  WDS와 syslinux를 조합해서 Windows 시스템 설치 및 리눅스 설치, 각종 펌웨어 업그레이드를 위한 DOS부팅등등을 지원하도록 해두었다.

pxebootmenu

이 강좌는 기본적으로  Windows Deployment Service(이하 WDS)를 구성해본 경험이 있고 여러 운영체제가 운영되는 환경에 초점을 맞춰  설명을 진행할 것이다.

구성에 필요한 준비물

  1. WDS
  2. syslinux(http://www.syslinux.org 에서 최신버전으로 다운로드 받는다)
  3. 설치가 필요한 운영체제들의 ISO파일이나 기타 이미지파일
  4. FTP Server 또는 HTTP server

기본 작업

기존에 WDS가 설치되어 있는 상태에서 아래와 같이 작업을 진행하도록 하자.

먼저 다운로드(https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.zip) 받은 syslinux을 적당한곳에 압축을 해제하고 필요한 파일들을 WDS설치 디렉토리(보통은 c:\RemoteInstall 이다)에 복사한다.

  • syslinux-6.03\core\pxelinux.0 파일을 RemoteInstall\Boot\x86 폴더로 복사
  • syslinux-6.03\bios\com32\menu\menu.c32 파일을 RemoteInstall\Boot\x86 폴더로 복사
  • syslinux-6.03\bios\com32\libutil\libutil.c32 파일을 RemoteInstall\Boot\x86 폴더로 복사
  • syslinux-6.03\bios\com32\elflink\ldlinux\ldlinux.c32 파일을 RemoteInstall\Boot\x86 폴더로 복사
  • syslinux-6.03\bios\memdisk\memdisk 파일을 RemoteInstall\Boot\x86 폴더로 복사
  • RemoteInstall\Boot\x86\pxeboot.n12 파일을 RemoteInstall\Boot\x86\pxeboot.0  으로 복사
  • RemoteInstall\Boot\x86\abortpxe.com 파일을 RemoteInstall\Boot\x86\abortpxe.0  으로 복사

위의 기본 작업이 끝나면 이제 pxeboot 메뉴 작업을 하도록 한다. 이 파일이 첫째장에서 보여준 메뉴 항목을 구성하는 파일이다.

  1. RemoteInstall\Boot\x86\pxelinux.cfg  폴더 생성
  2. 생성된 폴더(pxelinux.cfg)에   메모장이나 기타 유틸로   default 파일 생성

default파일의 sample예제이니 참고 하기 바란다. pxeboot.0  을 호출하면 기존의  WDS로 부팅되며 리눅스는 미리 구성된  ks파일을 호출해서 자동으로 설치를 진행한다. 또한 iso이미지를 직접 로딩해서 부팅하도록  memdisk를 사용했다.

필자의 경우 RemoteInstall\Boot\x86\Linux,ISO 폴더를 구성하고 각각의 버전에 맞는 커널과 램디스크 이미지를 배치했다.

kickstart파일을 생성하는 방법은 직접 찾아보도록 하자. 래드햇 계열이면 모두 적용가능하다. centos 7은 centos 6 버전과  ks파일 포맷이 조금 다르니 주의하도록 하자.

# Default boot option to use
DEFAULT menu.c32
TIMEOUT 50
# Prompt user for selection
PROMPT 0
# Menu Configuration
MENU WIDTH 80
MENU MARGIN 10
MENU PASSWORDMARGIN 3
MENU ROWS 12
MENU TABMSGROW 18
MENU CMDLINEROW 18
MENU ENDROW 24
MENU PASSWORDROW 11
MENU TIMEOUTROW 20
MENU TITLE PXE Boot Menu

# Menus

# WDS
LABEL WDS
MENU LABEL Windows Deployment Server
KERNEL pxeboot.0

LABEL CentOS 6.8(64bit)
MENU LABEL CentOS 6.8 64bit
KERNEL /Linux/CentOS/6.8/x86_64/vmlinuz
APPEND initrd=/Linux/CentOS/6.8/x86_64/initrd.img ks=ftp://192.168.30.100/ks/cent6-ks.cfg

LABEL CentOS 6.8(32bit)
MENU LABEL CentOS 6.8 32bit
KERNEL /Linux/CentOS/6.8/x86/vmlinuz
APPEND initrd=/Linux/CentOS/6.8/x86/initrd.img


LABEL AcronisTrueImage
MENU LABEL AcronisBootableMedia
KERNEL memdisk
INITRD iso/AcronisBootableMedia.iso
APPEND iso raw

LABEL ESXi6
MENU LABEL ESXi6.0 Installer
KERNEL memdisk
INITRD iso/VMware-VMvisor-Installer-6.0.0.update02-3620759.x86_64.iso
APPEND iso raw

LABEL MSDOS
MENU LABEL MSDOS
KERNEL memdisk
INITRD iso/dos.iso
APPEND iso raw

# Exit
LABEL Exit
MENU LABEL Exit
KERNEL abortpxe.0

이제 모든 준비는 끝났고  WDS가 pxelinux.0을 기본적으로 로딩하도록 설정을 변경한다.

결국은 WDS가 사용하는 pxeboot를 syslinux의  pxelinux로 교체하여 구성하는 방법인 것이다.

기존의 WDS는 클라이언트—pxeboot—WDS 였다면 위의 구성은 클라이언트—pxelinux—pxeboot–WDS구성인 셈이다.

WDS서버의 cmd창을 열어서 아래와 같이 입력한다.

  • wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /Architecture:x86 
  • wdsutil /set-server /bootprogram:boot\x86\pxelinux.0 /Architecture:x64
  • wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.0 /Architecture:x86 
  • wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.0 /Architecture:x64

 

모든 설정이 끝났다면 설치를 원하는 서버나 PC의 bios에서 pxe부팅을 활성화 시킨 후 부팅하면 아래와 같은 화면이 나오면 정상적으로 구성한 것이다. default파일에 필요한 구성을 추가하면 된다. DOS환경이 기본인 펌웨어 업데이트 작업도 ISO파일을 수정해서 올려놓으면 네트워크 부팅을 통해서 펌웨어를 업데이트 할 수도 있을 것이다.

pxebootmenu

 

postfix 큐관리

큐에 저장된 메일 메시지 관리방법

  1. queue에 저장된 모든 메시지 비우기(재전송)
    postfix flush 또는 postfix -f
  2. queue 에 저장되어있는 메시지 확인
    mailq 또는 postqueue -p
  3. 특정메시지 삭제
    postsuper -d 메시지ID
  4. 모든 메시지 삭제
    postsuper -d ALL
  5. 모든 지연된 메시지 삭제
    postsuper -d ALL deferred

Postfix 에 spf 추가하기

필자가 사용하는 gentoo 리눅스를 기준으로 하지만 다른 배포판도 설정은 비슷하다.

SPF설정
Sender Policy Framework (SPF) 란 메일을 발송하는 도메인에 대하여 검증을 하여 메일 위조 방지를 해주는 시스템이다. DNS 기반으로 동작하며 DNS의 TXT 레코드를 참고하며 그 설정을 기반으로 메일을 Accept하거나 Reject 한다.

http://www.nuxinfo.net/anti-spam-for-qmail/ 를 참고하도록 하자

 

  1. SPF 추가
    emerge pypolicyd-spf (Gentoo)
    sudo apt-get install postfix-policyd-spf-python (Ubuntu)
  2. master.cf  수정
    policyd-spf unix - n n - 0 spawn
          user=nobody argv=/usr/bin/policyd-spf
  3. main.cf 수정
    check_policy_service 를 추가해준다

    smtpd_recipient_restrictions = permit_mynetworks, 
      permit_sasl_authenticated, reject_unauth_destination, 
      check_policy_service unix:private/policyd-spf,
      reject_rbl_client bl.spamcop.net,
      reject_rbl_client dnsbl.sorbs.net,
      permit
  4. Postfix 재시작
    /etc/init.d/postfix restart
  5. 로그확인(/var/log/mail 또는 각자 시스템에서 설정한 로그파일)
    policyed-spf가 호출이 되고 메일송신쪽 시스템에 대한 SPF 체크를 하면 설정이 된 것이다.

    Aug 1 10:06:24 host1 policyd-spf[14944]: None;
    Aug 1 10:06:24 host1 policyd-spf[14944]: Pass;

linux shell스크립트 기초

이번 장에서는 시스템 관리자라면 반드시 알아야 될 쉘 스크립트에 대해서 알아볼까 한다.
쉘 스크립트를 잘 활용하면 단순 반복적인 작업을 손쉽게 할 수 있다.
리눅스의 기본 쉘인 Bash 쉘을 기본으로 하여 설명을 진행할 것이며 csh,tcsh 등등의 다른 쉘은
거의 비슷한 구조을 가지고 있으므로 나중에 따로 공부해 보기 바란다.

 

환경 변수

먼저 기본 쉘 환경 변수에 대해서 알아보도록 하자. 현재 시스템에 로그인 한 상태에서 printenv 명령으로 확인해 볼 수 있다.
기본적으로 bash쉘은 /etc/profile,/etc/bashrc 파일에 시스템 전체 유저에 대한 설정이 들어있다.
각 유저는 본인의 홈디렉토리/.bashrc 나 .bash_profile 파일을 이용해서 개별적인 설정이 가능하다.
시스템 마다 약간씩 차이가 있을 것이다.

아래는 필자의 시스템에서 printenv 명령으로 살펴본 환경변수이다.

[stone@mail ~]$ printenv 
HOSTNAME=mail.nuxinfo.net
SHELL=/bin/bash
TERM=linux
HISTSIZE=1000
SVN_EDITOR=/usr/bin/vim
USER=stone
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01
MAIL=/var/spool/mail/stone
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/mysql/bin:/home/stone/bin
INPUTRC=/etc/inputrc
PWD=/home/stone
LANG=en_US
SHLVL=1
HOME=/home/stone
LOGNAME=stone
CVS_RSH=ssh
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
_=/usr/bin/printenv
[stone@mail ~]$ 

 

변수 추가

쉘 스크립트에서 사용하는 변수를 추가하는 방법은 아래와 같다.

변수=변수값(변수와 변수값을 연결해주는 = 사이에는 절대로 공백이 있으면 안된다.)
ex)
EDITOR=/usr/bin/vim

즉 여러분이 원하는 변수는 쉘 프롬프트 상태에서 입력하면 바로 인식이 가능하다.
아래 예제를 보도록 하자.

[root@mail ~]# my_name="Kim Gyeong Min"
[root@mail ~]# echo $my_name
Kim Gyeong Min
[root@mail ~]#

설명을 하자면 my_name 이라는 변수에 Kim Gyeong Min 이라는 문자열을 추가했으며
echo 라는 명령어로 my_name 이라는 변수를 출력해 본 것이다.
변수를 호출할때는 반드시 $ 을 붙여주어야 한다.
로그아웃 할때까지는 저 변수는 계속 적용이 될 것이다. 하지만 로그아웃을 하는 순간 저 변수는 더이상 소용이 없게 된다.
따라서 항상 변수를 사용하고자 한다면 여러분의 홈디렉토리에 .bashrc 나 .bash_profile 에 추가해줘야 한다. 그러면 언제라도 사용이 가능하다.

기본적인 쉘 스크립트 이해하기

아래는 본인의 홈디렉토리에 test 디렉토리를 만드는 쉘 스크립트의 예제이다.
아래와 같은 내용으로 test.sh 파일을 생성해 보도록 하자.
vi test.sh
#!/bin/sh 또는 #!/bin/bash
mkdir $HOME/test

첫 라인에 있는 #!/bin/sh 또는 #!/bin/bash 는 아래에 나오는 스크립트를 /bin/sh 쉘이나 /bin/bash 쉘에서 해석하라는 이야기 이다.
참고로 기타 시스템에 설치된 여러가지 스크립트 언어도 사용이 가능하다.

#!/usr/bin/perl
#!/usr/bin/python
#!/usr/bin/php

 

쉘 스크립트를 실행하는 방법은 파일에 실행권한을 주는 방법과 쉘프롬프트에서 sh 파일명 형태로
직접 실행할 쉘을 명시해주는 방법이 있다.
실행 권한 주기

chmod 700 test.sh
./test.sh

./ 를 넣어주는 이유는 test.sh 파일은 PATH에 없기 때문에 현재 디렉토리라고 정확히 명시해주기 위해서이다.

쉘 프롬프트상에서 바로 실행하기

sh test.sh

 

이처럼 쉘 스크립트는 항상 똑같은 작업을 해야되는 경우 간단하게 스크립트를 실행함으로써 간편하게 작업을 할 수 있도록 도와준다.
기본적인 구조를 알았다면 다음장에서는 실제로 스크립트를 작성하는 방법에 대해서 알아보도록 하자.

linux LVM

LVM(Logical Volume Manager)
LVM이란 디스크 파티션이나 디스크 자체를 볼륨 그룹으로 만들고 그 위에 Logical 파티션을 생성해서
사용하도록 해주는 프로그램이다.
복잡하게 들릴지 모르겠지만 아래와 같은 상황이 발생했을 경우를 생각해 보도록 하자.
여러분의 리눅스 시스템이 /home 파티션을 10G로 할당을 했다. 그런데 유저들이 늘어나고 디스크 사용량이 많아져서 10G 로는 부족한 상황이 되었다.
이런 경우 여러분은 좀더 여유가 있는 디스크를 추가로 증설을 할 것을 고려할 것이다.
물론 디스크 추가를 위해서 시스템을 셧다운 시켜야 될 것이다.
LVM으로 시스템을 구축하면 이러한 경우 시스템을 셧다운 하지 않고서도 여러분은 /home 파티션을 쉽게 늘려줄 수가 있다.
LVM은 디스크나 파티션을 하나의 가상 디스크로 만들어서 디스크를 관리하는 시스템이다 라고 이해를 하면 된다.

 

앞장에서 배운 RAID과 데이터의 안정성에 기반을 두고 있다면 LVM은 디스크 관리의 효율성에 기반을 두고 있다고 보면 되겠다.
효과적인 디스크 관리를 원한다면 LVM을 사용해 보도록 하자.

 

먼저 아래의 그림을 보도록 하자.

lvm.jpg


용어 설명.

PV Physical Volume 으로 파티션 또는 디스크를 의미한다.
VG Volume Group으로 PV을 그룹화 한것이다.
LV Logical Volume으로 볼륨그룹(VG)에 가상의 파티션을 이야기한다.

LVM 생성

PV 생성하기

PV는 파티션이나 디스크 자체가 될 수 있다. 파티션을 PV로 만들기 위해서는 파티션 타입을 8e(Linux LVM)으로 설정해 주면 되겠다.
아래의 예를 보도록 하자.
/dev/sdb 에 각각 2G,1G 의 LVM 파티션을 설정하는 과정이다.

[root@linuxstudy ~]# fdisk /dev/sdb
Command (m for help): p
Disk /dev/sdb: 6442 MB, 6442450944 bytes
255 heads, 63 sectors/track, 783 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
Command (m for help): n 
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-783, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-783, default 783): +2000M
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 6442 MB, 6442450944 bytes
255 heads, 63 sectors/track, 783 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         244     1959898+  8e  Linux LVM
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
2
Invalid partition number for type `2'
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (245-783, default 245): 
Using default value 245
Last cylinder or +size or +sizeM or +sizeK (245-783, default 783): +1000M

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): p
Disk /dev/sdb: 6442 MB, 6442450944 bytes
255 heads, 63 sectors/track, 783 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         244     1959898+  8e  Linux LVM
/dev/sdb2             245         367      987997+  8e  Linux LVM

 

준비가 되었다면 이제 PV 을 생성해 보도록 하자.
pvcreate 라는 명령을 이용하면 되겠다.

[root@linuxstudy ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@linuxstudy ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created
[root@linuxstudy ~]# 

참고로 fdisk 과정을 거치지 않고 디스크를 통째로 사용도 가능하다..^^;

디스크를 통째로 PV로 만들기.

[root@linuxstudy ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created
[root@linuxstudy ~]# 

 

생성된 PV를 보고 싶다면 pvdisplay 명령을 수행하면 된다.

[root@linuxstudy ~]# pvdisplay 
  "/dev/sdb1" is a new physical volume of "1.87 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               1.87 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               LIzfUV-g1dF-17ze-8xxC-DI8H-I96k-eR86wA
   
  "/dev/sdb2" is a new physical volume of "964.84 MB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               964.84 MB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               XbYFbH-3bzf-a0EL-Jt0c-B0Sn-32Sy-dh3eSS
   
  "/dev/sdc" is a new physical volume of "8.00 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               8.00 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               L7wDn7-Pi5t-RnM3-LX5R-cCJ1-j8H9-xDEjOV
   
[root@linuxstudy ~]# 

 

VG 생성

vgcreate.

vgcreate 볼륨그룹이름 PV PV PV ...

이제 앞에서 만든 PV들을 묶어서 하나의 볼륨그룹(VG)로 생성해 보도록 하겠다.
/dev/sdb1 파티션과 /dev/sdb2 파티션을 VG0 이라는 이름으로 생성하는 예제이다.

[root@linuxstudy ~]# vgcreate VG0 /dev/sdb1 /dev/sdb2
  Volume group "VG0" successfully created
[root@linuxstudy ~]# 

 

생성된 VG를 확인해 보도록 하자.

[root@linuxstudy ~]# vgdisplay 
  --- Volume group ---
  VG Name               VG0
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               2.81 GB
  PE Size               4.00 MB
  Total PE              719
  Alloc PE / Size       0 / 0   
  Free  PE / Size       719 / 2.81 GB
  VG UUID               Xyye0d-VZGJ-gFfX-KLhU-LSe4-KK6r-2HkGP1
   
[root@linuxstudy ~]# 

 

LV 생성

이제 볼륨그룹(VG)에 LV를 생성해 보도록 하자.
LV생성.

lvcreate -L 용량 -n LV이름 VG이름

만들어진 볼륨그룹에 가상의 파티션을 생성하는 과정이라고 이해하면 되겠다.

[root@linuxstudy ~]# lvcreate -L 1.5G -n lvm_home VG0
  Logical volume "lvm_home" created
[root@linuxstudy ~]# 

VG0 볼륨그룹에 lvm_home 이라는 LV를 생성했다.
이제 일반적인 파티션처럼 mkfs 명령으로 포맷을 하고 사용하면 된다.
생성된 장치는 보통 /dev/VG명/LV명 형태로 생성이 된다.

LV 포맷 및 마운트

[root@linuxstudy ~]# mkfs /dev/VG0/lvm_home 
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
[root@linuxstudy ~]# mount /dev/VG0/lvm_home /home

 

제대로 mount가 되었다면 아래와 같이 나올것이다.

/dev/mapper/VG0-lvm_home on /home type ext2 (rw)

 

이렇게 생성된 LV는 차후에 자유롭게 용량을 늘렸다가 줄였다가 할 수 있다.
자세한 사용법은 다음장에서 진행하도록 하겠다.

linux기초강좌

리눅스 설치하기

Contents

1 CentOS 설치 준비
2 CentOS 설치 하기
2.1 설치 CD를 이용한 리눅스 설치
2.1.1 설치 시작
2.1.2 CD 체크
2.1.3 환영 메시지
2.1.4 설치 언어 선택
2.1.5 키보드 선택
2.1.6 파티션 설정

 

 

앞에서 말했듯이 강좌는 CentOS기준으로 작성이 될 것이며 최대한 설명을 많이 하는 형태로 진행해 볼까 한다.

 

* 주의 사항

만약에 PC에 리눅스를 설치하고자 한다면 기존에 설치되어 있는 OS를 실수로 삭제할수 있기 때문에 주의를 기울여서 설치를 해야 한다.
또한 Windows OS가 이미 설치된 PC에 리눅스를 설치하고자 한다면 리눅스 설치를 위한 파티션이 남아 있어야 한다.

 

 

1 CentOS 설치 준비

먼저 [http]http://ftp.daum.net/centos/5/isos/i386/ 에서 CentOS-5.4-i386-bin-*.iso 파일들을 다운로드 받는다.
총 6장의 CD가 있으며 어떤 용도로 리눅스를 설치하느냐에 설치CD개수가 틀려진다.일단 1~3번 CD 정도만 준비하자.
혹시 DVD 레코더를 가지고 있다면 [http]http://ftp.jaist.ac.jp/pub/Linux/CentOS/5/isos/i386/ 에서 DVD 이미지를 받을 수 있다.
본인의 위치에 따라서 속도가 빠른 미러서버를 [http]http://www.centos.org/modules/tinycontent/index.php?id=15 에서 찾을 수 있을것이다.
파일을 받았다면 CD 레코딩 프로그램을 이용해서 CD를 제작하도록 하자. CD레코딩하는 과정은 생략하도록 한다.

2 CentOS 설치 하기

리눅스를 설치하는 방법은 아주 여러가지가 있다.
플로피 디스크를 이용한는 방법,CD를 이용하는 방법,네트워크를 이용하는 방법,USB를 이용하는 방법 등등 수많은 설치 방법이 있다.
예전에는 플로피 디스크를 이용해서 많이들 설치했지만 현재는 플로피 디스크는 사라져가는추세이므로
가장 보편적인 방법인 설치 CD를 이용하는 방법을 먼저 설명하도록 하겠다.
CentOS 5.4를 기준으로 하면 총6장의 CD가 필요하지만 귀찮다면 네트워크 설치용 CD이미지를 받아서
네트워크를 이용해서 설치할수도 있다.
우리나라처럼 네트워크 속도가 빠른 경우에는 ftp,http 등을 이용해서 설치해도 30분 정도면 설치가 가능하다.
또한 로컬 네트워크가 구성되어 있는 환경이라면 pxe 부팅을 통해서 아무 설치 매체 없이도 네트워크 부팅을 통해서 리눅스를 설치할 수 있다.
PXE(Pre-boot eXecution Environment)란 네트워크 인터페이스를 통해 컴퓨터를 부팅할 수 있게 해주는 환경이다.
요즘의 대부분의 PC나 서버는 네트워크 부팅(PXE)환경을 지원한다.
이런 경우 네트워크에 네트워크 설치를 위한 서버들이 준비가 되어 있어야 한다.
예전에 작성한 [http]http://wiki.nuxinfo.net/wiki.php/kickstart 에서
대략적인 과정을 살펴볼 수 있을 것이다.

2.1 설치 CD를 이용한 리눅스 설치

설치CD를 만들었다면 PC를 켜고 Bios 셋업에 들어가서 CD로 부팅하도록 해두고 설치CD를 넣고 부팅하도록 하자.
참고:각 메뉴들의 이동은 Tab키와 커서키로 이동하면 된다.
정상적으로 진행이 되었다면 아래와 같은 화면을 볼 수 있을 것이다.

2.1.1 설치 시작

install_1.jpg


화면을 잘 보면서 설치를 시작해 보도록 하자.
boot: 상태에서 단순히 Enter 키를 입력하면 GUI환경에서 설치를 진행하게 된다.
사양이 낮거나 그래픽 카드가 잡히지 않는 경우에는 설치를 하지 못하는 경우가 있으므로
필자는 Text 모드에서 설치를 진행할 것을 권장한다.
또한 앞으로 리눅스를 공부하기 시작하면 대부분의 작업들이 Text모드에서 진행이 될것이라서
약간은 생소할지도 모르지만 text환경에 익숙해져 보도록 하자.
아래쪽에 보이는 F1~5까지의 function 키는 특별한 경우에 사용하는 옵션들이다.
설치할때 드라이버들이 필요한 경우나 시스템이 깨져서 복구가 필요한 경우등 처음 리눅스를 설치하는 경우라면 그냥 linux text 입력해서 설치부터 진행해 보도록 하자.

2.1.2 CD 체크

install_2.jpg


설치CD를 자주 사용하다 보면 스크래치가 생겨서 정상적으로 설치가 안되는 경우나 잘못 만들어진
설치CD에 대해서 점검을 하는 부분이다. 시간이 약간 걸릴 수 있으므로 만들어진 CD가 정상이라고 생각하고 Skip하도록 하자.

2.1.3 환영 메시지

install_3.jpg


환영메시지..^^;

2.1.4 설치 언어 선택

install_4.jpg


설치를 진행할 동안 사용할 언어 선택이다.
리눅스에서 사용할 언어를 선택하는것이 아니다..^^;

2.1.5 키보드 선택

install_5.jpg


리눅스에서 사용할 키보드 타입을 선택한다.기본적으로 us 를 선택하도록 한다.

2.1.6 파티션 설정

install_6.jpg


설치 과정중에서 가장 중요한 부분이다. 바로 파티션을 설정하는 부분이다.
나중에도 설명을 더 하겠지만 유닉스 계열들의 시스템은 안정성과 보안 또는 관리를 위해서
파티션을 많이 나눠서 사용하는 편이다.
잘못된 파티션은 나중에 리눅스를 재설치하거나 비효율적으로 사용하게 되는 경우가 있다.
따라서 파티션 계획은 실제 서버를 구동할 때 아주 중요하다.
예를 들면 리스 서버처럼 많은 계정 사용자들에게 공간을 할당해줘야 되는 경우 /home 파티션이
많이 필요한데(사실 반드시 home 파티션이어야 할 필요는 없다..^^) /home 파티션을 작게 잡은 경우 다른 여유 공간에 사용자 계정을 생성해야 되고
그렇게 되면 이곳 저곳에 사용자 계정들이 나눠지게 되어 관리 측면에서 귀찮게 될것이다.

*설명

  1. 선택한 드라이브의 모든 파티션을 삭제하고 기본 layout 으로 파티션 설정(주의-이미 설치된 OS파티션도 모두 삭제한다)
  2. 선택한 드라이브의 리눅스 파티션을 삭제하고 기본 layout으로 파티션 설정
  3. 선택한 드라이브의 남은 공간을 이용해서 기본 layout으로 파티션 설정
  4. 사용자 선택

 

[참고]
리눅스의 하드 디스크 장치는 IDE 타입의 하드 디스크의 경우에 hdX,sata 타입 또는 scsi타입의 하드 디스크일 경우에 sdX 의 형태로 구분이 된다.(X는 알파벳a~z)
시스템의 첫번째 하드 디스크는 a, 두번째 하드 디스크라면 b 가 되는것이다.
가끔은 c0d0 의 형태들도 볼 수 있을 텐데 보통 HP서버의 경우에서 볼 수 있다.
간단히 설명하자면 controller 번호(채널),디스크 번호 이렇게 보면 된다.
대형 시스템은 디스크 컨트롤 채널이 아주 많고 많은 디스크들을 컨트롤 하게 된다.

 

리눅스 파티션에 대한 이해가 조금 필요하므로 사용자 선택을 해보도록 한다.

install_7.jpg

 

새 파티션을 만들어야 하므로 New 를 선택해보자

install_8.jpg

 

Mount Point: 마운트 란 나중에 알게 되겠지만 장치를 연결하는 과정을 이야기 한다.
유닉스 계열들의 장치들은 파일로 이뤄져 있고 그 장치를 사용하기 위해서는 반드시 mount 과정을 거쳐야 사용할 수 있다. 유닉스 계열의 시스템은 반드시 / 가 존재해야 하므로 / 를 입력하도록 하자.
File system type: 만들 파티션의 파일시스템을 정해준다. 보통 많이 사용하는 ext3로 하자.
Allwable Drives: 파티션을 만들 하드 디스크를 선택한다.
Size: 파티션 사이즈를 정해준다.
Fixed Size: Size 에서 정해준 크기로 파티션을 설정한다.
Fill maximum size of: Size 에서 정해준 크기의 최대값을 정해준다. 즉 Size 에서 1000M를 잡아두고 여기에서 1500M 를 잡았다면 1500M로 지정이 된다.
Fill all available space: 하드 디스크의 남은 공간을 모두 사용한다.
Force to be a primary partition: 강제로 primary 파티션으로 설정한다.
[참고]
리눅스에서는 기본적으로 4개의 primary 파티션을 생성할 수 있다.
4개 이상의 파티션이 필요한 경우에는 extended 파티션을 만들고 그 안에 logical 파티션을 생성해서 많은수의 파티션을 사용할 수 있다.
IDE타입이 하드 디스크의 경우에 63개까지 생성이 가능하며
SCSI 타입의 경우 11~17개 까지 생성이 가능하다고 되어 있다.

 

일단 처음으로 리눅스를 설치한다면 간단히 / 와 swap 파티션만 만들어서 사용하도록 하자.
필자의 경우 8G 하드 디스크 이므로 / 파티션에 7G swap파티션에 1G정도를 할당하겠다.
실제 리눅스 서버의 경우에는 용도에 많게 많이 파티션을 나누어서 사용한다.
 swap 파티션이란?
swap파티션은 시스템에 설치된 물리적인 메모리(흔히 말하는 램)보다 큰 어플리케이션을 구동할때
램처럼 사용할수 있도록 해주는 특별한 파티션이다. 따라서 모든 시스템에 swap파티션이 필요한것은 아니지만 만약을 위해서 반드시 swap파티션을 설정해 주는것이 좋다.
보통의 책에서는 메모리의 2배로 설정하라고 하고있지만 시스템의 용도에 따라서 아주 많이 잡아줘야 되는 경우도 있으니 참고 하기 바란다.

 

install_8.jpg

 

install_9.jpg


/ 파티션과 swap 파티션만 설정했다. 다 되었다면 OK 실행해서 다음으로 가도록 하자

install_10.jpg


부트로더 설치 할 것인지 물어보고 있다. 사용한다고 선택하자.
부트로더란 말그대로 OS를 부팅 시켜주는 역할을 하는 프로그램이다.
리눅스의 대표적인 부트로더인 grub 을 사용하도록 하자.

install_11.jpg


부트로더에 특별한 설정을 하고자 할 경우에 사용한다.
일단 아무것도 넣지 않고 넘어가도록 하자

[참고]
리눅스 서버에 키보드 마우스가 없는 경우에 serial 케이블을 이용해서 console 에 접근 할 수도 있다.
네트워크쪽에서 일하거나 일하는 모습을 본적이 있는 사람이라면 노트북 가지고 와서 장비와 연결해서 뭔가 작업하는 모습을 본적이 있을것이다. 그게 보통 serial 통신으로 시스템 콘솔에 접속하는 것이다.
아래는 grub에 serial 설정을 하는 경우이다.
title My Linux
  root (hd0,0)
  kernel /vmlinuz-2.6.31 ro root=/dev/hda6 console=tty0 console=ttyS0,9600n8
  initrd /initrd-2.6.31.img

 

install_12.jpg


Grub 에 패스둬드 설정을 하는 부분이다. grub의 경우에 부팅 하기전에 여러가지 설정을 변경하면서
부팅할수 있는 잇점이 있다. 위에서 GRUB 패스워드를 정해준다면 grub 부팅 설정을 변경하기 위해서는
패스워드를 입력해야만 수정이 가능하다.

install_13.jpg


기본적으로 부팅할 커널에 대한 설정이다. 부팅시 보여줄 이름과 부팅시킬 파티션에 대한 설정이다.
기본값으로 그냥 두도록 하자.

install_14.jpg


부트로더를 어디에 설치할것인지에 대한 설정이다. 특별한 경우를 제외하고는 MBR에 설치하도록 한다.

install_15.jpg


네트워크 인터페이스를 설정하는 곳이다. 리눅스 시스템이 사용할 IP address 및 gateway,subnetmask 를 설정할 수 있다.
잘 모른다면 일단 No 를 선택해서 설정하지 말기 바란다. 나중에 원하는대로 설정이 가능하다.

install_17.jpg


리눅스 시스템의 이름을 정해준다.

install_18.jpg


시스템 날짜를 설정한다.

install_19.jpg


root 사용자의 패스워드를 설정한다. 설정한 패스워드를 잊어먹지 않도록 주의하자.

install_20.jpg


리눅스의 용도에 맞게 선택하면 된다. 리눅스 시스템을 이해하기 위해서는 최소한으로만 일단 설치하도록 하자. 설치 시간도 아낄겸..^^;
Server 를 선택해서 설치해보도록 하자.

install_22.jpg


install 시작.

install_23.jpg


리눅스 패키지 설치.

install_24.jpg


설치 완료. 재부팅을 선택하면 이제 리눅스의 세계로 들어갈 것이다.^^;

 

리눅스 배워보기

필자가 리눅스를 배우고 다루면서 느낀 몇 가지 조언을 해보고자 한다.

흔히들 처음 리눅스 하면 배우기 어렵고 난해하다고 생각할지도 모르겠지만 필자가 보기에는 리눅스 만큼
쉽고 매력적인 OS는 아마 없지 않나 싶다.
리눅스를 한번도 다뤄본적이 없는가? 아니다 이미 당신은 리눅스를 사용하고 있을지도 모른다.
휴대폰,PDA,인터넷 공유기,방화벽,라우터 등등 수많은 시스템에 리눅스가 적재가 되어 있다.^^;

* 무작정 일단 해봐라.
실제로 경험만큼 좋은 스승은 없다고 하지 않았는가!
예전에 컴퓨터는 깡통이다라는 책이 기억이 난다. 그렇다 컴퓨터는 단순한 기계다. 그 기계는 우리에 의해서 동작한다. 일단 마음껏 이것저것 시도해 보도록 하자.
잘못된 명령으로 컴퓨터가 폭발하는 일은 절대로 없다..^^;
* 메뉴얼을 반드시 읽어보자.
유닉스 계열의 혹은 기타 모든 시스템은 각자의 매뉴얼들이 준비가 되어있다.
메뉴얼을 읽어보는 습관을 무조건 갖자. 우리 인간의 머리는 한계가 있다.
자주 쓰는 명령어도 가끔을 헷갈릴 경우가 많다.
항상 메뉴얼을 뒤적거려보는 습관을 들이도록 하자.
* 에러 메시지를 두려워 하지 말자.
리눅스를 공부하면서 수많은 에러들을 보게 될 것이다.
미리 겁부터 먹지 말자. 컴퓨터는 정확하고 인간은 실수를 하는 법이다.
잘못된 명령만이 오류를 발생시킨다.^^;
command not found – 간단하다. 명령을 찾을수 없단다. 정확히 명령을 내리던지 명령이 수행될 수있도록만 해주자. 더이상 에러는 없을 것이다.
No such file or directory – 파일이나 디렉토리를 못찾는 단다. 왜 못찾는지 한번 확인해보자.
이처럼 유닉스 계열의 시스템은 사용자와 대화를 나누려고 한다.
겁먹지 말고 시스템과 대화를 나눠보자..^^;

왜 리눅스를 사용하는가?

* 리눅스는 자유롭다
당신은 리눅스를 사용함에 있어서 어떠한 제약이 없다.
로열티를 지불하지도 라이센스 비용을 지불하지 않아도 된다.
* 다양한 플랫폼에서 동작한다
i386 기반에서만 동작하는 windows 계열들 sparc에서만 동작하는 solaris 등
특정 플랫폼에서만 동작하는 OS와는 달리 리눅스는 아주 다양한 플랫폼을 지원한다.
아래는 리눅스 커널소스에서 살펴본 arch 디렉토리다.
[root@server arch]# pwd /usr/src/linux/arch
[root@server arch]# ls
alpha avr32 cris h8300 m32r m68knommu parisc ppc sh sparc um x86 arm
blackfin frv ia64 m68k mips powerpc s390 sh64 sparc64 v850 xtensa
[root@server arch]#
생소한 cpu 들이 보이지 않는가?
이처럼 리눅스는 아주 다양한 플랫폼에서도 동작을 함으로써 많은 용도로 사용이 가능하다.

* 진정한 멀티 태스킹 시스템이다.
리눅스에서 동작하는 모든 프로그램은 개별적으로 동작을 한다.
시스템에 문제가 되는 프로세서만 간단히 제거하면 시스템은 아무 문제없는 상태로 되돌아 갈것이다. Windows xp를 사용하면서 잘쓰고 있던 워드 프로세서가 인터넷 익스플로러 때문에 먹통이 된 경험을 한적이 있는가? 안심해라 리눅스는 그럴 일이 거의 없다.

* 저사양의 시스템에서도 동작한다.
요즘은 배포판의 크기들이 커져서 꽤 많은 메모리를 요구를 하며 꽤많은 하드 디스크를 요구하지만
실제로는 여러분이 원한다면 구닥다리 486 PC 에서도 리눅스를 설치해서 사용할 있다.
심지어는 1M도 안되는 플로피 디스켓으로도 리눅스를 운영할 수 있다.
집에 쓸데없이 뒹굴고 있는 구닥다리 PC가 있다면 리눅스로 훌륭한 공유기를 만들수도 있다.^^;

어떤 배포판을 사용 할 것인가

현재 우리는 수많은 배포판을 사용할 수 있으며 당신은 당신이 마음에 드는 배포판을 선택해서 리눅스를 설치할 수 있다.
래드햇,수세,맨드레이크,칼데라,데비안,슬렉웨어,젠투,CentOS,우분투,안녕리눅스 등등 당신의 입맛에 맞는 OS를 선택할 수 있다.
배포판 별로 약간씩의 차이는 있지만 기본적인 구조들은 모두 같다고 봐도 된다.