발생일: 2014.01.14 키워드: unix, eval 문제: 지금은 잘 생각나지 않는데, 어떤 쉘 스크립트 코드를 보다보니 `eval`이란 커맨드를 쓰더라.쉘에서 `eval` 커맨드가 뭘 의미하는 걸까? 해결책: 커맨드에 쉘에서 처리해야 할 값(예: 변수)가 문자열로 포함된 경우에 유용하다.아래 코드를 보면 이해할 수 있다. $ n=1$ s='$n' # 문자열로 $n을 갖도록 한다. $ echo $n1$ echo $s$n$ eval echo $s1 참고:http://www.unix.com/shell-programming-scripting/66063-eval-shell-scripting.html
발생일: 2013.10.10 키워드: configure, make, make install 문제: 소스 코드를 빌드할 때, `configure, make, make install`을 순서대로 실행하는데,각 명령이 의미하는 게 정확히 뭘까? 해결책: http://www.codecoffee.com/tipsforlinux/articles/27.html정말 친절하고 쉬운 설명! $ ./configure 쉘 파일 이름이다. 소프트웨어를 설치할 머신에 대한 정보를 확인한다. 그리고 현재 머신에 적합한 `Makefile`을 만든다. $ make 현재 디렉토리의 `Makefile`을 실행하는 명령이다. 여러 작업을 수행할 수 있지만, 기본적으로 소스를 컴파일하고 실행가능한 파일을 만든다. $ make install 컴..
발생일: 2013.10.23 키워드: screen, 스크린 문제: 다른 팀 동료가 서버를 돌려두곤, '스크린으로 띄워놨어요~'라고 알려줬다. 오잉. 이게 뭐지~? 해결책: 한 터미널에서 여러 세션을 띄워두고 전환하며 실행할 수 있는 명령이다.터미널을 종료한 후에도 세션이 살아있어서, 여러 작업을 동시에 처리할 때 편하다. screen -R : 목록 screen -S 스크린명 screen -R 스크린명: 세션 복구 ctrl + a + d: 세션에서 나오기 (로그아웃 되진 않음) 자세한 설명:http://pinge.egloos.com/2358742 기본 사용법: https://kldp.org/node/18744
발생일: 2013.10.04 문제: 다음 ABC Talk 주제로 `node.js 시작하기`를 선정했다.어떻게 소개하면 좋을까 하고 슬라이드쉐어를 서핑하다보니,어떤 슬라이드에서 동시성 처리가 좋다며 `Apache`와 `node.js`의 벤치마크 결과를 사용하는 걸 봤다. 헌데, 벤치마킹 방법으로 `ab`라는 명령을 사용하고 있더라.음.. 난 처음보는 건데, 이건 뭘까~? 해결책: 아파치가 설치될 때 같이 설치되는 벤치마킹 도구이고,웹서버의 성능 검사 도구로 사용한다. 유닉스에서 `ab` 명령으로 사용한다. $ ab -n 10 -c 5 http://testserver.com/ -n 은 요청수를, -c 는 동시요청수를 나타낸다. 주요 옵션 -n requests 벤치마킹을 위한 요청수.-c cuncurrency..
발생일: 2013.10.11 문제: 서버가 죽으면 해당 로그를 파일로 저장해두려고 한다.파일명에 현재 시간을 포함해두려고 하는데, 쉘에선 날짜를 어떻게 포맷팅하지? 해결책: http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/ `date` 명령의 파라미터로 `+"포맷"`을 전달하면 된다. # 현재 시간을 `년월일-시분`으로 출력한다. 예) 131110-1530$ date +"%y%m%d-%H%M"
발생일: 2013.10.07 문제: 프로젝트에서 클라우드로 할당받은 테스트 서버는 사내망으로만 한정되어 있다.외부 요청은 프록시 서버를 통해서만 나갈 수 있는데,옆자리 D가 이미 `npm`과 `yum`은 프록시 서버를 통해 가져오도록 설정해뒀다 한다. 음... 이건 어떻게 한 거지? 해결책: 물어보니, 보통 패키니 매니저들엔 프록시 설정하는 옵션이 있고,`npm`과 `yum`의 설정에 추가해줬다고 한다. 아항~ 그런거였구나. `npm`이라면 아래처럼 확인할 수 있다. 먼저, 현재 설정되어 있는 설정을 조회해본다. $ npm config ls 프록시가 설정되어 있지 않다면, 기본 항목엔 어떤 게 있는지 조회해본다. $ npm config ls -l 새 설정은 `~/.npmrc`에 저장하면 된다.(https..
발생일: 2013.10.07 문제: 작업하던 중에 API 서버가 제대로 응답하지 않는 것 같아 `ping`을 던져봤다. 가만... 내가 왜 `ping`을 보내고 있지...맞다. 서버 응답이 늦어서, 해당 서버가 죽었는지 확인할 목적이었지. 그러고보니, 습관적으로 `ping`을 날리면서도 자세히 알아본 적이 없었던 것 같다.그저, 도메인이나 서버 IP로 던지고, 로그가 출력되면 "아~ 죽진 않았구만.." 정도로만 생각했다. 이참에 좀 더 자세히 알아보자. 해결책: `ping`은 네트워크 연결이 잘 되어 있는지 확인하는 목적의 명령이다.좀 어려운 말로, IP 수준을 확인하는 용도이다. `ping`을 사용해서 대상 호스트 이름 또는 IP 주소로 요청을 보낼 수 있고,이 때 `ICMP`라는 프로토콜을 이용한다...
발생일: 2013.10.04 문제: 서버 모니터링 용도의 쉘 스크립트(Bash)를 짜고 있다.`monitor.sh`을 실행하면, 서버를 띄우고 이 프로세스를 주기적으로 확인하고,프로세스가 죽은 경우 에러 처리를 하고 다시 띄우도록 할 생각이다. 이 때 자식 프로세스로 실행한 서버의 PID를 파일에 저장해두고 확인하려고 하는데,쉘 스크립트에서 자식 프로세스의 PID를 어떻게 가져올 수 있을까? 해결책: http://serverfault.com/questions/222424/bash-child-proccess-pid-how-do-you-get-it `$$` 변수로 현재 실행중인 프로세스의 아이디를 가져올 수 있고,`$!` 변수로 가장 최근에 실행한 자식 프로세스의 아이디를 가져올 수 있다고 한다. 굿. :)
발생일: 2013.06.28 문제: 라즈베리 파이에 node.js 를 설치하려고, `tar.gz`으로 압축된 바이너리를 다운로드 받았다. 평소였다면 아무 생각 없이 익숙한 듯 `xvzf` 옵션으로 압축 풀어서 사용했겠지만,오늘은 금요일 밤이기도 하고 왠지 느긋한 마음에 `tar.gz`에 눈이 갔다. 그러고보니 `tar`와 `gzip`이 정확히 뭐가 다른지 모르고 있었다. 그 오랜 시간동안, 습관적으로 `tar -xvzf`을 타이핑하면서도,이 기본적인 걸 왜 한 번도 자세히 살펴보지 않았을까... -_- 언젠가 한 번 찾아봤던 기억이 스물스물 나긴하는데, 이미 기억의 저편으로... 여튼, 자세히 살펴보자. 해결책: `tar.gz`은 타르 파일을 `gzip`으로 압축한 것이다. `tar`는 여러 개의 파일이..
발생일: 2013.03.05 문제: 맥으로 넘어와서 가장 많이 사용하는 커맨드 중의 하나가 curl 이다. 커맨드라인에 익숙치 않았던 때엔, '오른쪽 버튼 > 다른 이름으로 저장 > 다운로드 폴더에 가서 복사 > 원하는 폴더에 붙여넣기'가 얼마나 귀찮은 일인지 몰랐더랬다. 얼마 전엔 비슷한 패턴의 주소를 가진 파일들을 한꺼번에 다운로드 받을 일이 있었는데,curl 을 이용해서 노가다 없이 가뿐하게 받을 수 있었다. 그치만 사실,..스크립트를 짜느라 하나 하나 클릭해서 다운로드 받는 것보단 오랜 시간이 걸리긴 했다. -_-a ㅎㅎㅎ 여튼, 이번에 스크립트를 짜보면서 curl 에 좀 더 익숙해졌다.유용한 몇 가지 기능을 메모해둔다. 해결책: 먼저, curl 은 커맨드 라인에서 URL 형태의 리소스를 요청/응..