Cache사용을 자주 할 일이 없기에, 간혹 사용하더라도 ibatis 캐쉬를 쓰곤했다.

사용할 일이 있어 이참에 적극적(?)으로 사용하고자 memcache를 도입하려하다

linux 서버에 memcache deamon을 띄우는 설치/실행 절차를 정리해본다.


1) libevent 설치

 - memcached를 설치하기 위해선 기본적으로 libevent library가 필요하다.

 - http://monkey.org/~provos/libevent/ 에서 필요한 버젼을 받는다.

$ wget http://monkey.org/~provos/libevent-1.4.8-stable.tar.gz

$ tar -xvzf libevent-1.4.8-stable.tar.gz

$ cd libevent-1.4.8-stable

$ ./configure

$ make

$ make install

 - /usr/local/lib 하위에 library가 설치됨을 확인할 수 있다.



2) memcached 설치

 - http://memcached.org/latest 에서 최신 버젼을 다운 받아서 설치한다.

wget http://memcached.org/latest

$ tar -xvzf memcached-1.4.5.tar.gz 

$ cd memcached-1.4.5

$ ./configure (--prefix=/myprogram/memcached-1.4.5 --with-libevent=/usr/local/lib/  ) 생략가능

$ make

$ make install


 - configure 할때 위에서 설치된 libevent의 경로를 간혹 못 찾는 경우가 있는 듯하다.

   memcache 실행시 libevent를 못찾는다면 option을 추가한다.




3) 실행

$ ./memcached -p 11211 -d -u lkflower

 - configure 옵션을 주었지만 path를 못 찾는경우가 있는데;;; 아래 오류와 같이 뜨면서..

./memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory

$ ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/ 

처럼 symbolic 으로 처리하면 되겠다.


4) 확인

memcache가 잘 되는지 확인하기 위해 telnet으로 접속하여 stats 명령으로 확인해 본다. 

접속 포트는 위의 memcache 데몬을 올린 포트와 동일하다.

$ telnet 127.0.0.1 11211

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

stats

STAT pid 16129

STAT uptime 166

STAT time 1297756494

STAT version 1.4.5

STAT pointer_size 32

STAT rusage_user 0.001999

STAT rusage_system 0.001999

STAT curr_connections 10

STAT total_connections 11

STAT connection_structures 11

STAT cmd_get 0

STAT cmd_set 0

STAT cmd_flush 0

STAT get_hits 0

STAT get_misses 0

STAT delete_misses 0

STAT delete_hits 0

STAT incr_misses 0

STAT incr_hits 0

STAT decr_misses 0

STAT decr_hits 0

STAT cas_misses 0

STAT cas_hits 0

STAT cas_badval 0

STAT auth_cmds 0

STAT auth_errors 0

STAT bytes_read 7

STAT bytes_written 0

STAT limit_maxbytes 67108864

STAT accepting_conns 1

STAT listen_disabled_num 0

STAT threads 4

STAT conn_yields 0

STAT bytes 0

STAT curr_items 0

STAT total_items 0

STAT evictions 0

STAT reclaimed 0

END




이번에는 리눅스의 런 레벨에 대해 알아 보겠습니다. 우선 Run level이 무엇인지부터 알아야겠죠?
런레벨(Run level)이란, 시스템 관리의 용이함을 위하여 서비스의 실행을 단계별로 구분하여 적용하는 것을 말합니다.

런레벨은 0부터 6번까지 있는데요. 한번 알아보겠습니다.

# 0 - halt (DO NOT set initdefault to this)
시스템 종료를 의미합니다. 즉, 런레벨 0으로 변경하라는 명령을 내리면 시스템을 종료하는 것이죠.

# 1 - Single user mode
시스템 복원모드라고도 하며, 기본적으로 관리자 권한 쉘을 얻게 됩니다.
주로, 파일시스템을 점검하거나 관리자 암호를 변경할 때 사용합니다.

# 2 - Multiuser mode, without NFS (The same as 3, if you do ot have networking)
NFS(Network File System)을 지원하지 않는 다중 사용자 모드입니다.
네트워크를 사용하지 않는 텍스트 유저모드라고 할 수 있죠.

# 3 - Full muliuser mode
일반적인 쉘 기반의 인터페이스를 가진 다중 사용자 모드입니다.
쉽게 말하면 그래픽 유저 모드가 아닌 '텍스트 유저 모드'입니다.

# 4 - unused
4번은 쓰이지 않습니다. 기본적으로는 사용되지 않지만, 임의로 정의해서 사용할 수 있는 레벨입니다.

# 5 - X11
기본적으로는 level 3과 같습니다. 다른 점은 '그래픽 유저 모드' 라는것!!!

