데몬이 뭐냐하면 시스템에 관련된 후위 프로세스를 말하는데요. 즉 시스템을 시작하면 시스템에 필요한 프로세스들이 있는데 이것들이 데몬이죠.

telnetd daemon, ftpd daemon, httpd daemon, inetd daemon, squid daemon, sendmail daemon, bind nameserver daemon, routed daemon 뭐 이런 데몬들이 있다는데 어려운건 다 집어치우고, 그냥 쉽게 말해서 계속 메모리에 상주해 있는겁니다. 대신 부모프로세스는 유닉스의 가장 최상단 프로세스인 init프로세스의 ID인 1입니다.

이눔을 죽일 때에는 KILL로 밖에 못죽이는 것이죠.

간단합니다. 그냥 자식 프로세스를 생성하고, 부모를 죽여버리면 돼요-_-;

fork_daemon.c (Language : c)
#include <stdio.h>

int main()
{
        int pid, ppid;
        pid = fork();
        if (pid > 0)
                exit(0);
        printf("%d\n", pid);

        sleep(3);
        while(1){
                printf("daemon!!\n");
                sleep(10);
        }
}

저기서 보면 fork()를 하면 자식 프로세스는 pid를 0을 받습니다. 그리고 부모프로세스는 0보다 큰 값을 가집니다. 그래서 0보다 크면 부모프로세스를 종료시키죠.

종료가 된 뒤에 이 자식프로세스가 유닉스의 최상단 프로세스인 init프로세스의 id인 1을 가져 올 때 까지 기다립니다. 3초간-_-;

그런다음 와일문을 10초마다 daemon!을 출력하도록 시도해봅시다.
그러면 이 프로세스는 백그라운드에서 뜨고 있는 프로세스가 됩니다.

데몬프로세스 실행현황 (Language : text)
[oracle][/home/oracle/mudchobo] fork_daemon
0
[oracle][/home/oracle/mudchobo] daemon!!

[oracle][/home/oracle/mudchobo] daemon!!

[oracle][/home/oracle/mudchobo] ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
oracle   26754 26753  0 09:30 pts/1    00:00:00 -csh
oracle   26944     1  0 09:39 pts/1    00:00:00 fork_daemon
oracle   26947 26754  0 09:39 pts/1    00:00:00 ps -f
[oracle][/home/oracle/mudchobo] daemon!!

저기 보시면 부모프로세스 아이디가 1임을 볼 수 있습니다.
 
Posted by 머드초보
,
 
이게 vi에서는 큰 파일(64mb이상?)을 열 때에는 /var/tmp 폴더가 충분해야 한다고 하더군요. 그래서 무지하게 큰 파일들을 읽을 수 없는데요.

회사에서 로그를 관리하는데 이 로그가 용량이 장난이 아니더군요. 그래서 파일을 열려고 하는데 안 열리더라구요.


해결방법으로 첫번째는 vim을 설치하는 겁니다-_-;
vim은 vi의 개선(iMprove) 버전이어서 기존 vi의 단점을 전부 해결이 되었죠. 그리고 불편한 사항들을 더 편하게 단축키를 제공하죠.

설치가 부득이한 경우는 그냥 실행할 때 옵션을 좀 붙여줍니다.

# vi -y 2000000000 파일이름

저렇게하면 열리더군요.
 
Posted by 머드초보
,
 



아이군이 만든 타자크래프트 보고 심심해서 삽질중-_-;




아이군이 만든 타자크래프트도 한번 해봅시다-_-;
자바가 깔려있어야 실행이 됩니다.
http://theeye.pe.kr/typecraft/





폴더에 word1.txt(16단어), word2.txt(32단어), word3.txt(48단어)가 있어야합니다.

word.csh (Language : text)
#!/bin/csh

set words = ( `cat word1.txt` )
set i = 0
set j = 1
set type = 0
set level = 1
set count = 0
@ ii = 4 * $level
@ allcount = $ii * 4

clear
echo -n "[start enter]"
$<
set starttime = `perl -e 'print scalar time(),"\n"'`
echo $starttime

