'Linux'에 해당되는 글 42건

  1. 2010.05.29 tee(1)
  2. 2010.05.29 서버 데몬 유형 1
  3. 2010.05.26 [CentOS]Consol Network 설정
  4. 2010.05.23 [Script] 파일 점검 프로그램
  5. 2010.05.23 [if연산] test 관련 연산자
  6. 2010.05.18 Job 스케줄링
  7. 2010.05.16 쉘(Shell) 환경
  8. 2010.05.14 솔라리스 디렉토리
2010. 5. 29. 17:42

NAME


tee – 표준입력으로부터 읽어서 표준출력, 파일로 쓴다.

 

SYSNOPSIS


tee [-ai] [--append] [--ignore-interrupts] [--help] [--version] [FILE…]

 

DESCRIPTION


tee 명령은 표준입력으로부터의 입력을 표준출력 또는 인수로 주어진 파일에 복사한다.

씌여질 파일이 존재하지 않으면 생성된다.

만약 이미 존재한다면 -a옵션을 사용하지 않는 이전의 자료는 모두 지워진다.

-a, --append.

덮어쓰지 않고 주어진 파일에 표준입력을 추가.

-I, --ignore-interrupts

표준 출력으로 사용법을 출력하고 정상 종료

--help

표준출력으로 사용법을 출력하고 정상 종료.

--version

표준출력으로 버전정보 출력하고 정상 종료.

 

EXAMPLE


# tail -1 /etc/passwd | tee pass.txt

test:x:1001:1001::/home/test:/bin/bash

# ls

pass.txt

 

'Linux > General Commands' 카테고리의 다른 글

df - (파일시스템 단위의 디스크 남은 사용량 출력)  (0) 2011.02.05
yes(1)  (0) 2010.05.29
wc(1)  (0) 2009.04.14
echo(1)  (0) 2009.04.13
cut(1)  (0) 2009.04.13
Posted by devanix
2010. 5. 29. 13:05

서버 데몬은 Standalone 타입의 데몬과 Xinetd타입의 데몬으로 나뉜다.

Standalone 데몬

  • 독자적으로 프로세스가 구동되어 서비스를 제공하는 데몬
  • 실행 종료는 대개 "service 데몬 이름 start/stop/restart" 사용 (service nfs start)
  • 실행 스크립트 파일은 /etc/init.d/디렉토리에 주로 들어있다. ( 디렉토리에 있다고 전부 데몬이라고 애기하지 않음)
    • /etc/init.d/ssh [start /stop/restart] (service ssh restart 동일)
  • /etc/init.d/디렉토리의 실행스크립트는 부팅시에 자동실행 여부를 지정할수 있다.
    • "system-config-services" 명령으로 확인

*standalone 메모리상에 항상 구동되어야 하기 때문에 자주 호출되는 데몬이 적당

 

Xinetd(슈퍼) 데몬

  • xinetd데몬은 다른 하위의 데몬을 지배(?)하는 상위데몬
  • 'xinetd데몬' 'xinetd타입의 데몬' 다르다.
    • xinetd데몬 자체는 'standalone타입의 데몬'으로 항상 구동되고 있음.
    • 외부에서 서비스를 요청할 경우 자신에게 종속된 하위 데몬을 구동시킨후 그데몬이 서비스를 하도록 연결
    • 서비스 요청이 종료되면 구동되었던 하위 데몬도 자동으로 종료.
  • Xinetd 타입의 데몬은 서비스를 요청할 때만 xinetd 데몬이 알아서 구동
    • service 서비스명 start 방신은 사용할수 없음(x)
  • 설정파일은 /etc/xinetd.conf 이며 'xinetd 타입의 데몬'들은 /etc/xinetd.d/디렉토리 들어있다.
    • 내부 설정 파일수정후 "service xinetd restart" 재시작.
    • 'xinetd 타입의 데몬' 재시작할 서비스가 없으므로, 그상위 데몬인 'xinetd 데몬' 재시작

*xinetd 데몬은 서비스를 종료하는 것을 계속 반복해야 하므로 가끔 사용하는 서비스에 적당.

'Linux' 카테고리의 다른 글