# 6 - reboot (DO NOT set initdefault to this)
시스템 재부팅을 의미합니다. 런레벨 6으로 변경하라는 명령을 내리면 시스템을 재부팅 하죠.



주로 사용하게 되는 것은 0, 3, 5, 6 을 많이 씁니다. 이 런레벨의 변경은 root 사용자의 경우만 가능합니다. 즉, 터미널 창에서 관리자 모드로 들어가 gedit /etc/inittab을 입력하면 런레벨을 바꿔줄 수 있습니다. 한번 해볼까요?




터미널 창을 켜고, 관리자 모드로 들어갑니다. gedit /etc/inittab 명령어를 입력해주세요.




그럼 아래와 같은 창이 켜지죠. 위에서 봤던 runlevel에 안내가 나옵니다.




그리고 그 간단한 안내 아래에서..! 런레벨을 바꿔줄 수 있습니다.
한번 텍스트 유저 모드로 바꿔볼까요? 블록한 부분을 봐주세요 :)




5를 3으로 바꿔주고 빨간색 네모로 강조한 '저장' 버튼 클릭하면 끝! 입니다 :)




그럼 이제 시스템을 다시 시작해볼까요? 아래 화면과 같이 텍스트 모드로 시작되는 것을 볼 수 있습니다. :)




다시 그래픽 유저 모드로 돌아가고 싶을 때는, init 명령어를 이용하시면 됩니다. 이렇게요. :)
inittab이나 init 명령어 처럼 런레벨을 변경하는 것은
오직 관리자 모드에서만 가능하므로 su - 부터 입력해주셔야합니다.




그럼 명령어 입력하기 무섭게 그래픽 유저 모드로 넘어가지요.






명령어 init단순히 런레벨을 변경해서 부팅하는 명령어이기 때문에
시스템 종료후, 이대로 다시 부팅하게 되면 텍스트 유저 모드로 부팅하게 됩니다.

다시 그래픽 유저 모드로 바꿔주려면,
 로그인하셔서 아까처럼 터미널 창에서 관리자 모드로 바꿔주고 gedit /etc/inittab 입력후
inittab창에서 id:3:initdefault → id:5:initdefault 로 바꿔주시면 됩니다. :)


1) 데몬의 종류

데몬이란 시스템에 백그라운드 모드로 수행중이며 어떤 사건, 즉 이벤트를 기다리거나 주기적으로 주어진 작업을 수행하기 위하여 대기하고 있는 프로세스를 의미한다. 일반적으로 데몬프로세스는 이름끝에 'd'자가 붙는다.
기본적으로 리눅스에는 여러 기능과 서비스를 제공하기 위한 다양한 데몬 프로세스들이 시스템에서 돌아가고 있다.
이런 서비스 데몬들의 실행여부는 레드햇 리눅스 계열에서 ntsysv 커맨드로 조정하면 된다. 리눅스상에서 현재 실행되고 있는 데몬의 현황을 보려면 pstree 커맨드를 쓴다.

데몬의 실행방식은 크게 stand-alone방식과 xinetd(슈퍼데몬)방식이 있다.
 # Stand-alone방식
(말뚝보초처럼 항상실행대기)
이 방식의 데몬들은 데몬이 시작되면 말 그대로 자기 스스로 시스템에서 상주하며 클라이언트 요청에 응답을 보내주는 방식으로 보통 아파치 데몬처럼 클라이언트의 요청이 잦은 데몬들이 이런 방식으로 실행된다. 스탠드 얼론방식의 데몬을 확인하려면 쉘상에서 pstree 명령을 내리면 데몬들을 트리형식으로 보여준다. 스탠드 얼론 방식의 데몬들은 xinetd방식보다는 클라이언트 요청에 신속하게 대응한다는 장점은 있으나 이런 스탠드 얼론 데몬들이 시스템에서 많이 생성되게되면 시스템의 자원낭비가 심해지게 되고 퍼포먼스도 떨어지게 된다.

 # inetd방식
