간혹 shell에서 어떠한 값을 변수로 사용해야 하는 경우가 생깁니다.이를테면 특정 프로세스에서 사용중인 file descriptor를 확인하기 위해서는 아래와 같겠습니다. 우선 cron으로 테스트 해보면 아래와 같이 cron의 pid(644)를 구할 수 있습니다. 얻은 pid(644)를 이용해서 사용중인 file descriptor를 아래와 같이 확인 할 수 있습니다. 하지만 두번에 걸쳐 실행되어야 하는 명령어는 불편할때가 있습니다. 위 내용은 아래와 같이 한번에 수행할 수 있습니다. 이 예제는 $()의 활용에 대한 부분입니다.$()가 아니더라도 |(pipe)나 환경변수 등을 이용해서 한번에 수행할 수 있는 방법은 많이 존재합니다.
여객선 세월호가 침몰해서 온나라가 떠들썩 하다..수학여행을 가는 고3 학생들을 포함해서 약 470여명이 타고 있었고, 6,800톤 급?으로 우리나라에서 가장 큰 여객선이라는데.. 현재 대부분이 실종자.. .... 문득 그런 생각이 든다. 전쟁이 나면..정말 모든 지역에 난리가 날텐데.. 그땐.. 누가 누구를 구하지..?요즘도 가끔 "북한이랑 전쟁하면 우리가 이김! 그냥 확 전쟁해서 없애버리지! 헤드샷!!" 하는 중2병 사람들 많은데..얼마나 끔찍한 생각인지 알고 있을까.. 전쟁이라는 것은..얼마나 끔찍한 것인가.. 모르긴 몰라도. 아마 엄청난 재앙이 될거다.휴전국가에서 이렇게 아둥바둥 살아갈 수 있다는게 얼마나 큰 행복인가..열심히 살아야겠다. 모든 실종자가 무사히 구조되길 기원합니다...
shell script에서 함수 구현은 아래와 같습니다.#!/bin/sh add() { echo "test" } add 결과 : test 네. 무척 간단하죠? 그럼 이번에는 위 함수에 인자를 전달해보겠습니다. #!/bin/sh add() { echo $@ } add 1 3 결과 : 1 3$@는 배열 전부를 출력하는 문장입니다. 이번에는 결과를 return 받아보도록 합니다.add() { return $(($1+$2)) } add 1 3 echo $? 결과 : 4 ( "$((" 와 "))" 는 수학 계산으로 인식 됩니다 ) 굉장히 간한한 코드겠지만, shell script에서 함수 사용법을 엿볼수 있는 예제입니다.함수의 return과 인자 전달도 말입니다.
쉘스크립트의 종류는 다양한데 그중 bash와 ash를 뽑아봅니다. 이야기 하고자하는 내용은 두 스크립트의 차이입니다. 보통 ash는 busybox를 통해 사용가능한데요, 지금 본인이 개발하고 있는 스크립트가 어떤 쉘로 실행되는지 (필히)확인이 필요합니다. 이유는 동일해보이는 스크립트지만 지원가능한 문법이 다르기 때문입니다. 예를들면 아래와 같은 배열 (우리에게 친숙한) 을 bash에서 사용합니다. daemon_list=("oops" "test") 참조는 아래처럼 하겠지요. echo ${daemon_list[@]} 하지만 이 내용이 ash로 실행되면 바로 아래와 같은 syntax error를 출력하고 실행되지 않습니다. (ash는 bash스타일의 배열을 지원하지 않습니다.) ./oops: line 3: s..
KISA에서 OpenSSL 취약점을 악용한 공격 주의를 당부했습니다. (관련기사) 취약점이 발견된 버전은 OpenSSL 1.0.1부터 1.0.1f 및 OpenSSL 1.0.2-beta와 1.0.2-beta1 등이라고 하는데요, 패치버전은 나와있지만 당장 패치가 어려운 경우 '-DOPENSSL_NO_HEARTBEATS' 옵션을 설정하고 재컴파일 하라고 권고하고 있습니다. 그래서 한번 컴파일해봤습니다. 우선 '-DOPENSSL_NO_HEARTBEATS'는 Configure에서 활성화 시킵니다. Configure의 도움말을 보면 아래처럼 사용할 수 있습니다. 그럼 아래와 같이 사용하면 되겠네요. 하지만 정상적으로 실행되지 않았네요? unix-ish systems라면 ./config를 사용하랍니다. 그럼 아래처..
봄을 맞이해서 수목원을 방문했습니다. 집에서 도보로 10분정도 거리에 위치한 "푸른수목원"인데요. 항상 지나면서 한번 방문해보고 싶었는데 이제야 와봅니다. 수목원 정문 모습입니다. 2013년 3월부터 주차요금이 생겼습니다. 승용차는 5분에 150원이네요. 이곳은 수목원 뒷문입니다. 수목원의 안내도입니다. 생각보다 무척 넓어서 놀랐습니다. 취식은 수목원 정문에 위치한 지정된 장소에서만 가능합니다. 수목원 내부에서는 돗자리도 안됩니다~ 이곳에도 봄이 와있습니다. 활짝 폈네요~ 잔디도 가꾸어지고 있습니다. 아직은 들어가면 안되는군요~ 수양버드나무 같습니다. 바람이 많이 불어서 이리저리 흩날리고 있습니다ㅎㅎ 아직은 가지가 많이 없네요~ 더 많이 자라겠지요? 수목원 내부 전경입니다. 산책로가 무척 잘되어있습니다...
강릉에서 결혼식이 있었습니다. 집에서 약 250km 정도 떨어진곳인데요.. 결혼식만 보고 오기에는 거리가 있기 때문에 1박을 하기로 결정을 했습니다. 마침 회사를 통해 한화콘도를 회원가로 이용할 수 있었습니다. 설악에 있는 한화콘도 SORANO는 유럽풍으로 꾸며져서 매우 보기 좋았습니다. 사진을 찍기도 참 좋았고, 직원분들도 친절하고 단정해서 대접받는 기분이 물씬 나더군요~ 입구에는 분수대가 손님을 맞이합니다. 고급스러운 분위기가 연출됩니다. 건물 앞쪽으로는 정원과 주차장이 있습니다. (주차장은 건물 뒷편에도 있기 때문에 넉넉한 편입니다.) 건물 색이 우아합니다. 방을 잡은 건물입니다~ 한화콘도에 있는 워터피아 셔틀버스 입니다. 아마 무료겠지요? 실내는 여느 호텔과 다르지 않습니다. (세면대 물이 내려가..
인터넷이 보급되고 사용량이 왕성해지니 다들 블로그 하나쯤은 갖고 있습니다.또한 카페나 웹사이트를 통해 정보를 공유하고 소통하기도 하고요. 어쩌면 인사담당자에게 이러한 것들은 구직자의 인성을 파악하는데 수월한 정보가 될지도 모르겠습니다.문득 모회사의 채용공고에는 블로그 주소나 stack overflow(등) 사이트의 ID를 입력할 수 있는 필드가 있는 곳도 있더군요. 그것들을 바탕으로 history를 확인하면 그 사람의 인성과 품성을 쉽게 확인 할 수 있을테니까요.(심지어 facebook이나 twiter를 입력하라는 곳도 있습니다.. 소름이..) 신문기사에서 블로그 매매가 극성이라는데, 이것들을 스펙으로 만든건 과연 누굴까요..사실 결과적으로 보면 구직자, 기업 모두라고 생각합니다. 이럴때가 아니라.. 저..
주말에 몸보신 차원에서 삼계탕을 찾았습니다. 찾아간 삼계탕 집은 온수역8번 출구 앞에 위치한 "약초마을"입니다. 온수역8번 출구로 나오면 바로 보입니다. 음식점 안에는 좋은 글귀와 약초의 효능이 적혀있네요. 가격은 아래와 같습니다.이번에 선택한 음식은 죽염삼계탕(12,000원)이네요. 기본 반찬이 깔끔하게 나옵니다.이른 시간에 가서 그런지 손님이 없었습니다.(식사를 마칠때쯤에는 많은 분들이 찾아주셨고요~) 덕분에 따로 말하지 않아도 이모님이 빠른 반찬 리필을 해주셨네요ㅎㅎ물에서는 약간 계피향이 나는데 향을 싫어하시는 분들은 참고하세요. 테이블 옆에 화분입니다. 하이라이트인 삼계탕입니다.포스팅하면서 다시 생각나네요~ (꿀꺽) 온수역에 산다면 아깝지 않은 가격에 삼계탕을 먹을 수 있겠습니다^^
종종 db에 저장되어 있는 unixtime을 풀어서 봐야 하는 경우가 있습니다.이럴때 사용하는 mysql 명령어를 살펴봅니다. 우선 현재 시간을 알아볼까요? mysql> select now(); +---------------------+ | now() | +---------------------+ | 2014-03-20 16:08:04 | +---------------------+ 1 row in set (0.00 sec) mysql> 이번에는 1395299569 와 같은 형태의 UTC 시간을 변경해서 봅니다. mysql> select from_unixtime(1395299569); +---------------------------+ | from_unixtime(1395299569) | +-------..
산수유가 올라오는걸 보니 봄이 왔나봅니다. 봄이 와서 마음이 싱숭생숭하지만! 가다듬고 화이팅합니다 ^^
git pull 했을때 아래와 같이 다른 사람의 commit과 충돌이 나는 경우가 발생합니다.[oops]$ git pullremote: Counting objects: 99, done.remote: Compressing objects: 100% (68/68), done.remote: Total 69 (delta 51), reused 0 (delta 0)Unpacking objects: 100% (69/69), done.From 10.25.1.20:/work/git/oops dab9a8b..b49cd63 master -> origin/masterUpdating dab9a8b..b49cd63error: Your local changes to the following files would be overwrit..
메모의 기술저자사카토 켄지 지음출판사해바라기 | 2005-03-17 출간카테고리자기계발책소개새로운 주제, '메모' 비즈니스계에서 가장 중요한 것은 '아이디... 평소 메모하는 것을 좋아하지만, 스스로 뭔가 정리가 안되는 부분이 많았는데"메모의 기술"이라는 책을 접한 후로 많은 부분이 개선되었습니다. 책에는 메모의 정의나 방법에 대해서 기술되어 있을뿐 아니라 우리가 메모에 대해 오해하고 있는 부분도 지적합니다. 가장 기억에 남는 문구는"메모는 기억하기 위함이 아니라, 잊어버리기 위한 것이다" 읽는 순간, 아차 싶었지요.굳이 기억할 필요가 없는 것을 메모하지 않으면 항상 기억해야 한다는당연한 논리를 깨우쳐줍니다. 이래저래 개인적으로나 회사에서 메모해야 하는 경우가 많았는데많은 도움이 되었습니다 ^^
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 혹은, 아래..
- Total
- Today
- Yesterday