공룡호가 사는 세상 이야기

맘에드는 아티클이다. 명령행 기교와 연산자를 익히면 유닉스가 정말 가깝게 느껴진다.
일단 시스템에 문제가 생기거나 점검을 수행할 때, 프로세스를 확인하는 것은 흔한 일이다.
시스템의 퍼포먼스가 떨어졌다던가. I/O가 느려졌다던가.
이유를 찾기 위해선 어떤 프로세스가 CPU나 DISK를 얼마나 점유하고 있는지 찾고,
평소에 그렇지 않은데, 지금 그러한 이유가 무엇인지 찾아나가는 순서로 진행된다.
프로세스를 확인 해 보자.

# ps -ef
     UID     PID    PPID   C    STIME    TTY  TIME CMD
    root       1       0   0   Jul 27      -  0:05 /etc/init
    root   53442  151674   0   Jul 27      -  0:00 /usr/sbin/syslogd
    root   57426       1   0   Jul 27      -  0:00 /usr/lib/errdemon
    root   61510       1   0   Jul 27      - 23:55 /usr/sbin/syncd 60
    root   65634       1   0   Jul 27      -  0:00 /usr/ccs/bin/shlap64
    root   86102       1   0   Jul 27      -  0:00 /usr/lib/methods/ssa_daemon -l ssa0
                                                .
                                            (중략)
                                                .
    root  315646  151674   0   Jul 27      -  0:00 /usr/sbin/lpd
    root  319664       1   0   Jul 27      -  0:00 /usr/atria/etc/albd_server
    root  340144  168018   0 12:34:56      -  0:00 rpc.ttdbserver 100083 1
    root  376846  168018   0   Jul 30      -  0:00 rlogind
 cormany  409708  569522   0 19:29:27  pts/1  0:00 -ksh
    root  569522  168018   0 19:29:26      -  0:00 rlogind
 cormany  733188  409708   3 19:30:34  pts/1  0:00 ps -ef
    root  749668  168018   0   Jul 30      -  0:00 rlogind

실행중인 프로세스만 가지고는 상세한 정보를 알기가 어렵다. 기교를 조금 부려보자.
# ps -ef | grep -E "rpc|ksh" | grep -vE "grep|rpc.ttdbserver" |
   awk -v _MAX_PID=200000 '{if ($2 > _MAX_PID) {print "PID for
   process",$8,"is greater than", _MAX_PID}}'

PID for process /usr/sbin/rpc.statd is greater than 200000
PID for process /usr/sbin/rpc.lockd is greater than 200000
PID for process -ksh is greater than 200000

같은 명령어에서 파생된 결과지만 결과의 질은 달라진다. 내가 원하는 정보를 보다 효율적으로 손쉽게 접해보자.

원문 : http://www.ibm.com/developerworks/kr/library/au-spunix_clitricks/

지난 달 Part 3 에서는 grep, sed, awk 와 같은 명령행 도구의 필터들을 소개했었다. Part 4 에서는 셸 스크립트 기교에 대해서 소개한다. 셸 명령 실행, 산술연산/진법변환, 대화형 셸 스크립트의 기본이 되는 인라인 입력이나 키보드 입력, 루프 등에 대해서 다룬다. 본 셸이 기본 조건이긴 하나 배시 셸도 관계없다.

거두절미하고 아주 짧은 셸 코드 하나를 보자.
for i in ??; { mv $i $i.ppm; }

위 코드는 현재 디렉토리의 파일 이름이 정확히 2글자인 모든 파일의 확장자를 .ppm 으로 변경한다.
i는 파일이며 ??는 파일의 글자 수이다. 루프 내는 for문의 조건이 만족되는 경우 $i를 $i.ppm으로 변경하는 간단한 코드이다. 하나 더 보자.

#!/bin/sh
# baseconv: 진법을 변환하는 간단한 스크립트
#
NUMBER=1
while [ $NUMBER ]; do
    read -p "Input base: " IN
    read -p "Output base: " OUT
    read -p "Number: " NUMBER
    bc -ql <<- EOF
  obase=$OUT
  ibase=$IN
  $NUMBER
  EOF
done

위 코드는 숫자를 입력 진법에서 출력 진법으로 변환한다. 간단하다. 튜토리얼에 모두 설명된 부분.
이번 튜토리얼은 일전에 몇 번 소개되었던 셸 스크립트 관련 아티클에 비해 자세하다. 일전의 아티클을 먼저 읽어 보는 것도 좋을 것 같다. 셸 스크립트의 강력함은 말로 다 할 수 없다. 배워봅시다.~
유용한 인라인 셸 코드들도 존재하니 많은 참고가 되겠다.

