crawling.[컴퓨터] 크롤링; (검색 엔진에서) 분산 저장되어 있는 정보를 수집하여 검색 대상으로 복제·보존하는 기술. 크롤링은 여러 방면에서 사용되는데 일반적인 소프트 유저라면..- 기상청 날씨를 긁어온다- 식단 표를 긁어온다 등으로 사용할 수 있겠습니다.이야기는 많이 들었었는데 이번에 필요하게 되어 직접 크롤링을 해봤습니다. 발단은 이러합니다.이번 회사에서 인터뷰어 활동을 하게 되면서 이력서 검토도 하기 되었는데문제는 작은 중소기업이다 보니 구직 사이트에 이력서가 새로 들어왔는지 종종 접속해서 확인하는 시간이 아까웠습니다. (많은 이력서가 쏟아 지는게 아니다 보니까..) 그래서 아래와 같은 요구 조건으로 개발을 시작했습니다.- 주기적으로 구직 사이트(기업 계정)를 크롤링- 새로운 이력서가 있으면..
Linux는 bash 터미널에서 실행한 명령어를 기록하는 history라는 built-in 명령어가 있습니다.history 결과를 실시간으로 파싱 하고자 하는데, 기왕이면 message파일 처럼 tail 로 붙잡고 있기를 바랬습니다.하지만, history라는 명령어 자체가 실행 결과가 떨어지는 명령어라 녹록하지 않죠.하지만. 걱정하지 마세요. history도 결국은 파일로 관리 됩니다. .bash_history 자신의 home 폴더 밑에 보면 해당 파일을 찾을 수 있습니다.하지만. 정작 방금 실행 시킨 명령어는 .bash_history에 안보입니다. 이것은 현재 bash 터미널이 종료 되기 전까지 일정 버퍼를 메모리에 들고 있기 때문인데,이것(history결과)을 파일(.bash_history)로 동기화..
일단 터미널에 접속했을 때 출력 되는 문구(보통은 환영 문구?)는 기본적으로 /etc/motd 라는 파일로 제공됩니다.이번에는 어디 한번 이 문구를 잉여롭게 변경해보고자 합니다.어떤 것이 잉여로운건가요? 바로 색상을 넣는 겁니다.바로 결과부터 살펴봅니다. 이런 느낌입니다. 일반적인 텍스트 파일에 색상 넣는 방법만 알면 간단한데요.색상은 아래와 같은 방법으로 넣습니다. ^[[1;31m앞에 ^[ 기호는 여기를 참고해서 넣도록 합니다. (일반 특수문자가 아님) 색상 표는 아래와 같습니다. Black 0;30 Dark Gray 1;30 Blue 0;34 Light Blue 1;34 Green 0;32 Light Green 1;32 Cyan 0;36 Light Cyan 1;36 Red 0;31 Light Red ..
일산 킨텍스에서 개최된 전자정부 솔류션 페어 2016에 다녀왔습니다. 이번에도 세계 보안 엑스포와 함께 개최가 되었는데, 물리적 보안을 담당하고 있는 CCTV도 흥미롭게 봤습니다. 진작에 사전 등록신청을 해놔서 방문증 명찰을 바로 받을 수 있었습니다. 실내에 보안과 관련된 다양한 기업들의 부스를 관람할 수 있었습니다. 각 부스에 들려 질문을 하면 무척 상세히 답을 주기 때문에 보안에 흥미가 있는 사람들에게는 무척 유익한 컨퍼런스라고 생각되네요. 물론.. 경쟁사로 의심을 사는 일도 있지만.. 다들 축제쯤으로 즐기는듯..^^; 3일 동안 진행된 이번 행사는 보안과 관련된 트랙 발표가 매일 있었습니다. 방문한 날에는 AhnLab에서 발표가 있었습니다. 랜섬웨어에 대한 설명과 AhnLab 제품에 대한 소개가 이..
subversion에 최초 파일 등록 이후 파일 권한을 변경하고자 하면그 방법이 모호해서 파일을 삭제 한 이후 commit하고, 다시 재 등록하는 방법을 사용해왔습니다. 여간 불편한 방법이 아닐 수 없었는데요,당연히 권한을 변경하는 방법이 존재합니다. 일단 권한을 보는 명령어는 아래와 같습니다.svn proplist 파일이름 이때 실행 권한이 없는 경우에는 터미널에 별다른 메시지가 출력 되지 않습니다.실행 권한이 있는 경우에는 아래와 같은 출력을 나타냅니다.Properties on '파일이름': svn:excutable 실행 권한을 추가하는 명령어는 아래와 같습니다.svn propset svn:excutable ON 파일이름 반대로 실행 권한을 삭제하는 명령어는 아래와 같습니다.svn propdel sv..
리눅스에서 디렉토리의 사이즈를 검사할 때 주로 사용되는 명령어는 du 입니다. 명령어를 활용하면 되지만 어느 디렉토리가 용량을 많이 차지하는지 찾기 위해서는 각 폴더 별로 아래와 같은 형태의 명령어를 실행해봐야 합니다. $ du -sh /bin 디렉토리가 많은 경우 이것 또한 노가다(?)가 될 수 있기 때문에 간단하지만 유용한 스크립트를 작성했네요. 현재 디렉토리 하위에 있는 디렉토리를 기본 depth 1부터 인자로 입력 받는 maxdepth까지 du -sh 를 자동으로 해줍니다. #!/bin/sh DEPTH=1 if [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "help" ] || [ "$1" = "h" ] ;then cat
앞서 git과 slack을 연동하는 부분은 살펴봤습니다. 이번에는 여기에 instaweb까지 연동해서 push되는 링크를 바로 확인 할 수 있도록 합니다. 이를 위해서는 git이 설치된 곳의 config를 수정해야 합니다. [hooks "slack"] 쪽에 아래 내용을 추가하도록 합니다. changeset-url-pattern = "http://아이피주소:1234/?p=경로;a=commitdiff;h=%rev_hash%" 일단 기본적으로 instaweb이 운영되고 있어야 하며 해당 서버의 아이피 주소와 포트를 입력합니다. instaweb의 기본포트는 1234이므로 변경 없이 사용했습니다. 경로는 http://아이피주소:1234 로 접속해서 summary에 진입했을 때 노출되는 주소를 적어주시면 됩니다. ..
git은 commit 로그를 web에서 확인 하려면 Redmine이나 기타 툴과 연동을 해야 합니다. 여간 귀찮은 일이 아닐 수가 없겠죠? git에서는 이런 고충을 덜어주고자 instaweb을 제공합니다. 관련 사용법은 아래와 같습니다. 1. 명령어 실행을 위해서는 ruby가 필요하므로 서버에 적절히 설치 2. git instaweb -d webrick (git 소스 위치에서 명령어 입력) 3. http://xxx.xxx.xxx.xxx:1234 (web으로 접속, 기본 접속 포트는 1234로 설정되어 있다) 로그를 확인 할 수 있는 페이지 캡쳐는 생략합니다. * 정상적으로 수행되지 않는 경우 perl-CGI가 설치되어 있는지 확인
vim을 더욱 강력하게 사용할 수 있도록 도와주는 plugin 중에 BufExplorer를 소개합니다. 일단 plugin을 다운로드 받도록 합니다. 다운로드 받은 plugin의 압축을 풀고 로컬의 plugin이 설치되어 있는 경로(e.g. /usr/share/vim/vimXX/plugin)에 복사 합니다. 그러면 새로운 vim session에서 바로 사용이 가능합니다. 명령어 실행모드( : ) 에서 BufExplorer를 입력하면 아래와 같이 바로 사용이 가능합니다. 열려있는 세션에 대해 방향키나 vim에서의 이동키로 조작이 가능합니다. 을 눌러서 도움말을 살펴봅니다." Buffer Explorer (7.4.6)" --------------------------" : toggle this help" or..
통상 1,024 미만의 포트는 well-known으로 사용자(혹은 개발자)가 사용하지 않는 포트로 알고 있습니다. 웬만해서는 다른 포트를 사용한다는 의미인데, 그 정의가 뒤쪽에도 있었네요? Registered port 는 아래와 같이 정의하고 있습니다.Ports 0-1023 - well-known portsPorts 1024-49151 - registered ports: vendors use for applicationsPorts >49151 - dynamic / private ports 개발에 참고하면 유용하겠군요 :)
ls나 cat 등 터미널 명령어의 결과를 배열에 저장하고 사용해야 하는 경우가 종종 있습니다. shell script에서 일반적인 배열은 아래와 같이 사용합니다. AAA=("aa" "bb" "cc") 그리고 읽을 때는 아래처럼 읽겠죠? echo ${AAA[0]}, ${AAA[1]} 그럼 이제 터미널 명령어의 경우를 살펴봅시다. 터미널 명령어의 결과를 변수로 받는 일반적인 방법인 BBB=$(echo "aa bb cc") 처럼 사용할 경우 결과는 엉뚱합니다. echo ${BBB[0]}로 출력해 봤을때 결과로 aa를 기대하지만, 실제로는 aa bb cc가 출력 됩니다. 결과를 일반적인 배열로 받기 위해서는 아래처럼 한번 더 괄호로 감싸줘야 합니다. BBB=($(echo "aa bb cc")) 앞으로는 여기에 ..
팀에서 gitlab을 운영해보자는 의견이 있어서 설치를 하게 되었습니다. 그런데 보유하고 있는 서버가 워낙 오래된 모델이라.. root filesystem의 용량이 꼴랑 4G.. OS 등 사용 중인 부분을 제하면 남은 용량은 1.1G. 뭐 이 정도면 무슨 문제 있겠냐 싶어 설치를 시작했지만, yum으로 인스톨 조차 안됐습니다. 패키지 사이즈만 약 200MB에 압축 풀 때 사용하는 공간이 약 700MB .. 여기에 gitlab-ctl reconfigure 명령으로 인해 추가되는 용량 1G정도. 결국은 배운게 도둑질이라고.. 임베디드 쪽만 개발하다 보니 용량을 돌려 쓰는 법을 사용하게 됐네요, 일단 yum으로 install 될 때 사용하는 cache영역(/var/cache/yum)을 다른 HDD 파티션으로 ..
vi(혹은 vim)에서 ASCII Control Codes를 입력하는 방법에 대해 알아봅니다. 일단 ASCII Control Codes는 통상 키보드의 컨트롤키를 누른 상태에서 입력되는 문자를 나타냅니다. 일단 하고자 하는 건 vi에 아래와 같은 예시의 문자를 입력하는 것입니다. ^@^[ ^] shift+6 + * 로 입력되는 문자와는 다릅니다. 실제 vi 에서 확인하면 색상부터 다릅니다. 위는 shift + 6 의 조합으로 표기한 것이고, 아래는 다른 방법입니다. 위는 일반 변수로 선언하거나 macro로 등록할 때 문자열로 입력되지만 아래는 한 개의 단일 문자로 입력 됩니다. 그럼 입력 방법이 어떻게 될까요? 아래와 같은 순서로 입력하면 됩니다. 1. Ctrl + v2. Ctrl + 입력하고자 하는 코..
회사에서 계속 무료 툴인 virtualbox를 이용하고 있었는데, VMware를 사용할 일이 있어서 관련 라이선스를 찾아봤습니다. 일단 VMware에는 두 가지 종류가 있는데 그 첫 번째가 VMware Workstation Player, 두 번째가 VMware Workstation Pro 되시겠습니다. VMware Workstation Pro 는 뭔가 이름부터 유료 느낌이 나고.. VMware Workstation Player쪽을 찾아보니 "개인용으로 사용하는 경우 무료" 라는 문구가 눈에 들어오네요. 하지만 일단 회사(기업) 내부에서 사용해야 하는 것이니 (회사 내부에서 혼자 조용히 학습 용) 이러한 경우의 라이선스 정책은 어떠한지 찾아봐야 했습니다. 관련된 정확한 정보는 아래와 같습니다. VMware..
shell script 에서 때로는 문자열 패턴의 일치 여부를 확인하는 것이 아니라 포함되는지 확인해야 하는 경우가 있습니다. 아래 예시를 살펴보겠습니다. AA="My name is oops" BB="oops" 변수 $BB가 $AA에 포함되는지 확인하는 방법에는 여러가지가 있겠지만 아래 두 가지 방법을 소개합니다. ( Node.js 로 비유하자면 str.includes(word) 같은 역할이겠죠 ) #!/bin/sh AA="My name is oops" BB="name" if [[ "$AA" == *"name"* ]];then echo "1st find it" fi if [[ "$AA" =~ "name" ]];then echo "2nd find it" fi 문자열 패턴을 이용한 * 방법이 있고, =~ 를..
명령어 옵션에 낚여서 누군가의 삽질 방지 차원으로 기록해둡니다. 정확히 말하면 CentOS man 페이지에 낚였습니다. CentOS 프롬프트에서 man logger를 입력했을때 -f 옵션에 대한 설명은 아래와 같습니다. -f file Log the specified file. 이건.. 누가 봐도 특정 파일에 로그를 기록하는 것처럼 보이는데요. logger의 man페이지를 website에서 찾아보면 상이한 설명이 나옵니다. -f, --file file Log the contents of the specified file. This option cannot be combined with a command-line message. 이 옵션은 특정 파일에 로그를 기록하는 것이 아니라 특정 파일의 내용을 시스템 ..
소스관리를 git으로 할때 요즘 실리콘밸리의 핫한 프로젝트인 slack으로 push 메시지를 전달할 수 있습니다. 관련된 API의 사용법을 정리합니다. 우선 사용할수 있는 API를 다운로드를 위해 아래 링크로 이동합니다. https://api.slack.com/community 링크의 하단에 git-slack-hook 을 찾습니다. 관련된 소스를 다운도록 합니다. 다운 받은 소스를 아래 방법으로 git repository에 적용을 시킵니다. For bare repos, copy/rename it as /path/to/your/repo/hooks/post-receive. For normal/non-bare repos, copy/rename it as /path/to/your/repo/.git/hooks/p..
테이블의 컬럼 값을 변경할때 update문을 사용합니다. 일단 친절한 help를 살펴보면 아래와 같습니다. MariaDB [oops]> help update; Name: 'UPDATE' Description: Syntax: Single-table syntax: UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] Multiple-table syntax: UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1..
- Total
- Today
- Yesterday