리눅스 디렉토리 구조  (0) 2010.07.29
[centOS5.5]bonding 설정  (0) 2010.06.11
[CentOS]Consol Network 설정  (0) 2010.05.26
Job 스케줄링  (0) 2010.05.18
솔라리스 디렉토리  (0) 2010.05.14
Posted by devanix
2010. 5. 26. 22:45

콘솔에서 네트워크 설정해주기

1) # ifconfig –a    ==> 모든 네트워크 인터페이스 확인

2) # vi /etc/sysconfig/network    ==> 네트워크의 기본적인 정보가 설정되어 있는 파일

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=centos.deva.com

 LOCALHOST=kathe.kathe.com : 호스트명을 kathe.kathe.com 으로 바꿔주었다.

3) # vi /etc/sysconfig/network-scripts/ifcfg-eth0 è eth0 장치에 설정된 네트워크 정보가 모두 들어 있는 파일

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=none

HWADDR=00:0C:29:35:86:87

ONBOOT=yes

IPADDR=192.168.132.100

NETMASK=255.255.255.0

GATEWAY=192.168.132.2

 i)BOOTPROTO è dhcp 되어있다면 none으로 바꿔주자.

ii)IPADDR è ip 수동으로 잡아주기

iii)NETMASK,GATEWAY è 추가해주자.

 4) # vi /etc/resolv.conf è DNS 서버가 설정된 파일

; generated by /sbin/dhclient-script

search localdomain

nameserver 168.126.63.1

nameserver 168.126.63.2

 DNS 서버 주소를 셋팅

 5) # /etc/hosts è 컴퓨터의 호스트 이름 FQDN 들어 있는 파일

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1 localhost.localdomain localhost

::1 localhost6.localdomain6 localhost6

192.168.132.100 centos.deva.com

 6) # service network restart è 완료!!

   

VMware NIC 추가해서 네트워크 설정해주기

1) VMware 에서 network adapter 추가 (많이 했으니 생략)

2) # ifconfig –a    장치확인(eth1)

3) # cp /etc/sysconfig/network-scripts/ifcfg-eth0 \

> /etc/sysconfig/network-scripts/ifcfg-eth1 복사해서 설정만 바꿔주자

4) # vi /etc/sysconfig/network-scripts/ifcfg-eth1

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth1

BOOTPROTO=none

HWADDR=00:0C:29:FD:91:1B

ONBOOT=yes

IPADDR=192.168.132.200

NETMASK=255.255.255.0

GATEWAY=192.168.132.2

 DEVICE eth1 ,HWADDR 새로추가한 NIC 맥주소 ,IPADDR 설정할 ip주소를 바꿔준다.

5) # service network restart 완료!!

   

'Linux' 카테고리의 다른 글

[centOS5.5]bonding 설정  (0) 2010.06.11
서버 데몬 유형  (1) 2010.05.29
Job 스케줄링  (0) 2010.05.18
솔라리스 디렉토리  (0) 2010.05.14
자주가는 Programming 링크 모음  (0) 2010.01.03
Posted by devanix
2010. 5. 23. 16:46

파일 점검 프로그램

 1 #!/bin/sh
 2 # # crontab -e
 3 # Min Hour Day Mon Week CMD
 4 # 0 8 * * * /root/shell/check_file.sh
 5 ##
 6 # cat /root/shell/test/.mail_contents_OK.txt
 7 # Have a Good Day !!!!!
 8 ##
 9 # cat /root/shell/test/check_file_list.txt
10 # .....
11 # /etc/passwd
12 # /etc/group
13 # /etc/hosts
14 # .....
15
16 F_LIST=/root/shell/test/file_list.txt           # check file list
17 T_FILE=/var/tmp/.tmp1                           # tempory file
18 F_RESULT=/root/shell/test/result.`date '+%m%d'` # check result for report file
19 #EMAIL=root # admin email : root@example.com
20
21 cp /dev/null $F_RESULT                          # 결과파일 초기화
22
23 for F_NAME in `cat $F_LIST`                     # 점검해야 하는 파일 목록 읽기
24 do
25     if [ -f $F_NAME.orig ] ; then               # 백업파일 존재 유무 확인
26         diff $F_NAME $F_NAME.orig > $T_FILE     # 원본파일<-->백업파일 비교
27         if [ -s $T_FILE ] ; then
28             echo "$F_NAME [ WARN ]" >> $F_RESULT
29         else
30             echo "$F_NAME [ OK ]" >> $F_RESULT
31         fi
32     else
33     cp $F_NAME $F_NAME.orig
34     fi
35 done
36
37 if grep WARN $F_RESULT > /dev/null 2>&1 ; then
38 # mailx -s "Critical Satus. Check Files" $EMAIL < $F_RESULT
39     echo "WARNNING"
40 else
41 # mailx -s "OK" $EMAIL < $F_RESULT
42     echo "OK"
43 fi
44 # rm T_FILE # tempory file delete
45


