책을 사랑하는 건 남녀 간의 사랑과 비슷하다.
책에 몰입하고 있는 동안에는 세상사가 덜 고달프고 근심걱정도 잊어버리며 평범한 일상이 즐거워진다.
긍정적으로 변하는 것이다.
책과 사랑에 빠지는 건 연인 간의 사랑 못잖게 마음이 따스해지고 온전한 자아를 이루게 한다.
책을 읽는 동안만큼은 하늘은 맑고 환하게 빛나며 부드러운 바람이 머리카락을 휘날리는 낭만적인 기분에 젖어든다.
세상 모든 일이 잘 될 것만 같다. (13p)

스티브 레빈 지음, 송승하 옮김 '전략적 책읽기 - 지식을 경영하는' 중에서 (밀리언하우스)

---------------------------------

난독증이 있는 나로서는 이해가 안가는 말이기도 하다..
허나 여지껏 기술서적만 줄창 읽어왔던 나로서는 일과 관련없는 책을 읽어보고 싶게 만든 문구이다.
계절이 적절하니 책에 한번 빠져보도록 노력해보자..

^^


개발자들이 개성이 강한지라

vim 상에서도 신텍스 하이라이팅을 다르게 하고 싶은 욕구가 있으셨을 것입니다.

그래서 vim 에서는 컬러스키마를 제공하구요

그게 아래와 같이 .vimrc 파일을 수정하면 변경이 가능하지요.

colorscheme <스키마이름>

제가 공유한 링크는 스키마를 한눈에 볼수 있는 페이지입니다.

구경해보세요.


이 세상에서 가장 아름다운
사람은 마음씨 따뜻한 사람입니다

이 세상에서 가장 부유한 사람은
가슴이 넉넉한 사람입니다

이 세상에서 가장 착한 사람은
먼저 남을 생각하는 사람입니다

이 세상에서 가장 용기있는 사람은
용서할 줄 아는 사람입니다

이 세상에서 가장 필요한 사람은
삶을 성실히 가꾸는 사람입니다

이 세상에서 가장 지혜로운 사람은
사랑을 깨달은 사람입니다

이 세상에서 가장 훌륭한 사람은
이 모든 것을 행한 사람입니다.

----------------------------------------

우헤헤.. 
시행착오를 격고 먼가 반성할 기회를 가지는 순간엔 나도 모르게 감수성이 예민해진다.
그런데 유독 가을에만 이러는지.. ㅡㅡa 
내가 원래 가을을 계절에 영향을 받는 성격이었던가???

이젠 슬슬 내 위치로 되돌아 갈때가 아닌가 싶다..






어찌보면 36년이라는 기간 동안
전 마음으로 이야기하는 방법을 몰랐던것 같습니다.

마음으로 이야기할때 진실함이 배가 되고 진실함이 배가 됨으로
서로의 믿음이 강해지는데 말이죠.. ^^

그래도 다행입니다....

마음으로 이야기해야 마음을 얻을 수 있다는 것을 알았다는것을...

여러분 감사합니다. 행복하실꺼에요.. ^^


평온함은 남이 나를 건드리지 않아서 유지되는 것이 아니라
외부의 어떤 충격에도 내가 흔들리지 않는 것이다.

어느 침대 회사의 텔레비전 광고를 보면 한 침대 위에서 아버지는 깊은 잠에 빠져 있고,
아이들은 뛰어 논다.
침대 위에서 아이들이 뛰어노는데도 침대 위에 올려놓은 커피 잔이 쏟아지지 않는다.

평온이란 이런 것이다. 
주변의 그 어떤 것도 나를 흔들지 못하는 것이다.
내 마음에 물결이 일지 않고, 내 정신이 산만해지지 않는 것이다.

출처 : 천명주 지음 '긍정이 만드는 세 가지 기적 - 원하는 대로 인생을 바꾸는 마음공부' 중

흔들림이 없는 마음을 유지하기란 무얼 하든 쉽지 않다.
과연 이러한 심성이 훈련을 통해 내것으로 만드는 것이 가능할까?
나름 내 스스로 세뇌를 시키며 종종 시도를 해보지만
원복되곤 한다.. (절실하지 않아서 일 수도.. ㅎㅎ)

난 할 수 있다.. 난 할 수 있다.. 난 할 수 있다..



근래 난 많은걸 배우고 있다.

처음으로 격어보는 상황이기도 하고
그 상황이 좋지 않음에도 좋게 변화해 보려는 시도도 해보았다..

허나

어렵다~~~ 태생이 다르기에..  

to Mater~

지친다.. 쉬고 싶다..



인생을 살아가면서 비록 성공과 실패를 결정짓는 것은 상당히 주관적이지만,
실패와 성공을 경험하지 않는 사람은 없을 것이다.

나또한 성공과 실패를 경험했다..