원문 : http://www.ibm.com/developerworks/kr/library/tutorial/au-unixtips4/index.html


XML은 이제 선택이 아니라 필수가 되어가고 있다.
구조적인 문서와 데이터를 교환하기 위한 통신 형식으로 충분한 계획/설계 없이 개발 중에 즉흥적으로 선택하는 경우가 많다. 올바른 XML 형식의 설계가 선행되어야, 통신에 참여하는 모든 이들의 요구를 만족시킬 수 있다. 한 개의 XML 스키마를 유지보수 하는 일은 상대적으로 간단하다. 그러나 수백 개 조직에 영향을 미치는 변화는 엄청난 충격이 될 수 있다. 이번 아티클에서는 이 충격을 관리하고 최소화 하는 두 가지 논제에 대해 다룬다.

원문 : http://www.ibm.com/developerworks/kr/library/x-extensxml.html

 

왜 이리 급한가요
내 발은 1분에 다섯걸음, 2분에 아홉걸음.
내 눈은 이 쪽에 나무 한 번, 저편에 눈꽃 한 번.
그리 급히 가시면 난 당신을 쫓을 수도 품을 수도 없어요.
움츠린 표정으로 창백하게 돌아선 당신은,
구름을 휘몰고 햇빛을 장대삼아 휘청휘청 잘도 떠나십니다.
고개 떨군 날 두고, 왜 이리 급한가요.




'일상다반사' 카테고리의 다른 글

너무나도 멋진 4족 보행 로봇  (0) 2009.04.18
프로그래머와 예술가의 양성  (3) 2009.03.06
2009  (0) 2009.01.08
연휴 정리  (0) 2008.12.29
christmas eve  (0) 2008.12.25

구글 입사 시험 문제. 시간날 때 한 번 풀어보는 것도 좋겠다.

1. 당신은 똑같은 사이즈의 볼을 8개 갖고 있습니다.그 중에 7개는 같은 무게를 지니고 있으나, 한 개는 다른 것에 비해 살짝 무겁습니다. 저울을 2번만 사용해 살짝 무거운 이 볼을 찾아내려면 어떻게 해야 할까요?

2. 시계를 보니 3시 15분입니다. 시침과 분침사이의 각도는?

3. 고속도로에서 30분 동안 승용차가 존재할 확률이 0.95 라고 할 때, 10분 동안 존재할 확률은 얼마가 될까요? (확률은 일정하다고 가정합니다.)

4. 어떤 나라에서 사람들은 태어나는 아이 모두 "남자아이"만을 원하고 있었습니다. 그런 연유로 그 나라의 어느 가정에서도 남자아이가 태어 날 때까지 계속 아이를 낳았습니다. 이 나라의 남녀 인구 비율은 어떻게 될까요?

5. 시계의 시침과 분침은 하루 몇 번 겹치게 됩니까?

6. 당신의 8살된 조카에게 "데이터베이스"에 관해 세 가지 문장으로 설명해 보세요.

7. 어떤 마을에 100쌍의 부부가 있습니다. 남편들은 전원 바람을 피고 있습니다. 아내들은 전원 "자기의 남편" 이외의 남자들이 바람을 피고 있다고 생각합니다. 이 마을의 정해진 법률은 외도와 간통을 허락하지 않습니다. 또한, 누구든 자기의 남편이 바람 피고 있다는 사실을 알게 되면, 즉시 자신의 남편을 죽이는 규율이 있습니다. 이 마을의 여성들은 "규율"을 어기지 못 합니다. 어느 날, 마을의 왕비가 말했습니다. 이 마을에는 외도하고 있는 남자가 적어도 한 명은 있다. 자, 이 마을에는 무슨 일이 벌어질까요?

'공장 이야기' 카테고리의 다른 글

싱가폴 출장 (FAPL 31.Aug-06.Sep)  (1) 2009.10.05

2009

일상다반사2009. 1. 8. 01:20
좋은 친구들 항상 곁에 있게 해 주셔서 감사합니다.
사랑하는 선배, 후배들 만나게 해 주셔서 감사합니다.
좋은 동료, 직장 선배에게 보살핌 받게 해 주셔서 감사합니다.
내 하루가, 내 일년이, 내 인생이 아름답습니다.

술 한잔 생각나는 날, 전화한통 날리면 소주 한 잔 기울일 수 있는 사람 있게 해 주셔서
감사합니다.
혼자 있기 싫은 날, 전화한통 때리면 쪼르르 달려와 커피 한 잔 할 수 있는 사람 있게 해 주셔서
감사합니다.