점검할 파일을 file_list.txt 파일에 정의하고 이 파일들에 대해 백업파일을 만든후 하루에 한번씩
원본 파일과 백업파일의 내용이 같은지를 점검하는 프로그램이다. 매일 아침마다 리포트 형태로 출력
하여 출근시에 보고를 받을수 있도록 메일을 보내는 형식으로 되어져 있다.



원본파일/백업 동기화

 1 #!/bin/ksh
 2 #
 3 # Reference : /root/shell/check_file.sh
 4 #
 5 F_RESULT=/root/shell/test/result.`date '+%m%d'`
 6 T_FILE=/var/tmp/.tmp.$$
 7 awk '/WARN/ { print $1 }' $F_RESULT > $T_FILE
 8 for FILENAME in `cat $T_FILE`
 9 do
10     cp $FILENAME $FILENAME.orig
11 done
 
만약 이상이 있어서 점검이 끝나면 관리자가 직접 OK_check.sh 스크립트를 동작시켜 원본파일과 백업
파일을 동기화시켜 줘야 한다.





'Linux > ShellScript' 카테고리의 다른 글

ANSI Escape(ESC) character  (0) 2010.11.02
쉘내부 명령어  (0) 2010.10.28
[script]directory tree로 보여주기  (0) 2010.05.29
[if연산] test 관련 연산자  (0) 2010.05.23
쉘(Shell) 환경  (0) 2010.05.16
Posted by devanix
2010. 5. 23. 11:37

■ 파일 관련 test 연산자

연산자

설명 (다음의 경우 )

-e file

파일이 존재하는 경우

-d file

파일이 존재하고 디렉토리인 경우

-f file

파일이 정규 파일인 경우

-b file

파일이 존재하고 블록 디바이스 파일인 경우

-c file

파일이 존재하고 문자 디바이스 파일인 경우

-p file

파일이 존재하고 파이프나 이름이 있는 파이프(FIFO 파일) 경우

-S file

파일이 존재하고 소켓인 경우

-L file

파일이 존재하고 심볼릭 링크인 경우

-r file

파일이 존재하고 읽을 있는 경우

-w file

파일이 존재하고 쓰기 가능한 경우

-x file

파일이 존재하고 실행할 있는 경우

-u file

파일이 존재하고 SetUID 비트가 설정된 경우

-g file

파일이 존재하고 SetGID 비트가 설정된 경우

-k file

파일이 존재하고 Sticky 비트가 설정된 경우

-s file

파일이 존재하고 파일이 아닌 경우

fileA -nt fileB

fileA fileB보다 나중에 생성된 경우

fileA -ot fileB

fileA fileB보다 이전에 생성된 경우

fileA -ef fileB

fileA fileB 같은 파일을 가리키고 있는 경우

 

■ 문자열 관련 test 연산자

연산자

설명

stringA = stringB

stringA stringB 같은 경우

stringA != stringB

stringA stringB 같지 않은 경우

stringA < stringB

stringA stringB보다 사전순서로 먼저 나오는 경우

stringA > stringB

stringA stringB보다 사전순서로 나중에 나오는 경우

-z string

string 길이가 0인경우

-n string

string NULL 아닌 경우

 

■ 산술연산 test 구문

연산자

설명

exprA -eq exprB

산술연산 exprA exprB 같은 경우(-eq: equal)

exprA -ne exprB

산술연산 exprA exprB 같지 않은 경우(-n: not equal)

exprA -lt exprB

산술연산 exprA exprB보다 작은 경우(-lt: less than)

exprA -le exprB

산술연산 exprA exprB보다 작거나 같은 경우(-le: less equal)

