svn에 코드를 등록하면서 항상 .a 파일이 정상적으로 add되지 않아서 문제가 되었습니다.코드 등록은 다 해놓고, 막상 나중에 .a파일이 누락되어 있다는 사실을 인지하고 뒤늦게 add를 했지요. 기본적으로 svn status 명령으로 확인하면 .a 파일에 대한 정보는 보이지 않습니다.이는 subversion의 default로 .a 파일을 ignore하고 있기 때문입니다. ignore파일 리스트는 대략 아래와 같습니다.global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo ignore를 무시하고 확인하려면 아래와 같이 svn status에 옵션을 줍니다.[oops]$ svn st --no-ignoreI test.a 혹은, 아래..
python에는 인터프리터에서 자동완성을 사용할 수 있게 도와주는 모듈이 존재합니다.해당 모듈을 import만 하면 바로 사용할 수 있는데요,아래와 같이 사용해봅시다.>>> import rlcompleter, readline>>> readline.parse_and_bind('tab:complete') 테스트로 sys를 import하고 sys.에서 tab키를 입력해봅니다. 위와 같이 자동완성 됨을 확인 할 수 있습니다. 간혹 아래와 같이 모듈을 못찾는 경우가 있습니다.>>> import rlcompleterTraceback (most recent call last): File "", line 1, in ImportError: No module named rlcompleter>>> 이러한 경우 보통 goog..
프로그램 개발만큼 중요한것이 사용자에게 프로그램의 정보(사용법)를 알리는 help입니다. 그런 면에서.. help함수를 구현하고 echo로 도움말을 출력하는 기법 자주 애용했었는데요,예를 들면 아래와 같습니다. #!/bin/sh help() { echo "This is a test message." echo "Maybe help()." } [ -z "$1" ] && help 하지만 라인수가 많아졌을때 관리적인 측면에서 좋지 않습니다.또한 결과 출력 시에 줄 맞춤에도 다소 문제가 있지요, 해서 사용하는 방법이 아래와 같이 존재합니다. #!/bin/sh help() { cat
파일을 신나게 수정하다가 원본 상태(최초 clone했을때 상태)로 되돌리고자 할때 사용하는 명령이 있습니다.[oops]$ git status# On branch master# Changes not staged for commit:# (use "git add ..." to update what will be committed)# (use "git checkout -- ..." to discard changes in working directory)## modified: Makefile# modified: READMEno changes added to commit (use "git add" and/or "git commit -a")[oops]$ [git status] 명령으로 확인시에 Makefile과 RE..
git은 기본적으로 remote에 commit을 하고 commit되어 있는 내용을 원격서버로 push하는 개념입니다. remote에는 자유롭게 commit을 할 수 있는데요, 하지만 이게 독이 되는 경우가 있습니다.잦은 remote에 commit을 그대로 원격서버에 push하는 경우에 서버의 log가 지저분해질 우려가 있습니다.(다수의 개발자가 각자 push를 할테니까요) 그래서, 이때 필요한게 remote의 commit들을 합치는 rebase입니다.일단 개념에 앞서 아래와 같이 remote에 commit된 내용들이 있습니다.(git://github.com/tswicegood/mysite-chp5.git 로 테스트를 진행했습니다.)[oops@ mysite-chp5]$ git logcommit f329ec..
분산버전관리시스템을 사용하면서 git clone시에 매번 password를 입력하는 것이 불편했습니다. 그 불편함은 인터넷에 널린.. ssh-keygen을 사용해서 개인키를 서버의 .ssh/authorized_keys 에 등록해서패스워드를 생략하는 방법으로 해소했는데요. 이 방법을 스크립트화 시켜보았습니다.(여러분의 시간은 소중하니까요) #!/bin/sh ID_RSA=~/.ssh/id_rsa.pub # id_rsa.pub 파일이 없을때만 ssh-keygen을 수행합니다. if [ ! -f $ID_RSA ]; then expect -c "spawn ssh-keygen" \ -c "expect -re \":\"" \ -c "send \"\r\"" \ -c "expect -re \":\"" \ -c "send..
리눅스에서 application을 사용하면서 인자의 자동완성에 대해 궁금증이 생겼습니다. 예를들면 git의 경우 "git "을 타이핑하고 Tab키를 누르게 되면 아래처럼 입력 가능한 명령어들이 출력이 되는데요, [oops@ ]$ git add cherry-pick fetch log relink stage am ci filter-branch lol remote stash annotate clean format-patch merge repack status apply clone fsck mergetool replace submodule archive commit gc mv request-pull svn bisect config get-tar-commit-id name-rev reset tag blame cr..
git의 경우에는 svn과 다르게 삭제된 파일의 복구가 간단하지 않습니다.(물론 svn과 비교한다면 말이죠..) svn은 삭제된 파일도 아래 명령어로 간단하게 되살릴 수 있습니다.svn up (update) 하지만 git의 경우에는 아래와 같은 절차가 필요합니다.[oops@ ]$ git ls-files -d // 삭제된 파일 리스트 확인README[oops@ ]$ [oops@ ]$ git checkout README[oops@ ]$ [oops@ ]$ git ls-files -d [oops@ ]$ 파일이 여러개인 경우 아래와 같이 사용할 수도 있습니다.[oops@ ]$ git ls-files -d | xargsREADMEMakefile[oops@ ]$[oops@ ]$ git ls-files -d | xar..
kernel에 개발을 하던 중 아래와 같은 error가 발생했습니다.error: invalid use of undefined type ‘struct address_space’ /proc/meminfo 의 정보 중 Cached 필드 값을 얻는 모듈을 가져다 쓰는 과정에서 발생을 했는데요,Cached는 아래와 같이 구해집니다. cached = global_page_state(NR_FILE_PAGES) - total_swapcache_pages - i.bufferram; 이 cached를 구하는 연산을 가져다 쓰려는데, total_swapcache_pages가 문제가 됐습니다.해당 define은 include/linux/swap.h 에 되어 있었고, 해당 파일은 정상적으로 include 되어있었는데 말이죠, ..
configure를 생성하기 위해서는 우선 autoscan을 활용해서 configure.ac를 생성하도록 합니다. autoscan은 configure.ac를 생성할 수 있도록 어느정도 자동화 되어 있는 툴입니다. configure.ac의 문법을 잘 모를때는 참 다행이 아닐 수 없겠네요, 기본 틀을 제공 받고 필요한 내용은 별도로 추가를 하면 되니까요. 우선 아래와 같이 autoscan을 활용해 봅니다. $ ls hello.c $ autoscan $ $ ls autoscan.log configure.scan hello.c autoscan을 하고 나면 configure.scan이라는 파일과 관련 log파일이 생성이 됩니다. configure.scan은 configure.ac와 동일한 파일입니다. autosc..
autotools란 autoconf나 automake와 같은 유틸리티들을 지칭한다고 하는데, wikipedia 에서 상세 정보를 볼 수 있습니다. wikepedia에서 아래 그림을 발췌하였고, 앞으로 그림에 있는 각 파일에 대해서 살펴보도록 합니다. (.ac는 autoconf의 약자고, .am은 automake의 약자로 보입니다.) 우선 테스트 할 수 있는 간단한 hello.c를 작성합니다. #include int main(void) { printf("Hello World \n"); return 0; } 앞으로 해당 코드를 autotools의 일환인 autoconf와 automake등을 적절히 사용해서 컴파일 하도록 합니다.
OpenSource를 받아서 보면 종종 볼 수 있는 파일 리스트가 있습니다.바로 아래와 같은 파일들인데요, $ ls AUTHORS Makefile.am SConstruct compile config.log configure.ac doc m4 tests COPYING Makefile.in aclocal.m4 config.guess config.status depcomp install-sh missing INSTALL NEWS autogen.sh config.h config.sub distribute.sh libtool src Makefile README config.h.in configure distribute.sh.in ltmain.sh stamp-h1 (웹 데몬인 lighttpd 의 소스 입니다.) 뭔..
윈도우7을 사용하면서 "사용 안 함"으로 설정 해 놓은 무선랜이 "사용"으로 변경되는 경우를 종종 보았습니다. (단축키가 존재하는 것인가요?) 윈도우+x 단축키를 이용해서 켰다면 해당 창이 떠있을텐데 말이에요. 그런데 무선네트워크가 "사용 안 함"으로 되어 있는 경우에는 윈도우+x 키에 보이는 모바일 센터에 무선랜 관련 설정이 보이지 않습니다. 아래 처럼 말이죠, 다시 무선네트워크를 활성화 시킵니다. 이제는 모바일 센터에서 무선 네트워크 설정이 정상적으로 보입니다. 이제 본격적인 이야기를 하면 [네트워크 연결]에서 Alt 키를 누르면 탭이 새로 보입니다. (파일, 편집, 보기, 도구, 고급, 도움말) 여기서 고급을 선택하고, 고급설정으로 들어갑니다. 그럼 연결 순서를 정할 수 있는 화면이 나오는데요, 기..
shell에서 awk의 내장함수인 substr은 문자열 전체가 아닌 일부를 비교할때 사용합니다.아래 예제를 살펴봅니다. #!/bin/sh echo | awk '{ print substr("my name is oops",12,4)}' 입력 받은 "my name is oops"에서 12번째 자리인 o 부터 4개를 출력합니다.응용하면 아래와 같은 코드도 구현할 수 있습니다. #!/bin/sh NAME=`echo | awk '{name=substr("my name is oops",12,4);print name}'` echo -n "name?" echo $NAME 실행 결과는 다음과 같습니다. $ ./oops name?oops 이렇게 되면 NAME 변수를 코드 내에서 활용할 수 있게 되겠지요? 이외에도 내장함수는..
mail()함수 사용시에 수신측 body에 !(느낌표)가 중간중간 삽입되는 경우가 발생합니다. 이때는 여기를 참고해서 처리하도록 합니다.(혹시 링크가 열리지 않을 경우..)// 1000자 이상에서 ! 생기는것 방지 (아래 2줄) $add_mailheader="Content-Transfer-Encoding: base64 \r\n"; $body = chunk_split(base64_encode($body)); mail($to,$subject,$body,"Content-Type: ".$content_type."; charset=euc-kr\r\n".$add_mailheader.$shopname."\r\n"); 반나절간의 삽질이.. 삽질로 끝나지 않아서 다행입니다...ㅠㅠ
php 실행 시에 입력 받은 인자의 종류가 다양할때 옵션 처리가 필요합니다. argc와 argv[]로도 가능하지만 코드가 지저분해질 염려가 있으니까요. 이럴때 필요한 함수가 getopt 입니다. 우선 아래 코드를 봅니다. char는 "-"로 구분되는 옵션이고, string은 "--"로 구분되는 옵션입니다. 뒤에 ":"는 옵션 뒤에 인자를 필수로 입력 받는다는 의미 입니다. 아래와 같은 결과를 얻을 수 있습니다.oops$ php getopt.php --i386 --compile=busybox array(2) { ["i386"]=> bool(false) ["compile"]=> string(4) "busybox" } compile true i386 true oops$ php 버전에 따라 $longopts 는..
기본적으로 ssh접속시에 key 교환 알고리즘은 아래와 같습니다. 내용은 wireshark로 server key init 의 내용입니다. 하지만 때로는 보안상의 이유로 key교환 알고리즘의 종류를 변경해야 합니다. 요즘은 모든 통신이 sha2 이상이어야 한다지요? 그래서 OpenSSH 6.3p1 의 key.c 내용을 수정해서 sha2에 해당하는 "diffie-hellman-group14-sha1"만 사용하도록 수정한 wireshark내용 입니다. 통신에 사용되는 알고리즘의 경우에는 sshd_config 를 수정해서 가능했는데, 기본적으로 key교환 알고리즘은 config를 통해서는 제어 할 수 없나 봅니다..
특정 폴더에 있는 script를 실행하는 shell을 작성해야 할 일이 생겼습니다. 해당 경로에 있는 script를 하드코딩으로 실행해도 되겠지만, 나중에 리스트가 많아지는 경우를 생각해서 확장성에 초점을 맞춘 코드 입니다.#!/bin/sh APPS_SCRIPT=/test/apps/ if [ -e "$APPS_SCRIPT" ]; then SCRIPT_LIST=`ls $APPS_SCRIPT` for SCRIPT in $SCRIPT_LIST; do $APPS_SCRIPT/$SCRIPT done fi shell의 if 문법과 for, 말고는 특별한 내용은 없습니다.
- Total
- Today
- Yesterday