출근 길, 뜨겁고 진한 아메리카노 한잔 들고 회사 로비에서 사람들과 인사를 나누고,
좋아하는 우리 팀, 우리 부서 사람들과 하루종일 부대끼며 일하고 농담하고 밥먹고,
퇴근 길, 이어폰 귀에 꼽고 여유롭게 인사동 거리를 걷고,
즐겁게 스노우 보드 탈 수 있는 주말, 그리웠던 사람도 만나고,
서점 구석에 궁뎅이 깔고 앉아 책도 보고, 피아노도 치고, 술도 한 잔 하고,
부족함 많은 삶, 사랑으로 가득차게 해 주셔서 감사합니다.

이젠 이러한 제 인생, 밝혀 줄 아름다운 사람 하나만 옆에 서게 해 주세요.
욕심이라는 거 알지만, 그래도 굳이 새해 소원을 빌자면 그렇습니다.
늘 감사하고, 노력하며 살겠습니다~

'일상다반사' 카테고리의 다른 글

프로그래머와 예술가의 양성  (3) 2009.03.06
그리하여 당신은 누구신가요  (0) 2009.01.28
연휴 정리  (0) 2008.12.29
christmas eve  (0) 2008.12.25
소설 책을 고를 때.  (0) 2008.12.15

ZFS manual

유닉스2009. 1. 5. 06:50
말그대로,
ZFS manual




1984년, 너저분한 C코드 대회, 불명예 작품상이다. 무슨 의미인지 해석이 가능한가?
	int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\ 
	o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);

코드는 내가 작성하지만, 나만 보는 것은 아니다. 그리고, 나만 본다 하여도 이 코드를 언제 다시 살펴보게 될 지는 알 수 없다. 수직 공백과 수평 공백, 들여쓰기와 띄어쓰기를 적절히 활용하여 코드 블록 구조를 효과적으로 표현하고, 주석을 반드시 달되 불필요한 주석은 피한다. 명명규칙을 따르고, 변수 이름, 함수 이름을 효과적으로 정의하고, 선언의 방법과 헤더파일의 선언규칙을 따른다.
항상 오류를 방지하는 방식으로 코드를 구현하고, 코드의 의도를 명확히 밝히는 프로그램을 작성한다.
그 외에도 C프로그램을 작성하면서 지켜야 할 것, 주의해야 할 것 들을 알려주고 있다.

소프트웨어는 유지보수에 상당한 노력과 비용이 소모된다는 사실은 누구나 잘 알고 있다. 이식이 불가능한 비표준 기능을 사용하고, 바람직하지 못한 방식으로 코드를 구현하는 잘못된 습관은 유지보수를 더욱 어렵게 만든다. 아래 원문에서 오랫 동안 유용하게 활용할 구현 지침을 익혀보자

원문 : http://www.ibm.com/developerworks/kr/library/au-hook_duttaC.html



inode는 유닉스에서 사용하는 자료구조로 파일 시스템 내부에 파일을 유지하는 중요한 정보를 담는다. 유닉스에서 파일 시스템을 생성할 때, 수 많은 inode집합을 생성한다. 일반적으로 전체 파일 시스템 디스크 용량의 대략 1% 정도가 inode테이블에 할당된다.

inode 테이블은 개별 파일 시스템을 위한 inode 숫자 목록을 포함한다. 사용자가 파일에 접근하려면, 유닉스 시스템은 올바른 inode 번호로 inode 테이블을 탐색한다. inode 번호를 발견하면, 사용자가 내린 명령이 inode에 접근해서 가능하다면 적절한 변경 작업을 진행한다.

파일과 디렉토리는 inode의 도움 없이는 유닉스 세상에서 거의 쓸모가 없다.
inode로 작업하는 방법을 익히려면 시간도 많이 필요하며 짜증도 난다. 아래 원문의 내용을 읽어가면서 inode에 대해 모를 때 겪었던 두통거리 몇 가지를 완화해보자.

원문 : http://www.ibm.com/developerworks/kr/library/au-speakingunix14/



필터.
사전적으로는 이물질을 걸러내는 장치로 풀이된다.
데이터가 너무 많다 보니 내가 필요한 데이터를 걸러내기란 쉬운 일이 아니다. 이번에는 유닉스 필터에 대해 알아보자. grep, sed, awk 등 세가지 명령행 도구는 자료를 검색하고 조작하는 속력이 훨씬 빨라진다.

grep을 사용하여 파일 내용을 효율적으로 검색하고, sed를 이용하여 많은 파일을 일괄적으로 편집하고, awk는 입력 행에 있는 각 문자열의 단어별 참조를 가능하게 하며, 스크립트로 구현하는 코드에서 변수로도 참조가 가능하게 한다.

원문 : http://www.ibm.com/developerworks/kr/library/tutorial/au-dw-au-unixtips3-i.html