(클라이언트 요청이 있을때만 실행)
스탠트 얼론처럼 자기 스스로 독립적으로 시스템에 실행되는게아니라 xinetd라는 수퍼데몬이 시스템에서 대기하고 있다고 클라이언트 요청이 들어오면 xinetd데몬에 의해 해당 서비스를 제공해줄 데몬을 실행시키는 방식이다. telnet이나 ftp같이 비교적 클라이언트 요청의 빈도가 낮은 서비스들은 이런 xinetd데몬이 시스템 활용측면에서는 유리하다. 또한 tcp wrapper를 써서 보안을 손쉽게 설정할 수 있는 것도 장점이다. 그러나 전술한 아파치 데몬같이 클라이언트의 자잘한 요청이 많은 서비스에 대해서는 inetd방식이 시스템효율을 도리어 떨어드리게된다. xinetd데몬은 스탠드 얼론방식으로 실행되는 슈퍼데몬이며 서비스 요청시 xinetd데몬의 차일드 프로세스로 다른 데몬이 실행된다. 이를 확인하려면 pstree로 xinetd데몬을 확인하고 다른 한텀창에서 telnet이나 ftp로 자신의 호스트에 접속해보라. 그럼 xinetd데몬에서 차일드 프로세스로 해당 데몬이 실행되는 것을 확인할 수 있다.

 

 

2) /etc/rc.d/init.d/ 데몬 설명

/etc/rc.d/init.d/autofs
오토마운트 파일시스템(Automount Filesystem) 데몬 스크립트입니다. 파일시스템 사용을 요구받았을 경우에는 마운트를 하고 파일시스템 사용이 끝났을 경우에는 마운트를 해제하게 됩니다.

/etc/rc.d/init.d/crond
cron 데몬 스크립트입니다. 여러분들께서도 잘 아시는 바와 같이 cron은 특정한 시간에 지정된 작업을 주기적으로 하도록 하는 리눅스 작업관리자 데몬입니다. 이런 cron데몬을 시작, 재시작 또는 종료시키는 스크립트입니다.

/etc/rc.d/init.d/functions
리눅스 시스템의 /etc/rc.d/init.d/디렉토리내의 거의 모든 쉘 스크립트에서 사용되어지는 함수를 내장하고 있는 파일입니다.

/etc/rc.d/init.d/gpm
GPM은 Midnight Commander와 같은 텍스트기반의 리눅스 어플리케이션에서 마우스의 복사 및 붙이기 기능과 콘솔상에서의 마우스 팝업기능을 제공하기 위한 데몬입니다.

/etc/rc.d/init.d/halt
halt는 시스템이 런레벨(runlevel) 0또는 런레벨(runlevel)6로 실행이 될 때에 init 프로세스에 의해 실행되는 스크립트로서 현재 시스템에 실행된 모든 프로세스를 죽이고 모든 파일시스템의 마운트를 해제한 후에 시스템을 종료(halt)시키거나 재부팅(reboot)합니다.

/etc/rc.d/init.d/iptables
iptables는 /etc/sysconfig/iptables에 미리 정의된 룰에 따라서 리눅스 서버의 방화벽을 실행 및 중지하기 위한 스크립트입니다. 즉, iptables로 구현하는 패킷필터링(packet filtering)방화벽입니다.

/etc/rc.d/init.d/irda
IrDA (Infrared Data Association)데몬 스크립트로서 IrDA는 무선통신, 적외선 통신을 위한 산업표준입니다. IrDA는 최근 거의 모든 장치들(laptops, LAN아답터, PDA, 프린터, 휴대폰등)에 사용될 수 있으며 9600bps에서 4Mbps의 속도범위를 가집니다.

/etc/rc.d/init.d/isdn
isdn 서비스를 시작하거나 종료하는 스크립트입니다.

/etc/rc.d/init.d/kdcrotate
/etc/krb5.conf에 정의되어 있는 KDC 리스트를 회전시키는 스크립트입니다.

/etc/rc.d/init.d/killall
현재 실행중인 서비스들을 대상으로 모두 중지시키는 스크립트입니다. 따라서 이 스크립트는 주로 시스템을 중지하거나 재시작할 때에 실행되는 스크립트입니다.

/etc/rc.d/init.d/kudzu
kudzu데몬은 새로운 하드웨어나 또는 변경된 하드웨어를 조사하여 설정하는 데몬입니다. 또한 kudzu데몬은 현재의 하드웨어 정보와 /etc/sysconfig/hwconf에 저장해 하드웨어 정보를 비교하여 변경된 하드웨어 또는 해로운 하드웨어가 존재하는가를 알아냅니다.
즉, 시스템 하드웨어의 변경 또는 새로운 하드웨어의 추가장착등과 같은 하드웨어에 대해 조사하는 kudzu데몬을 시작시키거나 종료하는 스크립트입니다.

/etc/rc.d/init.d/netfs
Network Filesystem(NFS)와 SMB(Lan Manager/Windows ), NCP(NetWare)를 마운트 시키거나 마운트 해제하는 데몬 스크립트입니다.

/etc/rc.d/init.d/network
리눅스 서버의 통신을 가능하도록 하기 위하여 관련 파일에 설정되어 있는대로 네트워크 설정을 하거나 중단하는 스크립트입니다.