찬찬히 고민을 해보니 대부분의 실패는 경험부족이 대부분 원인이었고
성공은 경험을 통해 리스크를 필터하여 가능성을 높였던 것이다.

많은 경험을 원한다면 책을 읽자!!!!
앞으로 행복하고 즐거운 인생을 살기를 바란다면... ^^


ps : 반성하며 살자라고 이야기를 매번했지만 잃어버린다.. 정말정말 앞으론 그러지말자..

fenc, enc 등을 설정해도 한글이 깨져보이는 경우가 있다.

이땐

:set ++enc=euc-kr 

을 하면 잘 보인다.. 

전체적으로 vim 에서 인코딩 옵션들이 어떻게 동작하는지 정리해야한다.

지금은 급하니 스킵.




출처 : http://kldp.org/node/45359

한글이 UTF-8로 인코딩된 경우가 있는 데이타파일을
가끔 열때가 있죠. 이때 아래의 방법으로 제대로 볼 수 있습니다.

set tenc=korea
set enc=utf-8

tenc는 termencoding 값을 설정하는것이고
enc는 encoding 값을 설정하는 겁니다.

.vimrc에
set fileencodings=utf-8,euc-kr
만 하면 자동으로 utf-8인지 euc-kr인지 자동판별해서
fileencoding 값을 정해 줍니다

저장하면 새파일이면 터미널의 인코딩대로 저장되고
있던파일이면 원래 파일 인코딩대로 저장됩니다
만약 인코딩을 바꾸려면
:set fileencoding=utf-8
:w
하면 utf-8로 바뀌어서 저장됩니다.
반대 경우도 마찬가지..






출처는 아래와 같습니다 ~

http://vany.tistory.com/trackback/218

 

예전에 간단히 Vim 인코딩과 한글입출력에 관한 글을 쓰고 나서, 브니군이 locale에 따라 자동으로 설정하는 방법을 올렸었다.  그리고 벌써 3년 가까이 세월이 흘렀다.  좀 있으면 빼도 박도 못한 30대가 되는 기념으로 추가정보를 좀 끄적거려 볼까 한다.


먼저 브니군이 작성했던 내용을 약간 가다듬으면(?) 다음과 같다.
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,cp949,euc-kr,latin1
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
    set termencoding=utf-8
else
    set termencoding=cp949
endif


위의 내용을 설명하면 이렇다.
우선 Vim 내부적으로 사용되는 인코딩을 utf-8으로 설정한다.
set encoding=utf-8

그리고 읽어들인 파일의 인코딩을 ucs-bom,utf-8,cp949,euc-kr,latin1 순서로 검사해서 자동으로 설정한다.
set fileencodings=ucs-bom,utf-8,cp949,euc-kr,latin1

lang 변수에 설정된 인코딩 정보를 확인해서 utf-8인 경우에는 터미널 인코딩을 utf-8으로 설정하고,
그 밖의 경우에는 터미널 인코딩을 cp949로 설정한다.
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
    set termencoding=utf-8
else
    set termencoding=cp949
endif


vim 실행 후에 다음과 같이 입력해서 현재 인코딩 상황을 살펴볼 수 있다.
:set encoding? fileencoding? termencoding?

너무 기니까 줄여서 다음과 같다.
:set enc? fenc? tenc?


.vimrc에 위에서 소개한 내용을 넣어두면, 대부분의 상황에서 인코딩 설정이 자동으로 잘 잡힌다.

대부분 잘 된다는 말은, 물론 잘 안 되는 경우도 있다는 얘기다.
파일 내용 중에 깨진 문자가 들어 있는 경우에, 파일 인코딩이 잘못 검출이 되는 경우가 있다.
(본인은 mysql dump data를 vim으로 열어보다가 이와 같은 경우를 당한 적이 있다.)

이런 경우의 대처법은 이렇다.

예를 들어, 사실은 utf-8 인코딩이 맞는데 깨진 문자 때문에 latin1 인코딩으로 검출(fenc=latin1)되었다고 하자.
이 상태에서 강제로 utf-8으로 바로잡아준답시고 아래와 같이 하면..
:set fenc=utf-8
현재 문서를 cp949에서 utf-8으로 변환(convert)을 해 버린다.
즉, 사실은 utf-8 문서인데..  이 문서에다가 cp949에서 utf-8으로 변환하는 로직을 돌려버린다는 것이다.

따라서 원하지 않게 문서가 수정된 상태가 되고, 만약 이 상태로 문서를 편집하거나 저장하면 완전히 맛이 가는 상황이 되는 것이다.

그렇다면 어떻게 하느냐?
vim의 ++opt argument를 사용하면 된다.  즉, 위와 같은 상황에서는 아래와 같이 하면..
:e ++enc=utf-8
현재 파일을 fileencoding=utf-8 상태로 강제설정하여 다시 읽어들인다.
문서는 수정되지 않은 상태로 보이며, utf-8 문자들은 정상적으로 보이게 된다.
이 상태에서 문서를 편집하면 되는 것이다.