while($level <= 3)
        clear
        echo "level $level"
        while($i < $ii)
                while($j <= 4)
                        @ num = $i * 4 + $j
                        if ($type == $words[$num]) then
                                set words[$num] = "-----"
                                @ count++
                        endif
                        echo -n "$words[$num] "
                        @ j++
                end
                echo
                @ j = 1
                @ i++
        end
        @ i = 0
        @ j = 1

        if ($count == $allcount) then
                set type = ""
                @ level++
                if ($level == 4) then
                        clear
                        echo "all clear"
                        set endtime = `perl -e 'print scalar time(),"\n"'`
                        @ cleartime = $endtime - $starttime
                        echo "clear time $cleartime second"
                        break
                endif
                set words = ( `cat word${level}.txt` )
                @ count = 0
                @ ii = 4 * $level
                @ allcount = $ii * 4
        else
                echo
                echo -n "type : "
                set type = $<
        endif
end

word1.txt (Language : text)
apple
fire
fuck
shit
name
file
print
score
verb
buy
brain
drive
type
path
shot
great
 
Posted by 머드초보
,
 


 



그냥 심심해서-_-;











gbb.csh (Language : text)
#/bin/csh


set win = 0
set lose = 0
set draw = 0

while(1)
        echo $win win, $draw draw, $lose lose
        echo -n "input gawibawibo(1.gawi  2.bawi  3.bo  q.exit) :"
        set player = $<
        date +%N | cat > rand.txt
        set rand = `cat rand.txt`
        @ rand = ($rand / 1000) % 3
        echo
        switch($player)
                case "1":
                        echo you : gawi
                        sleep 1
                        if ($rand == "0") then
                                echo com : gawi
                                echo draw
                                @ draw++
                        endif

                        if ($rand == "1") then
                                echo com : bawi
                                echo you lose
                                @ lose++
                        endif

                        if ($rand == "2") then
                                echo com : bo
                                echo you win
                                @ win++
                        endif

                        breaksw
                case "2":
                        echo you : bawi
                        sleep 1
                        if ($rand == "0") then
                                echo com : gawi
                                echo you lose
                                @ lose++
                        endif

                        if ($rand == "1") then
                                echo com : bawi
                                echo draw
                                @ draw++
                        endif

                        if ($rand == "2") then
                                echo com : bo
                                echo you win
                                @ win++
                        endif

                        breaksw
                case "3":
                        echo you : bo
                        sleep 1
                        if ($rand == "0") then
                                echo com : gawi
                                echo you lose
                                @ lose++
                        endif

                        if ($rand == "1") then
                                echo com : bawi
                                echo you win
                                @ win++
                        endif

                        if ($rand == "2") then
                                echo com : bo
                                echo draw
                                @ draw++
                        endif
                        breaksw
                case "q":
                        echo exit
                        breaksw
                default:
                        echo illegal choice
                        breaksw
        endsw

        if ($player == "q") then
                break
        endif
        echo
end
 
Posted by 머드초보
,
 

pwd
현재 작업 디렉토리를 출력(Print Working Directory)한다.

pwd (Language : text)
#pwd
/Documents
#


cd
디렉토리를 변경 할 수 있는 명령어로써 자신이 있는 위치에서 절대경로나 상대경로를 이용하여서 디렉토리를 변경한다. 디렉토리 이름을 주지 않고 수행하면 사용자의 홈 디렉토리로 이동한다.
절대경로 : /root, /usr, /home/user 등과 같이 전체 경로명을 적어 주는 것이다.
상대경로 : 현 위치에서 ./이나 ../을 이용하여 예를 들면 ../temp는 상위 디렉토리의 temp라는 디렉토리를 가리킨다.

cd (Language : text)
[/Documents]cd imsi
[/Documents/imsi]pwd
/Documents/imsi
[/Documents/imsi]cd ..
[/Documents]cd imsi
[/Documents/imsi]cd ../temp
[/Documents/temp]
 


jobs
백그라운드로 돌고 있는 작업들을 작업 번호와 함께 보여준다. 참고로 작업(job)과 프로세스에 대해서 혼돈하기 쉬운데, kill, disown, wait같은 내장 명령은 작업 번호나 프로세스 번호 둘 다 인자로 받아들인다. 하지만 fg, bg, jobs는 오직 작업 번호만 받는다.
작업번호는 한 사용자의 작업에 대한 것으로, 1번부터 순서대로 부여되지만 다른 터미널의 다른 사용자도 같은 번호의 job을 가지는 것이다. 또한 이 작업 번호는 중지되었거나 백그라운드에 있는 것들만이 작업 번호가 주어진다는 점이다. 프로세서 번호는 시스템 중심적이고, 작업 번호는 사용자 중식적인 번호인 것이다.