/etc/rc.d/init.d/nfs
NFS 서비스 데몬을 시작(종료, 재시작)하는 스크립트입니다. NFS는 TCP/IP 네트워크상에서 파일공유를 위해 많이 사용되고있는 프로토콜입니다. 이 스크립트로 NFS서비스를 실행하면 /etc/exports파일의 설정대로 NFS서버기능을 할 수 있도록 설정합니다.

/etc/rc.d/init.d/nfslock
NFS파일 락킹서비스를 시작(종료,재시작)하는 스크립트입니다.

/etc/rc.d/init.d/nscd
네임서비스 캐쉬데몬(Name Service cache Daemon)을 시작하는 스크립트입니다. NSCD데몬은 가장일반적인 네임서비스에 대한 캐쉬기능을 제공하는 데몬으로서 /etc/passwd, /etc/group, /etc/hosts파일등에 대한 캐쉬정보를 가지고 있습니다. NSCD데몬의 설정파일은 /etc/nscd.conf입니다.

/etc/rc.d/init.d/pcmcia
pcmcia 데몬을 시작(종료)하기 위한 스크립트입니다. PCMCIA는 일반적으로 노트북등에서 사용되는 장치(모뎀, 이더넷등)를 지원하기 위한 것입니다.

/etc/rc.d/init.d/portmap
RPM 포트맵퍼(portmap daemon)을 시작(종료)하는 스크립트입니다. 일명 포터맵퍼(portmapper)라고 합니다. 이 portmapper는 NFS와 NIS 등과 같은 프로토콜이 사용되는 RPC연결을 제어하는 역할을 합니다. 따라서 이 portmapper는 RPC매카니즘을 사용하는 프로토콜이 탑재되어있어 서버로 사용되는 시스템에서는 반드시 실행되어있어야 합니다.

/etc/rc.d/init.d/random
리눅스 시스템에서의 난수사용을 위하여 난수발생데몬인 random을 시작시킵니다.

/etc/rc.d/init.d/rawdevices
하드드라이브 파티션과 같은 블록장치에 rawdevice를 할당하는 스크립트입니다. 잘아시는 Oracle과 같은 어플리케이션에서 사용될 수 있습니다. /etc/sysconfig/rawdevices파일을 수정, 편집함으로써 rawdevice에 블록장치매핑과 할당을 할 수 있습니다.

/etc/rc.d/init.d/single
시스템 실행레벨(runlevel) 1로 가고자 할 때 사용하는 스크립트입니다. 이 스크립트가 실행되면 시스템의 모든 프로세스들을 죽인 다음 시스템을 실행레벨 1상태로 만들어 줍니다. 실행레벨 1상태는 관리자(root) 전용모드입니다.

/etc/rc.d/init.d/sshd
sshd라는 OpenSSH서버데몬을 실행(중지)하는 스크립트입니다. telnet과는 달리 ssh는 암호화하여 통신을 하기 때문에 보안을 위한 통신방법으로 주로 사용됩니다. Telnet처럼 원격서버 로그인을 하는 ssh를 사용하려면 sshd데몬이 실행되어 있어야합니다. 이 스크립트는 sshd데몬을 실행시켜주는 스크립트입니다. 참고로 ssh는 TCP 22번과 UDP 22번을 사용합니다.

/etc/rc.d/init.d/syslog
syslog는 리눅스 시스템의 필수적인 로깅시스템입니다. 이런 로깅시스템을 시작(종료)하는 스크립트입니다. 이 스크립트에 의해 로깅시스템의 데몬인 syslogd가 실행되면 /etc/syslog.conf파일을 참조하여 각 설정에 해당하는 조건이 되면 지정된 로그파일에 로그메시지를 기록합니다. 로그파일이 기록되는 디렉토리는 /var/log/이며 대표적인 로그파일로는 /var/log/messages, /var/log/secure, 그리고 /var/log/maillog등이 있습니다. 이 스크립트에 의해 실행되는 데몬은 /sbin/syslogd와 /sbin/klogd가 있습니다.
/sbin/syslogd는 로깅시스템의 주된 그리고 일반적인 로그메시지를 기록하는 주데몬이며 klogd는 커널메시지를 기록하는 커널로그데몬입니다. 그리고 서버의 로그메시지를 원격서버에 실시간으로 저장하고자 한다면 syslogd데몬 실행시에 -r옵션을 사용하여 실행하시기 바랍니다. 참고로 syslogd는 UDP 514번을 사용합니다.