오늘도 빨래 끝~ +_+


USER : process 소유주
PID : Process ID
%CPU : 현재 해당 프로세스의 CPU 사용률
%MEM : 사용된 메모리의 추정치
VSZ : 현재 사용중인 가상메모리 또는 페이지.  (KByte)
RSS : 현재 사용중인 Real 메모리 (KByte)
TTY : 현재 사용중인 process의 소유자가 사용중인 터미널 포트
S : 현재 프로세스의 STAT(상태)
-----------------------------------------------------------
R - running 중인 상태
S - sleeping중인 상태
I - intermediate상태
T - Signal 의 영향으로 중지된 상태
X - 메모리가 wait중인 상태
Z - 좀비 프로세서
-----------------------------------------------------------
START : process 시작 시간
TIME : 총 사용된 CPU time
COMMAND : 실행된 명령어의 이름

출처 : http://metalpen.net/blog/500
맥의 경우 기본적으로 root 권한을 제공하지 않는다.
예를 들면 /etc/hosts 파일을 수정하려면 안된다.
그래서 별도의 커맨드를 제공하는데 사용법은 아래와 같다.


10.5 Leopard 부터는 NetInfo Manager가 없어졌습니다. 
그래서 루트 계정 활성활 시킬때 dsenableroot 라는 명령어를 사용하시구요 
비활성화 할때는 dsenableroot -d 로 비활성화 하시면 됩니다.  

출처 : http://acacia.linux.co.kr/bbs/board.php?bo_table=acacia&wr_id=66&sca=%C0%DB%BE%F7&page=1
#!/bin/sh

#-------------------------------------
# @ uptime 모니터링
# author : cute772
#-------------------------------------

if [ "$1" = "" ]; then
    echo "$0 <sleeptime>"
    exit
fi

while [ 1 ]
do
    szT=`date +'%F %T'`
    #szUp=`uptime | awk -F'load average:' '{print FS $2}'`
    szUp=`lsof -p 19361 | wc -l`
    echo $szT $szUp
    sleep $1
done

안에 로직은 특정 프로세스의 오픈 파일 개수를 취합하는 로직임.. 헷갈리지 마셈요.




출처 : https://blog.gaerae.com/2015/01/bash-hello-world.html
Bash 입문자를 위한 핵심 요약 정리(shell script)


Bash 입문자를 위한 기본적인 문법과 알고 있으면 좋은 것들만 정리했다.
(이런 것도 있구나 싶을 정도만 이해하도록 간단한 설명과 예제로 작성됨)

첫 시작은 문자 출력하기(Hello World)

고전적이지만 "hello world" 단순 출력부터 시작해보자.
파일명은 hello.sh로 만들고 실행해보자. 단 두줄이면 끝이다.
(만일 실행이 안된다면 퍼미션을 변경해야되는데 뭔지 모르겠다면 일단 이렇게 해봐라.chmod 700 hello.sh)
참고: echo 문장을 출력하는데 자동으로 줄바꿈 됨
참고: printf C언어와 비슷함

#!/usr/bin/env bash
echo "hello world"
printf "hello world"
printf "%s %s" hello world


주석(Comments)

# 기호로 시작하면 주석이다.

함수(Function)

형식은 다른 언어와 차이는 없다. 그러나 function는 생략해도 된다.
함수 명을 쓰면 함수가 호출이 되는데 주의할 것은 호출 코드가 함수 코드보다 반드시 뒤에 있어야 된다. 함수 코드 보다 앞에서 호출 시 오류가 발생한다.

string_test() {
    echo "string test"
}

function string_test2() {
    echo "string test 2"
    echo "인자값: ${@}"
}
string_test
string_test2

# 함수에 인자값 전달하기(공백의로 뛰어서 2개의 인자값을 넘김)
string_test2 "hello" "world"


변수(Variable)

변수 사용시에는 "=" 기호 앞뒤로 공백이 없이 입력하면 대입연산자가 된다.
그리고 선언된 변수는 기본적으로 전역 변수(global variable)다. 단 함수 안에서만 지역 변수(local variable)를 사용할 수 있는데 사용할려면 변수 명 앞에 local을 붙여주면 된다.
그런데 전역 변수는 현재 실행된 스크립트 파일에서만 유효하다. 자식 스크립트에서는 사용 할 수 없는 변수다.
변수 명 앞에 export을 붙여주면 환경 변수(environment variable)로 설정되어 자식 스크립트에서 사용 가능하다.
환경 변수 사용시 예약 변수(reserved variable)에 주의하자.(참고로 환경 변수는 .bash_profile에서 정의한다.)

# 전역 변수 지정
string="hello world"
echo ${string}

# 지역 변수 테스트 함수
string_test() {
    # 전역 변수와 동일하게 사용함. 만약 local 뺀다면 전역 변수에 덮어씌어지게 됨
    local string="local"
    echo ${string}
}
# 지역 변수 테스트 함수 호출
string_test
# 지역 변수 테스트 함수에서 동일한 변수 명을 사용했지만 값이 변경되지 않음
echo ${string}