사용법
jobs -l

옵션
-l : 프로세서 번호를 추가해서 보여준다.

jobs (Language : text)
[/Documents/temp]sleep 10000 &
[1] 4883
[/Documents/temp]jobs
[1]+  Running                 sleep 10000 &
[/Documents/temp]jobs -l
[1]+  4883 Running                 sleep 10000 &
[/Documents/temp]
 


kill
현재 수행중인 프로세서에게 시그널을 보낸다. 보통 kill 명령은 프로세서를 죽이는 데에 사용된다. 그래서 이 유틸리티의 이름도 kill이 되었다. 시그널의 종류를 지정하지 않으면 프로세서를 종료시키는 의미로 디폴트 시그널 ID 15번을 보내게 된다. 예를 들면 시스템을 사용을 마치고 로그아웃할 때는 시그널 ID 1번의 HUP(hang up) 시그널이 시스템으로 전달되며, 이 시그널은 셸 상태에서 실행중인 모든 프로세서를 종료시키고 로그아웃하게 된다.

사용법
kill [ -signalID ] PID

옵션
-signalID : 프로세서에게 보낼 시그널을 지정한다.

kill (Language : text)
[/Documents/temp]sleep 10000 &
[1] 4888
[/Documents/temp]kill 4888
[/Documents/temp]jobs
[1]+  종료됨(Terminated)      sleep 10000
[/Documents/temp]
 


tail
파일의 마지막 부분을 표준출력으로 보여 준다.(기본적으로 10줄). 보통, 시스템 로그 파일의 변경 사항을 추적할 때 쓴다.

사용법
tail [ -nlbcf ] file_name

옵션
-n : 출력할 라인의 개수이며 기본은 10개의 라인이다.
-l : 출력크기를 라인단위로 지정한다.
-b : 출력크기를 블록단위로 지정한다.
-c : 출력크기를 문자단위로 지정한다.
-f : 파일 뒤에 추가되는 라인을 계속적으로 보여준다.

tail (Language : text)
[/Documents/temp]cat mudchobo.mud
mudchobo
mudchob
mudcho
mudch
mudc
mud
mu
m
[/Documents/temp]tail -3 mudchobo.mud
mud
mu
m
[/Documents/temp]
 


grep
정규 표현식을 쓰는 다목적 파일 검색 도구로서, 원래 예전의 라인 에디터인 ed의 명령어나 필터였던 g/re/p에서 따온 것으로 global - regular expression - print란 뜻이다.
대상 파일에서 보통 텍스트이거나 정규 표현식인 pattern 을 찾아 주고 대상 파일이 주어지지 않ㅅ는다면 파이프에서 쓰여서 다른 명령어의 표준출력에 대한 필터로 동작한다.

사용법
grep [ -vclhnief ] 'pattern' file_name

옵션
-i : 대소문자 구분 없이 찾도록 해준다.
-l : 일치하는 줄이 아니라 일치하는 줄이 들어 있는 파일만 보여준다.
-n : 일치하는 줄과 그 줄번호를 같이 보여준다.

grep (Language : text)
[/Documents/temp]cat mudchobo.mud
mudchobo
mudchob
mudcho
mudch
mudc
mud
mu
m
[/Documents/temp]grep mudchob mudchobo.mud
mudchobo
mudchob
[/Documents/temp]
 


tar
유닉스의 표준 아카이브(archive)유틸리티. 원래는 Tape ARchiving 프로그램에서 왔는데, 이 프로그램은 테입 드라이브부터 보통 파일, 심지어는 표준출력까지 포함하는 모든 종류의 디바이스에 대해서 모든 종류의 아카이브를 다룰 수 있도록 만들었다. GNU tar는 오래전부터 gzip 압추긍ㄹ 다룰 수 있는 옵션이 패치되었다.

사용법
tar [ -x(c)vtf ] file_name.tar

옵션
-c : 새 아카이브 파일을 만든다.
--delete : 아카이브에 들어 있는 파일 지우기
-r : 파일을 아카이브로 추가한다.
-t : 아카이브 내용 목록을 보여준다.
-u : 아카이브 업데이트한다.
-x : 아카이브에 들어 있는 파일 뽑아낸다.
-z : 아카이브를 gzip으로 압축한다.