/etc/rc.d/init.d/xinetd
리눅스 서버의 인터넷 수퍼데몬인 XINETD데몬을 실행시키거나 중지시키는 데몬입니다. Xinetd는 TCP_Wrapper와 함께 사용되며 대부분의 인터넷 서비스들을 관장하며 telnet이나 ftp등과 같은 특정 서비스요청을 사용자프로세스와 서비스데몬을 연결시켜주는 역할을 합니다.

/etc/rc.d/init.d/ypbind
NIS/YP 클라이언트 시스템에서 실행되는 데몬으로서 NIS 도메인(domain)에 바인드시키는 역할을 합니다. NIS클라이언트에서 수행되기 위하여 반드시 glibc 기반 시스템에서 실행되어야합니다. 하지만 NIS를 사용하지 않는 시스템에서 실행되어져서는 안됩니다.


'OS > LINUX' 카테고리의 다른 글

Linux서버에 Memcached 설치/실행 하기  (0) 2011.06.09
리눅스의 런레벨(Run level)  (0) 2011.06.09
[/etc/rc.d/init.d/*] 데몬 실행 스크립트의 이해  (0) 2011.06.09
/dev/null 다시 만들기  (0) 2011.06.04
/dev/zero와 /dev/null  (0) 2011.06.04

1. 심볼릭링크

 

윈도우XP에서 한글2005를 실행시킬때의 구조를 살펴보자.

설치시 특별히 디렉토리를 변경하지 않았다면, 실행파일은 다음의 위치에 있다.

 

    C:\HNC\Hwp65\hwp.exe

 

그러나, 우리는 탐색기를 열어서.. C:\HNC\Hwp65\hwp.exe 파일을 더블클릭해서 직접 실행하지는 않는다.

보통은, '시작>프로그램>한글과컴퓨터>한글2005>한글 2005' 를 실행하거나,

아니면, 바탕화면의 단축아이콘을 더블클릭한다.

 

단.축.아.이.콘...!!

윈XP에서의 단축아이콘이 리눅스에서의 심볼릭링크이다.

 

 

2. /etc/rc.d/init.d/* 파일들의 이해

 

MS윈도우즈에서 프로그램을 설치하면 대부분 'C:\Program Files' 안에 설치된다.

물론, 다른 디렉토리에 설치해도 된다.

 

리눅스도 각각의 프로그램들(데몬들)을 원하는 디렉토리에 설치할 수 있다.

rpm으로 설치한다면, 특정 디렉토리가 지정되어 있겠지만...

소스로 설치할 때는 원하는 디렉토리에 설치한다.

apache를 소스설치할 때, --prefix 옵션으로 설치 디렉토리를 지정할 수 있는 것처럼 말이다.

물론, 관습적으로 대부분 /usr/local/ 밑에 설치하는 경향이 많다.

 

이렇게 각각의 디렉토리에 설치된 각각의 데몬들을 실행하거나, 중지하는 등의 관리를 할 때는 상당히 불편하다.

각 데몬이 어디에 설치되어 있는지 모두 알아야 하기 때문이다.

 

생각해보자.

어느누가 네임서버 데몬을 실행시키는데...

 

    # /usr/sbin/named

 

와 같이 데몬의 실행파일을 직접 실행시키겠는가..??

 

보통은...

 

    # /etc/rc.d/init.d/named start

 

와 같이 실행시킨다...

 

그렇다. 각 데몬의 실행파일들이 어디에 있는지와 상.관.없.이,

관리의 편의를 위하여....

각 데몬들을 실행할 수 있게 만든 쉘스크립트 파일모아놓고 관리를 한다.

그 디렉토리가 /etc/rc.d/init.d/ 디렉토리이며,

/etc/rc.d/init.d/ 밑의 모든 파일들은 vi 편집기로도 열리는, 쉘스크립트 파일들이다.

 

마치, 윈XP에서 각 프로그램들을 하드에 설치하고..

실행할 때는 '시작>프로그램>....' 에서 실행하는 것과 비슷하다.

 

 

3. 런레벨의 이해

 

기본적으로 다음 두 가지는 알고 있다고 가정하자.

 

① 런레벨 종류

    - 런레벨 1 : 싱글모드 부팅. MS윈도우즈의 안전모드와 비슷

    - 런레벨 3 : 콘솔모드로 부팅

    - 런레벨 5 : X 윈도우로 부팅

    - 런레벨 6 : 계속 재부팅만 한다.

 

② 런레벨 수정

    - /etc/inittab 파일에서 다음 항목의 숫자를 직접 수정함으로 변경 가능

      id:3:initdefault:

 

이제, 윈XP의 '시작>프로그램>시작프로그램' 을 생각해 보자.

시작프로그램에 특정 프로그램을(프로그램의 단축아이콘을) 등록해 놓으면,

컴퓨터를 켤 때 그 프로그램이 자동으로 실행된다.

 

리눅스도 시작할 때 자동으로 실행될 프로그램(=데몬)을 등록할 수 있다.

윈XP에서는 '시작프로그램'에 등록하지만, 리눅스는 디렉토리에 심볼릭링크를 만들어서 등록한다.

 

    - /etc/rc.d/init.d/rc3.d   : 런레벨 3으로 부팅될 때 자동실행할 데몬을 등록하는 곳

    - /etc/rc.d/init.d/rc5.d   : 런레벨 5로 부팅될 때 자동실행할 데몬을 등록하는 곳

 

필자는 런레벨 3으로 부팅하며, 다음과 같은 심볼릭링크 파일들을 볼 수 있다.

 

    # cd /etc/rc.d/rc3.d/
    # ls -al
    drwxr-xr-x    2 root     root         4096 12월 15 10:32 ./
    drwxrwxr-x   10 root     root         4096 12월 15 19:02 ../
    lrwxrwxrwx    1 root     root           13 12월 15 19:01 K15gpm -> ../init.d/gpm*
    lrwxrwxrwx    1 root     root           20 12월 15 19:02 K44rawdevices -> ../init.d/rawdevices*
    lrwxrwxrwx    1 root     root           18 12월 15 19:02 K45arpwatch -> ../init.d/arpwatch*
    lrwxrwxrwx    1 root     root           15 12월 15 19:02 K75netfs -> ../init.d/netfs*
    lrwxrwxrwx    1 root     root           15 12월 15 10:30 K95kudzu -> ../init.d/kudzu*
    lrwxrwxrwx    1 root     root           17 12월 15 19:02 S10network -> ../init.d/network*
    lrwxrwxrwx    1 root     root           16 12월 15 19:01 S12syslog -> ../init.d/syslog*
    lrwxrwxrwx    1 root     root           18 12월 15 19:00 S17keytable -> ../init.d/keytable*
    lrwxrwxrwx    1 root     root           16 12월 15 19:02 S20random -> ../init.d/random*
    lrwxrwxrwx    1 root     root           17 12월 15 19:02 S29sysstat -> ../init.d/sysstat*
    lrwxrwxrwx    1 root     root           15 12월 15 10:32 S55named -> ../init.d/named*
    lrwxrwxrwx    1 root     root           16 12월 15 19:02 S56xinetd -> ../init.d/xinetd*
    lrwxrwxrwx    1 root     root           15 12월 15 19:02 S90crond -> ../init.d/crond*
    lrwxrwxrwx    1 root     root           11 12월 15 19:02 S99local -> ../rc.local*
    lrwxrwxrwx    1 root     root           23 12월 15 19:02 S99oops-firewall ->
../init.d/oops-firewall*

 

디렉토리 안을 살펴보니, 모두 심볼릭링크 파일이라는 것을 알 수 있다.

심볼릭링크 파일은 제일 앞의 퍼미션을 나타내는 부분이 'l' 로 시작되며,

어떤 파일을 심볼릭링크했는지 화살표로 표시해 준다.

 

살펴보면, 모든 심볼릭링크의 원본파일들이 상위 디렉토리(../)의 init.d 디렉토리 내의 파일들,

, /etc/rc.d/init.d/파일들 이라는 것을 볼 수 있다.

따라서, 각 데몬의 실행파일을 관리하는 스크립트 파일들을 심볼릭링크한 것이다.

 

/etc/rc.d/rc3.d/ 밑의 파일들의 파일명을 살펴보면 다음과 같은 형식이다.

 

  S[혹은 K]{숫자}{데몬파일명}

 

S 로 시작되는 링크파일은 부팅할 때 시작(Start)되는 스크립트파일이다.

K 로 시작되는 링크파일은 부팅할 때 시작되지 않는(Kill) 스크립트파일이다.

 

{숫자}는 실행되는 우선순위를 나타낸다.

crond 데몬보다, named 데몬이 중요하고 꼭 실행되어야 한다면... crond 링크보다 숫자를 낮은 숫자로 하면 된다.

예전에는 컴퓨터(서버)의 사양이 좋지 않아, '어떻해도 가장 중요한 데몬'을 실행시키기 위해서 있었지만..

지금은 별 의미가 없다..

실행되지 않을 정도의 하드웨어 사양을 찾기가 힘들다... ^^;

{숫자}는 같은 숫자로 중복해서 사용할 수도 있다.

 

ntsysv 명령어로 각 데몬을 체크하거나, 체크를 지우는 것도...

알고보면 S 를 K 로 바꾸거나, K 를 S 로 바꾸는 작업이다.

 

/etc/rc.d/rc3.d/ 디렉토리에서는 S로 시작해서 심볼릭링크가 되어 있고,

/etc/rc.d/rc5.d/ 디렉토리에서는 K로 시작해서 심볼릭링크가 되어 있다면...

같은 /etc/rc.d/init.d/ 밑의 같은 데몬스크립트 파일이라고 하더라도..

런레벨마다 실행되거나, 실행되지 않을 수 있다.


출처 :
http://cafe.naver.com/asii/857

'OS > LINUX' 카테고리의 다른 글

리눅스의 런레벨(Run level)  (0) 2011.06.09
데몬의 종류, /etc/rc.d/init.d/  (0) 2011.06.09
/dev/null 다시 만들기  (0) 2011.06.04
/dev/zero와 /dev/null  (0) 2011.06.04
Perl 입문  (0) 2011.05.17

# mknod /dev/null  c  2  2
퍼미션을 644 -> 666으로 변경(?)

'OS > LINUX' 카테고리의 다른 글

데몬의 종류, /etc/rc.d/init.d/  (0) 2011.06.09
[/etc/rc.d/init.d/*] 데몬 실행 스크립트의 이해  (0) 2011.06.09
/dev/zero와 /dev/null  (0) 2011.06.04
Perl 입문  (0) 2011.05.17
프로세스 - fork & exec  (0) 2011.05.14

/dev/zero/dev/null

/dev/null의 쓰임새

/dev/null"블랙홀"이라고 상상해 보세요. 이 파일은 거의 읽기 전용 파일이나 마찬가집니다. 이 파일에 쓰는 모든것은 영원히 사라져 버릴겁니다. 이 파일에서 무언가를 읽으려고 하거나 어떤 결과를 바라는 것은 무의미한 일입니다. 그럼에도 불구하고, /dev/null은 명령어 줄이나 스크립트에서 아주 유용하게 쓸 수 있습니다.

표준출력이나 표준에러 막기(예 30-1에서 인용):

rm $badname 2>/dev/null
#           에러 메세지[stderr]는 완전히 사라져 버립니다.

파일 자체와 모든 퍼미션은 그대로 가지면서 내용만 지우기(예 2-1예 2-2에서 인용):

cat /dev/null > /var/log/messages
#  : > /var/log/messages   라고 해도 같지만, 이렇게 하면 새 프로세스를 띄우지 않습니다.

cat /dev/null > /var/log/wtmp

로그 파일의 내용을 자동으로 비우기(상용 웹 사이트에서 보내는 귀찮은 "쿠키"를 처리할 때 특별히 좋습니다):

예 29-1. 쿠키 항아리를 숨기기

if [ -f ~/.netscape/cookies ]  # 있다면 지우고,
then
  rm -f ~/.netscape/cookies
fi

ln -s /dev/null ~/.netscape/cookies
# 이제 모든 쿠키는 디스크에 저장되지 않고 블랙홀로 보내집니다.
/dev/zero의 쓰임새

/dev/zero/dev/null처럼 가상 파일(pseudo file)이지만, 실제로 널 값을 갖고 있습니다(아스키 문자 0이 아닌 숫자 0). 이 파일에 무언가를 쓰면 그 출력은 사라집니다. 이 파일에서 널 값을 읽어 내는 것은 아주 어렵습니다만 od 명령어나 헥사 에디터로 할 수는 있습니다. /dev/zero는 특정한 길이의 초기화된 더미 파일을 임시 스왑 파일로 만드는데 주로 쓰입니다.

예 29-2. /dev/zero로 스왑 파일 세팅하기

#!/bin/bash

# 스왑 파일 만들기.
# 루트로 실행시키세요.

ROOT_UID=0         # 루트 $UID 는 0.
E_WRONG_USER=65    # 루트가 아님.

FILE=/swap
BLOCKSIZE=1024
MINBLOCKS=40
SUCCESS=0

if [ "$UID" -ne "$ROOT_UID" ]
then
  echo; echo "이 스크립트는 루트만 실행시킬 수 있습니다."; echo
  exit $E_WRONG_USER
fi  
  

if [ -n "$1" ]
then
  blocks=$1
else
  blocks=$MINBLOCKS              # 명령어줄에서 지정해 주지 않으면 
fi                               # 40 블럭을 기본값으로 세트.

if [ "$blocks" -lt $MINBLOCKS ]
then
  blocks=$MINBLOCKS              # 최소 40 블럭이어야 됩니다.
fi  


echo "Creating swap file of size $blocks blocks (KB)."
dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks  # Zero out file.

mkswap $FILE $blocks             # Designate it a swap file.
swapon $FILE                     # Activate swap file.

echo "Swap file created and activated."

exit $SUCCESS

/dev/zero의 다른 응용으로는, 파일이 0으로만 이루어진 지정된 크기를 갖게 하는 것인데, 루프백 디바이스를 마운트 하는 등의 특별한 목적을 위해 쓰입니다. 예 13-6예 12-33를 참고하세요.

예 29-3. 램디스크 만들기

#!/bin/bash
# ramdisk.sh

#  "ramdisk" 란 시스템의 RAM 의 일정 부분(segment)을 
#+ 파일시스템처럼 쓰는 것을 말합니다.
#  램디스크의 장점은 읽고/쓰기가 아주 빠르다는데 있습니다.
#  단점: 휘발성이 있기 때문에 시스템이 리부트되거나 꺼지면 그 내용을 잃어버립니다.
#        램디스크로 할당한 만큼의 메모리를 못 쓰게 됩니다.
#
#  램디스크가 뭐가 좋을까요?
#  테이블이나 사전처럼 아주 큰 데이타를 램디스크에 올려 놓으면
#+ 디스크 접근 속도보다 메모리 접근 속도가 훨씬 빠르기 때문에 데이타 탐색 속도가 빨라집니다.


E_NON_ROOT_USER=70             # 루트로 실행.
ROOTUSER_NAME=root

MOUNTPT=/mnt/ramdisk
SIZE=2000                      # 2K 블럭(필요에 따라 수정)
BLOCKSIZE=1024                 # 1K (1024 byte) 블럭 크기
DEVICE=/dev/ram0               # 첫번째 램 디바이스

username=`id -nu`
if [ "$username" != "$ROOTUSER_NAME" ]
then
  echo "\"`basename $0`\" 는 루트로 실행시켜야 됩니다."
  exit $E_NON_ROOT_USER
fi

if [ ! -d "$MOUNTPT" ]         #  마운트 포인트가 존재하는지 확인해서
then                           #+ 이 스크립트를 여러번 실행시켜도 에러가 나지 않도록 함.
  mkdir $MOUNTPT              
fi

dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE  # 램 디바이스 초기화(zero out).
mke2fs $DEVICE                 # 램 디스크에 ext2 파일시스템을 만들고,
mount $DEVICE $MOUNTPT         # 마운트.
chmod 777 $MOUNTPT             # 일반 사용자도 접근 가능하게.
                               # 하지만 언마운트는 루트만.

echo "이제 \"$MOUNTPT\" 를 쓸 수 있습니다."
# 이제부터는 일반사용자까지도 램디스크에 파일을 저장할 수 있습니다.

#  주의할 점은 램디스크가 휘발성을 갖기 때문에 리부트나 전원이 꺼질 때에는
#+ 그 내용이 없어집니다. 
#  저장하고 싶은 것이 있다면 램디스크가 아닌 일반 디렉토리로 복사해서 쓰면 됩니다.

# 리부트후에 램디스크를 다시 셋업하고 싶다면 이 스크립트를 실행시키면 됩니다.
#  /mnt/ramdisk 를 이 스크립트를 통하지 않고 
#+ 다른 방법으로 다시 마운트하려고 한다면 제대로 동작하지 않을 것입니다.

exit 0

'OS > LINUX' 카테고리의 다른 글

[/etc/rc.d/init.d/*] 데몬 실행 스크립트의 이해  (0) 2011.06.09
/dev/null 다시 만들기  (0) 2011.06.04
Perl 입문  (0) 2011.05.17
프로세스 - fork & exec  (0) 2011.05.14
쉘 스크립트 #6  (0) 2011.05.14
유닉스의 grep 과 유사한 명령어가 윈도우에 있는데, findstr 이라는 이름으로 되어 있습니다. 정규식(정규표현식)도 사용이 가능합니다. 그러나 유닉스 grep처럼 그렇게 강력하지는 않습니다.

윈도우의 도스창(CMD 명령프롬프트)에서,

findstr/?

이라고 입력하면 도움말이 나옵니다. 사용법도 그렙과 비슷합니다. 예를 들어, 현재디렉토리에 있는 모든 txt 확장자를 가진 텍스트 파일들 속에서 apple 이라는 단어를 대소문자 구분없이 찾으려면

findstr /i apple *.txt

이렇게 하면 됩니다. 모든 파일(*.*)에서, 아라비아 숫자로만 이루어져 있는 행들을 찾으려면

findstr ^[0-9]$ *.*

이렇게 정규식을 사용합니다.

출처 : http://mwultong.blogspot.com/

forfiles.exe /p "경로" /s /m *.* /d -일 /c "cmd /c del @path"

+ Recent posts