# 환경 변수 선언
export hello_world="hello world..."
# 자식 스크립트 호출은 스크립트 경로을 쓰면된다.
/home/export_test.sh

#환경 변수를 테스트하기 위해 export_test.sh 파일을 만들고 선언한 변수를 확인해본다.
echo ${hello_world}


예약 변수(Reserved Variable)

문자설명
HOME사용자의 홈 디렉토리
PATH실행 파일을 찾을 경로
LANG프로그램 사용시 기본 지원되는 언어
PWD사용자의 현재 작업중인 디렉토리
FUNCNAME현재 함수 이름
SECONDS스크립트가 실행된 초 단위 시간
SHLVL쉘 레벨(중첩된 깊이를 나타냄)
SHELL로그인해서 사용하는 쉘
PPID부모 프로세스의 PID
BASHBASH 실행 파일 경로
BASH_ENV스크립트 실행시 BASH 시작 파일을 읽을 위치 변수
BASH_VERSION설치된 BASH 버전
BASH_VERSINFOBASH_VERSINFO[0]~BASH_VERSINFO[5]배열로 상세정보 제공
MAIL메일 보관 경로
MAILCHECK메일 확인 시간
OSTYPE운영체제 종류
TERM로긴 터미널 타입
HOSTNAME호스트 이름
HOSTTYPE시스템 하드웨어 종류
MACHTYPE머신 종류(HOSTTYPE과 같은 정보지만 조금더 상세하게 표시됨)
LOGNAME로그인 이름
UID사용자 UID
EUIDsu 명령에서 사용하는 사용자의 유효 아이디 값(UIDEUID 값은 다를 수 있음)
USER사용자의 이름
USERNAME사용자 이름
GROUPS사용자 그룹(/etc/passwd 값을 출력)
HISTFILEhistory 파일 경로
HISTFILESIZEhistory 파일 크기
HISTSIZEhistory 저장되는 개수
HISTCONTROL중복되는 명령에 대한 기록 유무
DISPLAYX 디스플레이 이름
IFS입력 필드 구분자(기본값:   - 빈칸)
VISUALVISUAL 편집기 이름
EDITOR기본 편집기 이름
COLUMNS현재 터미널이나 윈도우 터미널의 컬럼 수
LINES터미널의 라인 수
LS_COLORSls 명령의 색상 관련 옵션
PS1기본 프롬프트 변수(기본값: bash\$)
PS2보조 프롬프트 변수(기본값: >), 명령을 "\"를 사용하여 명령 행을 연장시 사용됨
PS3쉘 스크립트에서 select 사용시 프롬프트 변수(기본값: #?)
PS4쉘 스크립트 디버깅 모드의 프롬프트 변수(기본값: +)
TMOUT0이면 제한이 없으며 time시간 지정시 지정한 시간 이후 로그아웃


위치 매개 변수(Positional Parameters)

문자설명
$0실행된 스크립트 이름
$1$1 $2 $3...${10}인자 순서대로 번호가 부여된다. 10번째부터는 "{}"감싸줘야 함
$*전체 인자 값
$@전체 인자 값($* 동일하지만 쌍따옴표로 변수를 감싸면 다른 결과 나옴)
$#매개 변수의 총 개수


특수 매개 변수(Special Parameters)

문자설명
$$현재 스크립트의 PID
$?최근에 실행된 명령어, 함수, 스크립트 자식의 종료 상태
$!최근에 실행한 백그라운드(비동기) 명령의 PID
$-현재 옵션 플래그
$_지난 명령의 마지막 인자로 설정된 특수 변수


매개 변수 확장(Parameter Expansion)

아래 예를 테스트하기 위한 변수: string="abc-efg-123-abc"

문자설명
${변수}$변수와 동일하지만 {} 사용해야만 동작하는 것들이 있음(예: echo ${string})
${변수:위치}위치 다음부터 문자열 추출(예: echo ${string:4})
${변수:위치:길이}위치 다음부터 지정한 길이 만큼의 문자열 추출(예: echo ${string:4:3})
${변수:-단어}변수 미선언 혹은 NULL일때 기본값 지정, 위치 매개 변수는 사용 불가(예: echo ${string:-HELLO})
${변수-단어}변수 미선언시만 기본값 지정, 위치 매개 변수는 사용 불가(예: echo ${string-HELLO})
${변수:=단어}변수 미선언 혹은 NULL일때 기본값 지정, 위치 매개 변수 사용 가능(예: echo ${string:=HELLO})
${변수=단어}변수 미선언시만 기본값 지정, 위치 매개 변수 사용 가능(예: echo ${string=HELLO})
${변수:?단어}변수 미선언 혹은 NULL일때 단어 출력 후 스크립트 종료,(예: echo ${string:?HELLO})
${변수?단어}변수 미선언시만 단어 출력 후 스크립트 종료(예: echo ${string?HELLO})
${변수:+단어}변수 선언시만 단어 사용(예: echo ${string:+HELLO})
${변수+단어}변수 선언 혹은 NULL일때 단어 사용(예: echo ${string+HELLO})
${#변수}문자열 길이(예: echo ${#string})
${변수#단어}변수의 앞부분부터 짧게 일치한 단어 삭제(예: echo ${string#a*b})
${변수##단어}변수의 앞부분부터 길게 일치한 단어 삭제(예: echo ${string##a*b})
${변수%단어}변수의 뒷부분부터 짧게 일치한 단어 삭제(예: echo ${string%b*c})
${변수%%단어}변수의 뒷부분부터 길게 일치한 단어 삭제(예: echo ${string%%b*c})
${변수/찾는단어/변경단어}처음 일치한 단어를 변경(예: echo ${string/abc/HELLO})
${변수//찾는단어/변경단어}일치하는 모든 단어를 변경(예: echo ${string//abc/HELLO})
${변수/#찾는단어/변경단어}앞부분이 일치하면 변경(예: echo ${string/#abc/HELLO})
${변수/%찾는단어/변경단어}뒷부분이 일치하면 변경(예: echo ${string/%abc/HELLO})
${!단어*}, ${!단어@}선언된 변수중에서 단어가 포함된 변수 명 추출(예: echo ${!string*}, echo ${!string@})


배열(Array Variable)

배열 변수 사용은 반드시 괄호를 사용해야 한다.(예: ${array[1]})
참고: 1차원 배열만 지원함

# 배열의 크기 지정없이 배열 변수로 선언
# 참고: 'declare -a' 명령으로 선언하지 않아도 배열 변수 사용 가능함
declare -a array

# 4개의 배열 값 지정
array=("hello" "test" "array" "world")

# 기존 배열에 1개의 배열 값 추가(순차적으로 입력할 필요 없음)
array[4]="variable"

# 기존 배열 전체에 1개의 배열 값을 추가하여 배열 저장(배열 복사 시 사용)
array=(${array[@]} "string")

# 위에서 지정한 배열 출력
echo "hello world 출력: ${array[0]} ${array[3]}"
echo "배열 전체 출력: ${array[@]}"
echo "배열 전체 개수 출력: ${#array[@]}"

printf "배열 출력: %s\n" ${array[@]}

# 배열 특정 요소만 지우기
unset array[4]
echo "배열 전체 출력: ${array[@]}"

# 배열 전체 지우기
unset array
echo "배열 전체 출력: ${array[@]}"


변수 타입 지정(Variables Revisited)

Bash 변수는 타입을 구분하지 않고 기본적으로 문자열이다. 단 문맥에 따라서 연산 처리한다.
그런데 불완전한 형태의 declare, typeset 타입 지정 명령을 지원한다.(두 명령은 동일함)
참고: 코멘트에 있는 다른 문법 사용을 추천한다.

# 읽기 전용
# readonly string_variable="hello world" 문법과 동일 함
declare -r string_variable

# 정수
# number_variable=10 문법과 동일 함
declare -i number_variable=10

# 배열
# array_variable=() 문법과 동일 함
declare -a array_variable

# 환경 변수
# export export_variable="hello world" 문법과 동일 함
declare -x export_variable="hello world"

# 현재 스크립트의 전체 함수 출력
declare -f

# 현재 스크립트에서 지정한 함수만 출력
declare -f 함수이름


논리 연산자(Logical Operators)

문자설명
&&, -a논리 AND
||, -o논리 OR


산술 연산자(Arithmetic Operators)

문자설명
+더하기
-빼기
*곱하기
/나누기
**누승(exponentiation), 거듭제곱(power)
%modulo 나 mod (정수 나누기에서 나머지 값)
+=상수값 만큼 증가(plus-equal)
-=상수값 만큼 감소(minus-equal)
*=상수값을 곱함(times-equal)
/=상수값으로 나눔(slash-equal)
%=상수값으로 나눈 나머지 값(mod-equal)


비트 연산자(Bitwise Operators)

문자설명
<<비트 왼쪽 쉬프트(쉬프트 한 번당 2를 곱하는 것과 동일함)
<<=left-shift-equal
>>비트 오른쪽 쉬프트(쉬프트 한 번당 2로 나눔)
>>=right-shift-equal(<<=와 반대)
&비트 and
&=비트 and-equal
|비트 OR
|=비트 OR-equa
~비트 negate
!비트 NOT
^비트 XOR
^=비트 XOR-equa


기타 연산자(Miscellaneous Operators)

문자설명
,콤마 연산자(comma operator), 2개 이상의 산술 연산을 묶어줌


정수 비교(Integer Comparison)

문자설명
-eq같음
-ne같지 않음
>, -gt더 큼(> 이중 소괄호에서 사용 가능)
>=, -ge더크거나 같음(>= 이중 소괄호에서 사용 가능)
<, -lt더 작음(< 이중 소괄호에서 사용 가능)
<=, -le더 작거나 같음(<= 이중 소괄호에서 사용 가능)


문자열 비교(String Comparison)

문자설명
=, ==같음
!=같지 않음
<ASCII 알파벳 순서에 더 작음
>ASCII 알파벳 순서에서 더 큼
-z문자열이 NULL, 길이가 0인 경우
-n문자열이 NULL이 아님
${변수}문자열이 NULL이 아님


파일 비교(File test operators)

문자설명
-e파일이 존재
-f파일이 존재하고 일반 파일인 경우(디렉토리 혹은 장치파일이 아닌 경우)
-s파일이 존재하고 0보다 큰 경우
-d파일이 존재하고 디렉토리인 경우
-b파일이 존재하고 블록장치 파일인 경우
-c파일이 존재하고 캐릭터 장치 파일인 경우
-p파일이 존재하고 FIFO인 경우
-h파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우
-L파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우
-S파일이 소켓 디바이스인 경우
-t파일이 디스크립터가 터미널 디바이스와 연관이 있음
-r파일이 존재하고 읽기 가능한 경우
-w파일이 존재하고 쓰기가 가능한 경우
-x파일이 존재하고 실행 가능한 경우
-g파일이 존재하고 SetGID가 설정된 경우
-u파일이 존재하고 SetUID가 설정된 경우
-k파일이 존재하고 스티키 비트(Sticky bit)가 설정된 경우
-O자신이 소유자임
-G그룹 아이디가 자신과 같음
-N마지막으로 읽힌 후에 변경 됐음
file1 -nt file2file1 파일이 file2 파일보다 최신임
file1 -ot file2file1 파일이 file2 파일보다 예전것임
file1 -ef file2file1 파일과 file2 파일이 같은 파일을 하드 링크하고 있음
!조건이 안 맞으면 참(예: ! -e file)


반복문(for, while, until)

반목문 작성 시 아래 명령어(흐름제어)을 알아두면 좋다.
반복문을 빠져 나갈때: break
현재 반복문이나 조건을 건너 뛸때: continue

# 지정된 범위 안에서 반복문 필요 시 좋음
for string in "hello" "world" "..."; do;
    echo ${string};
done

# 수행 조건이 true 일때 실행됨 (실행 횟수 지정이 필요하지 않은 반복문 필요 시 좋음)
count=0
while [ ${count} -le 5 ]; do
    echo ${count}
    count=$(( ${count}+1 ))
done

# 수행 조건이 false 일때 실행됨 (실행 횟수 지정이 필요하지 않은 반복문 필요 시 좋음)
count2=10
until [ ${count2} -le 5 ]; do
    echo ${count2}
    count2=$(( ${count2}-1 ))
done


조건문(if...elif...else...fi)

조건문 작성 시 주의해야될 부분은 실행 문장이 없으면 오류 발생함

string1="hello"
string2="world"
if [ ${string1} == ${string2} ]; then
    # 실행 문장이 없으면 오류 발생함
    # 아래 echo 문장을 주석처리하면 확인 가능함
    echo "hello world"
elif [ ${string1} == ${string3} ]; then
    echo "hello world 2"
else
    echo "hello world 3"
fi

# AND
if [ ${string1} == ${string2} ] && [ ${string3} == ${string4} ]
..생략

# OR
if [ ${string1} == ${string2} ] || [ ${string3} == ${string4} ]
..생략

# 다중 조건
if [[ ${string1} == ${string2} || ${string3} == ${string4} ]] && [ ${string5} == ${string6} ]
..생략


선택문(case)

정규식을 지원하며 | 기호로 다중 값을 입력 가능하며 조건의 문장 끝에는 ;; 기호로 끝을 표시한다.
참고: 대문자와 소문자는 다른 문자다.

# case문 테스트를 위한 반복문
for string in "HELLO" "WORLD" "hello" "world" "s" "start" "end" "etc"; do

    # case문 시작
    case ${string} in
        hello|HELLO)
            echo "${string}: hello 일때"
            ;;
        wo*)
            echo "${string}: wo로 시작하는 단어 일때"
            ;;
        s|start)
            echo "${string}: s 혹은 start 일때"
            ;;
        e|end)
            echo "${string}: e 혹은 end 일때"
            ;;
        *)
            echo "${string}: 기타"
            ;;
    esac
    # //case문 끝

done


디버깅(Debugging)

간단하게는 echo, exit 명령나 tee 명령어로 디버깅한다.
다른 방법으로 실행 시 옵션을 주거나 코드에 한줄만 추가하면 해볼수 있다.

Bash 옵션(스크립트 실행 시)set 옵션(스크립트 코드 삽입)설명
bash -nset -n, set -o noexec스크립트 실행없이 단순 문법 오류만 검사(찾지 못하는 문법 오류가 있을수 있음)
bash -vset -v, set -o verbose명령어 실행전 해당 명령어 출력(echo)
bash -xset -x, set -o xtrace명령어 실행후 해당 명령어 출력(echo)
set -u, set -o nounset미선언된 변수 발견시 "unbound variable" 메시지 출력


마무리하며

  • 여기서 인자(argument)와 매개변수(parameter)는 이름만 다를 뿐 의미는 같다.
  • Bash는 공백에 민감하다.
  • 변수 사용은 생각하지 말고 ${변수} 이렇게 쓰자.


함께보기


<script>
//var a = "test";
if(typeof(a) == "undefined")
alert("선언 안됨");
else
alert("선언됨");
</script>



outlook 2000 에서 2010 으로 파일 메일 이동후 pst 파일깨짐


1. 윈도우 탐색기를 열어 "C:\Program Files\Microsoft Office\Office14" 위치에서"SCANPST.EXE" 파일을 더블클릭


2. [찾아보기단추를 눌러 복구할 PST 파일을 선택한 후 [시작단추를 클릭

 

3. 받은 편지함에 대한 오류에 대한 메시지 창이 표시되면 정보를 확인한 후 [복구단추를 클릭

 

4. 복구가 완료되면 [확인단추를 클릭한 후 아웃룩을 다시 실행


위와 같이 했음에도 안되넹.. ㅡㅡ;;;


2000 으로 재 실행하였음. 


추가정보 : 2000 의 scanpst.exe 의 위치는 C:\Program Files\Common Files\System\Mapi\1042\NT 에 있다.


<domain> <type> <item> <value>


<domain> : 값을 적용시킬 범위. userid, groupid, *, % 가 올 수 있다
  - userid : 특정 유저아이디에만 적용
  - groupid : 그룹아이디에만 적용
  - * : 전부
  - % : *와 동일하나 maxlogins 설정에만 사용?

<type>
 - 'hard' : root 와 kernel 에 의해 설정이 되게하며 user는 설정된 값 이상으로 변경 불가
 - 'soft' : user 가 얼마든지 설정값을 변경가능
 - '-' : hard 와 soft 둘다 설정
 
나머지는 limits.conf 열어보면 설명 잘 나와있음.


크론은 기본적으로 환경변수를 상속 받지 않는다..

그래서 환경변수를 사용하기 위해서는 기본쉘(/bin/sh) 로 한번더 랩핑을 하거나 shell script 로 코딩을 한다. 

그래서 php 로 만든 스크립트내에서 환경 변수를 사용하고 이를 크론에 등록할시엔

 반드시 쉘로 랩핑을 해주어야함.

 

 아래는 등록 및 코딩 예입니다.

 

*/1 * * * * *  /home/tmp/aa.sh

 

---------- /home/tmp/aa.sh -----------

 1 #!/bin/sh

 2 HOSTNAME=`/bin/hostname`

 3 export HOSTNAME

 4 /home/tmp/aa.php

----------// /home/tmp/aa.sh -----------

 

 

---------- /home/tmp/aa.php -----------

#!/home/bin/www/php -q

<?php

$szHostnameStr = $_SERVER['HOSTNAME'];

 

if($szHostnameStr == "umdooserver") { echo "개발서버"; } else { echo "실서버"; }

?>

----------// /home/tmp/aa.php -----------





막상 캡쳐하고 나니 화질이 구림..

검색해도 의미가 다들 모호해서(영어도 딸리고) 삽질을 해서 명확한 의미를 알았다.

scrollHeight : 객체 내용의 높이
offsetHeight : border 를 포함한 객체 높이
clientHeight : border 및 스크롤바를 제외한 객체 높이

이것들이 참 글로 표현하기 힘든데 특히 가장 힘든건 'scrollHeight' 이다

내용이 늘어나면 offsetHeight 보다 더 커지기도 한다.(당연한 거긴 하지만..)

다른곳에선 큰 그림만을 예제로 들고 있어서 이해하기기 어려웠다..

가장 빠른 이해는 직접 해보는거다~~~~~ ^^

stl,mfc,atl 등에서 데이터 타입이 제각각인지라

어플 <-> 웹 간에 데이터를 주고 받을때 케스팅이 필요한 경우가 있더라~

com 의 경우도 마찬가지이고. ㅠㅠ

변환방법을 찾다가 얻은 링크들이다..



LPSTR,LPCSTR,LPTSTR,LPWSTR,LPCWSTR 정보링크 : http://blog.naver.com/kkan22/80050248215

BSTR 사용 정보 링크 : http://blog.naver.com/noforest/70028493852

char*, wchar_t*, _bstr_t, CComBSTR, CString, basic_string, System.String 변환 :

http://darkblitz.tistory.com/tag/_bstr_t

자주쓰지 않아서 인지
매번 찾게 된다.. 찾을때 마다 시간낭비.. ㅜㅜ


SELECT DATE_FORMAT(regist_date, '%Y-%m-%d'),count(id_or_ip)
FROM foo_tbl
WHERE regist_date > '2008-10-31 23:59:59' AND is_stop = 'Y'
GROUP BY DATE_FORMAT(regist_date, '%Y-%m-%d')
INTO OUTFILE '/tmp/foo.unl'
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n';


머리 나쁘면 개고생~~~
기본으로 리눅스를 설치하고 터미널을 xterm 으로 설정후

'ls' 를 날려보면

OTL

눈이 아플 정도로 디렉토리 색깔이 너무 파랗다~

그래서 설정을 변경해 보았다..

# cp /etc/DIR_COLORS.xterm ~/.dir_colors

복사후 vi 로 .dir_colors 파일을 편집해보자..

뚜껑을 열고 42라인 정도로 이동하면 아래와 같이 나온다..

# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
NORMAL 00   # global default, although everything should be something.
FILE 00     # normal file
#DIR 00;34   # directory   <--- 기본설정
DIR 01;31   # directory
LINK 00;36  # symbolic link
FIFO 40;33  # pipe
SOCK 00;35  # socket
BLK 40;33;01    # block device driver
CHR 40;33;01    # character device driver
ORPHAN 01;05;37;41  # orphaned syminks
MISSING 01;05;37;41 # ... and the files they point to

위와 같이 변경후 터미널을 재 접속하면.. .두둥...

당신의 눈은 훨씬편해져 있을 것이다~~ ^^


Apache 2.2.8 Option
==========================================================================================
OPTIM="-O3 -march=i686 -funroll-loops -fomit-frame-pointer" \
CFLAGS="-DDYNAMIC_MODULE_LIMIT=256" \
./configure \
--prefix=/home/dvlp \
--enable-so \
--enable-rewrite=shared \
--enable-expires=shared \
--enable-asis=shared \
--enable-auth_basic \
--enable-authn_file=shared \
--enable-authn_default=shared \
--enable-authz_groupfile=shared \
--enable-authz_user=shared \
--enable-authz_host \
--enable-authz_default=shared \
--enable-ssl=shared \

## 아래옵션은 선택사양
#--enable-echo=shared  ## 디버깅시 필요
==========================================================================================

 PHP
==========================================================================================
 OPTIM="-O3 -march=i686" \
 ./configure \
 --prefix=/home/dvlp \
 --enable-track-vars \
 --with-apxs2=/home/dvlp/bin/apxs \
 --with-mysql \
 --without-xml \
 --without-pear
==========================================================================================

 

httpd.conf 에 아래 추가==========================================================================================
<IfModule php4_module>
    AddType application/x-httpd-php .php .cgi .inc .html
    AddType application/x-httpd-php-source .phps
</IfModule>
==========================================================================================

후속버젼
SERVER_ROOT="/install_path"
SERVER_DOC_ROOT="/install_path/www"
OPTIM="-O3 -march=i686 " ./configure \
--prefix=$SERVER_DOC_ROOT \
--libexecdir=$SERVER_ROOT/modules \
--exec-prefix=$SERVER_ROOT \
--includedir=/install_path/include \
--disable-cgi \
--enable-so \
--enable-info \
--enable-rewrite \
--enable-vhost-alias \
--enable-mods-shared=most
DSO 모듈을 빼려고 위와 같이 컴파일 하였으나 httpd.conf 상의 SERVER_ROOT 를 변경하니 SERVER_ROOT/modules 에서 찾음
결론은 저 옵션은 의미없다....


 

====== 기본 모듈 리스트 =======
core.c
mod_access.c
mod_auth.c
mod_include.c
mod_log_config.c
mod_env.c
mod_setenvif.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_info.c
mod_vhost_alias.c
mod_negotiation.c
mod_dir.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_rewrite.c
mod_so.c


주의사항
아래는 apache 2.2.* 버전 이상에서 configure 실행시 발생하는 이벤트이다.

========================================================================================================
checking for APR version 1.2.0 or later... yes
checking for APR-util version 1.2.0 or later... no
configure: error: APR-util version 1.2.0 or later is required</PRE>
========================================================================================================

시스템에 apr 과 apr-util 1.0 또는 1.1 이 설치되어 있기 때문에 apr 1.2 를 수동 설치하고 아래와 같은 옵션으로 configure 실행
 
아파치 소스로 이동 후 아래 실행
>$ cd srclib/apr ; ./configure ;make
>$ cd srclib/apr-util ; ./configure --with-apr=../apr ;make

아파치 소스 루트로 돌아와 아래 옵션 추가후 실행


>$ ./configure --with-apr=srclib/apr
--with-apr-util=srclib/apr-util


* apr 한글화 해주실분 없나요?? 굽신굽신. ㅜㅡ

+ Recent posts