exprA -gt exprB

산술연산 exprA exprB보다 경우(-gt: great than)

exprA -ge exprB

산술연산 exprA exprB보다 크거나 같은 경우(-ge: great equal)

exprA -a exprB

exprA 참이고 exprB 참인경우(-a: and)

exprA -o exprB

exprA 참이거나 exprB 참인경우(-o: or)

 


test 구문에서 사용되는 연산자

 ① 논리 부정 연산자(NOT)

다른 연산자와 함께 사용되며 파일 test에 이용된다.

if [ ! -s file ] ; then

echo "file size is zero"

fi


② 괄호
(Grouping)

실행 순서를 변경하기 위해 사용하며 괄호의 양쪽에는 공백이 필요하다.
그리고 의미없는 순수한 괄
호의 의미를 사용하기 위해 괄호 앞에 백슬래쉬를 넣는다.

if find / ( -perm -4000 ) -o ( -perm -2000 ) -type f > /dev/null ; then

echo "SetUID or SetGID Found"

fi


③ 논리곱 연산자
(AND)와 논리합 연산자(OR)

fi [ ( "$VAR" -ge 0 ) -a ( "$VAR" -lt 10 ) ] ; then

echo "$VAR is small number"

fi

if [ -n "$str" -o -r $HOME/.profile ] ; then

echo "Hello, Test."

fi


④ 연산자 우선 순위

괄호 > 논리부정연산자(NOT) > 논리곱 연산자(-a) > 논리합 연산자(-o)

'Linux > ShellScript' 카테고리의 다른 글

ANSI Escape(ESC) character  (0) 2010.11.02
쉘내부 명령어  (0) 2010.10.28
[script]directory tree로 보여주기  (0) 2010.05.29
[Script] 파일 점검 프로그램  (0) 2010.05.23
쉘(Shell) 환경  (0) 2010.05.16
Posted by devanix
2010. 5. 18. 15:12

1. at - 단일 실행 작업 스케줄링

(1) at 시간을 정한후 명령어 입력.

# at 15:30
at> echo "test" > /dev/pts/4
at> Ctrl+D <EOT>
명령어는 /bin/bash을(를) 사용하여 실행됩니다
작업 1274164200.a 시간 화  5월 18 15:30:00 2010 

(2) -l 옵션을 사용하여 특정 작업이 예정된 시간 정보를 볼수 있습니다.
# at -l
user = root     1274164200.a    화  5월 18 15:30:00 2010 

(3) atq 명령어는 /var/spool/cron/atjob 디렉토리에 추가작업을 볼수 있음.
# atq 
 Rank     Execution Date     Owner      Job            Queue   Job Name
  1st   May 18, 2010 15:30   root       1274164200.a     a     stdin

# ls -l /var/spool/cron/atjobs/
총 10 -r-Sr--r--   1 root     root        4233  5월 18일  15:02 1274164200.a 

(4) -r 옵션과 특정 작업번호를 입력하면 대기열에 있던 작업을 삭제 할수 있슴.
# at -r 1274164200.a
# atq no files in queue.  


2. cron - 주기적인 실행작업 스케줄링

(1) crontab -l (스케줄 보기) 
# crontab -l
# crontab -l  username 

(2) crontab -e (수정,편집,삭제)
# crontab -e
 0, 10, 20, 30, 40, 50 * * * * date > /dev/ptr/1
:wq

.profile 수정
# EDITOR=vim

# EXPORT EDITOR

(3) crontab 파일삭제

# crontab -r username


Note (명령어에 대한 액세스 제어)



at / crontab 명령어에 대한 액세스 제어 설정 파일
<at>
/etc/cron.d/at.deny
/etc/cron.d/at.allow

<crontab>
/etc/cron.d/cron.deny
/etc/cron.d/cron.allow


① at.allow 와 at.deny 파일이 둘 다 존재한다면, at.allow 파일만 적용
② 둘다 존재 하지 않으면, root 사용자만 at 명령어를 액세스 할수 있음.
*crontab 동일.

'Linux' 카테고리의 다른 글