tar (Language : text)
[/Documents/temp]tar cvf test.tar *
a mudchobo.mud 1K
a test.file 1K
[/Documents/temp]ls
mudchobo.mud  test.file     test.tar
[/Documents/temp]
 

gzip
표준 GNU/UNIX 압축 유틸리티로서, 성능이 떨어지고 특허가 걸려 있는 compress를 대신한다. 압축 풀기 명령어는 gunzip으로써, gzip -d와 같다.
gzip으로 파일을 압축하게 되면, .gz 확장자를 갖는 압축파일을 생성한다. 파일의 소유권, 권한, 수정시간등 속성들은 그대로 보존된다.
zcat 필터는 gzip으로 묶인 파일의 압축을 풀어 표준출력으로 내보내기 때문에 파이프의 입력이나 재지향에서 쓰일 수 있다. 즉, 실제로는 압축 파일에 대해서 동작하는 cat이라고 보면 된다.(옛날 compress로 묶인 파일도 포함). zcat은 gzip -dc와 같다.

gzip (Language : text)
[/Documents/imsi]ls
mudchobo.mud
[/Documents/imsi]gzip mudchobo.mud
[/Documents/imsi]ls
mudchobo.mud.gz
[/Documents/imsi]gunzip mudchobo.mud.gz
[/Documents/imsi]ls
mudchobo.mud
[/Documents/imsi]

 


file
파일이 어떠한 형태의 파일인지 알아낸다. 파일이 텍스트 문서인지 실행할 수 있는 파일인지 아니면 데이터 파일인지 등을 인식한다. 에디터를 사용해서 보거나 수정될 수 있는 파일인가 알아보는 데에 많이 사용된다.

file (Language : text)
[/Documents/imsi]file mudchobo.mud
mudchobo.mud:   아스키 텍스트
[/Documents/imsi]gzip mudchobo.mud
[/Documents/imsi]file mudchobo.mud.gz
mudchobo.mud.gz:        gzip 압축된 데이터 - 압축 방법 , 원래 파일 이름
[/Documents/imsi]

 

du
지정된 특정 디렉토리나 파일들이 차지하는 공간을 보고한다. 디렉토리나 파일을 지정하지 않으면 현재 디렉토리로 간주된다. 크기는 1k 바이트 크기의 블록으로 보고한다.

사용법
du [ -sabxL ] file or directory

옵션
-s : 총 합계만을 따진다. 하위 디렉토리의 숫자 등은 나오지 않는다.
-a : 크기가 계산된 각 파일의 크기를 보인다.
-b : 바이트 크기로 출력한다.
-x : 현재 디렉토리에 마운트된 파일 시스템만 검사된다.
-L : 심볼릭 링크 자신의 공간 대신 연결된 파일의 크기를 다룬다.

du (Language : text)
[/Documents]du imsi
4       imsi
[/Documents]du vim-7.1-sol10-x86-local
35488   vim-7.1-sol10-x86-local
[/Documents]
 


df
디스크의 여유 공간을 검사하여 보고한다.

ps
프로세스 통계(Process Statistics)를 나타낸다. 현재 실행중인 프로세스들을 사용자와 PID(프로세스 아이디)에 의해서 보여준다.

사용법
ps [ -auxlujsm ]

옵션
-l : 긴 형식으로 출력한다.
-u : 실행 유저와 실행 시간 표시한다.
-j : 작업 제어(job control) 형식으로 출력한다.
-s : 시그널 형식으로 출력한다.
-m : 메모리 정보를 보여준다.
-a : 다른 사용자의 프로세스 현황을 보여준다.

ps (Language : text)
[/Documents]ps
   PID TTY         TIME CMD
  4951 pts/3       0:00 ps
  4873 pts/3       0:00 bash
[/Documents]ps -a
   PID TTY         TIME CMD
  4632 pts/2       0:03 gnome-se
  4594 pts/2       0:00 bash
  4624 pts/2       0:00 Xsession
  4952 pts/3       0:00 ps
  4676 pts/2       0:01 xscreens
  4672 pts/2       0:00 gnome-ke
[/Documents]
 
 
Posted by 머드초보
,