서버 데몬 유형  (1) 2010.05.29
[CentOS]Consol Network 설정  (0) 2010.05.26
솔라리스 디렉토리  (0) 2010.05.14
자주가는 Programming 링크 모음  (0) 2010.01.03
리눅스 배포판 확인  (0) 2009.12.03
Posted by devanix
2010. 5. 16. 17:25

[로그인 쉘에 따른 초기화 파일]

(Shell) 종류

시스템전역

초기화파일

(로그인쉘)

사용자

초기화 파일

(로그인쉘)

사용자

초기화파일

본쉘(sh)

/etc/profile

$HOME/.profile

    

콘쉘(ksh)

/etc/profile

$HOME/.profile

$HOME/.kshrc

$HOME/.kshrc

C(csh)

/etc/.login

$HOME/.cshrc

$HOME/.login

$HOME/.cshrc

배쉬(bash)

/etc/profile

$HOME/.bash_profile

$HOME/.profile

$HOME/.bashrc

       

(1). 초기화 파일

-로그인쉘 프로그램은 시작된 후에 가장 먼저 /etc/profile 파일을 검사

-파일안의 명령어들을 실행시킨 다음, 초기화 파일인 .profile 사용자의 디렉토리에서 차자 실행.

*초기화에 사용되는 파일들은 /etc/skel 디렉토리에서 확인할수 있다.

(2). /etc/profile

-시스템의 모든 사용자들을 위한 설정파일로 관리자에 의해 관리되는 파일.

-쉘을 쓰는 사용자가 로그인 하는 경우 가장 처음으로 읽혀지는 파일이며 로그인시에 한번 읽혀짐.

(3). ~/.profile

-사용자의 홈디렉토리에 존재하는 .profile 안에는 개인적인 변수 설정

-쉘프롬프트 설정, 터미널 설정등 다양한 개인적인 설정을 있다.

(4). 프롬프트

- 프롬프트의 기본값은 일반사용자는 달러 기호($)이고 root 사용자는 샵기호(#).

- 프롬프트는 PS1 변수로 설정할수 있고 사용자의 홈디렉토리에 존재하는 ~/.profile 정의한다.

# PS1="`uname -n> `"

# export PS1

[참고] 프롬프트 정의

쉘프롬프트: [root@Solaris10:/]#

(ksh ) # PS1=[$LOGNAME@`hostname`:'$PWD]# '

(bash) # PS1='[\u@\h:\w]\$'

(5). 보조 프롬프트

PS2 프롬프트는 보조 프롬프트이다. 프롬프트의 값은 표준 에러에 출력된다. 표준 에러의 기본값

화면이다. 프롬프트는 사용자가 명령어를 제대로 입력하지 않고 캐리지 리턴키를 눌렀을

타난다. 아직 명령어가 완료되지 않았음을 나타내고 명령어의 나머지 부분을 입력하면 정상적으로

행이 가능해 진다.

$ echo "hello

> there"

hello there

(6) 검색 경로

-본셀은 명령행에서 입력된 명령어의 위치를 찾기 위해 변수 PATH 사용한다.

-경로들은 콜론(:)으로 구분하여 나열한다.

-검색은 목록의 왼쪽 디렉토리에서 오른쪽 디렉토리의 순서로 진행된다.

-경로의 마지막에 지정한 마침표(.) 현재 작업 디렉토리를 나타낸다.

-검색경로내에 등록되어 있는 어떤 디렉토리에서도 명령어를 찾지 못하면,

본쉘은 표준 에러로 "filename: not found" 같은 메시지 내보낸다.

-일반사용자는 검색경로 PATH 변수를 ~/.profile 선언하여 사용한다.

(7) hash 명령어

hash 명령어는 명령어의 검색을 효율적으로 처리하기 위해 내부적으로 해시 테이블을 유지한다. 명령

어가 입력될 때마다 경로를 검색하는 대신, 처음 입력되었을 때만 경로를 이용하여 검색하고, 찾아낸

경로를 메모리에 저장한다. 동일한 명령어가 다시 입력되면, 쉘은 명령어를 해시 테이블에서 찾아

낸다. 이러한 과정은 전체 경로를 검색하는 것보다 상당히 빠르게 명령어를 찾을 있도록 도와준

.

hash 명령어의 출력은 쉘이 테이블 내의 명령어를 사용한 빈도수(hits) 명령어를 찾는데 소요되는

상대적인 비용(cost) 두가지이다. 여기서 비용이란 쉘이 명령어를 찾기 위해 검색 경로 상에서 하위

디렉토리로 내려간 단계를 의미한다. hash 명령어에 -r 옵션을 사용하면 테이블을 지운다.

(8) 마침표(.) 명령어

-마침표(.) 쉘의 내부 명령어이다.

- 명령어는 스크립트의 이름을 인자로 받아서 현재 환경에서 실행시킨다.

- 자식 프로세스를 새로 생성하지 않고 스크립트를 실행한다.

-스크립트 내에서 정의된 모든 변수들은 현재 환경의 일부가 되며,

마찬가지로 현재 쉘에서 정의한 모든 변수들도 스크립트 환경의 일부가 된다.

-일반사용자의 환경파일인 .profile 수정후에 재로그인 없이 마침표(.)명령어를 사용하여 적용

'Linux > ShellScript' 카테고리의 다른 글

ANSI Escape(ESC) character  (0) 2010.11.02
쉘내부 명령어  (0) 2010.10.28
[script]directory tree로 보여주기  (0) 2010.05.29
[Script] 파일 점검 프로그램  (0) 2010.05.23
[if연산] test 관련 연산자  (0) 2010.05.23
Posted by devanix
2010. 5. 14. 12:10

/ 모든 파일 시스템의 마운트 포인터

/bin 사용자가 실행할 수 있는 명령어 존재
 /bin 디렉토리는 /usr/bin 디렉토리에 심볼릭 링크가 걸려 있다.
           
/usr/bin 부팅 이후에 사용되고, 사용자가 사용하는 일반 명령어가  들어 있다.
/usr/sbin 부팅 이후에 사용되고, 관리자가 사용하는 관리용 명령어가 들어 있다.

/sbin 부팅시에 시작 스크립트가 사용하는 관리용 명령어가 들어 있다.

/dev 논리적인 장치명

/dev/dsk 디스크 디바이스에 대한 파일들이 존재
 (블럭 디바이스 파일, 캐릭터 디바이스 파일)
/dev/rdsk 디스크 디바이스에 대한 파일들이 존재
 (로우(원시) 디바이스 파일)

/devices 물리적인 장치명
            (예) /devices/pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0:a

/etc 시작 스크립트, 서비스 설정 파일, 사용자/그룹 정보파일,
 보안 관련 파일들, 기타 설정 정보

/etc/init.d 시스템 부팅관련 스크립트 파일 (/etc/rc0.d, /etc/rc1.d ...)
/etc/inet 네트워크 관련 설정 파일

/export 사용자의 홈디렉토리

/home 솔라리스 시스템에서는 "/home/사용자이름"에 직접 홈디렉토리를 생성하지 않는다.
 automount 설정에 의해서 자동으로 생성되는 사용자 홈디렉토리 공간

/kernel 부팅시에 필요한 플랫폼에 독립적인 커널 모듈 존재

/mnt 마운트 포인터
            
/opt 프로그램이 설치되는 기본 디렉토리

/platform 플랫폼에 종속적인 커널 모듈이 존재하는 디렉토리이다.

/sbin 부팅시에 시작 스크립트들이 사용하는 명령어나 시스템  복구시에  사용되는 명령어

/tmp 임시파일들이 생성되는 디렉토리
 부팅시에 이 안의 내용은  모두  지워지게 된다.

/usr 모든 시스템 사용자를 위한 프로그램, 스크립트, 라이브러리 위치

/usr/bin 기본 명령어
/usr/ccs C 컴파일러 유틸리티
/usr/sbin 시스템 관리 명령어
/usr/lib 프로그램 라이브러리

/var 가변적인 데이터들이 남겨지는 파일들이 위치한다.
 시스템 운영시 발생하는 정보
 (로그, 임시파일, 상황정보 파일, PID)

'Linux' 카테고리의 다른 글

[CentOS]Consol Network 설정  (0) 2010.05.26
Job 스케줄링  (0) 2010.05.18
자주가는 Programming 링크 모음  (0) 2010.01.03
리눅스 배포판 확인  (0) 2009.12.03
/dev/null 2>&1  (0) 2009.12.03
Posted by devanix