tools/linux

Peco: 명령어 히스토리를 이용해서 shell에서 검색하기

seul chan 2017. 4. 6. 23:10

Peco: 명령어 히스토리를 이용해서 shell에서 검색하기


점점 더 많은 터미널 명령어를 사용하기 시작하면서 무슨 명령어가 있는지 점점 헷갈리기 시작하였다.


물론 외워서 쓰는것이 가장 큰 공부가 되겠지만... 한계가 있는지라 매번 블로그나 데본씽크를 확인하면서 명령어를 검색하기가 점점 버거워지던 찰나 "증분검색"이 가능한 Peco라는 필터링 도구를 알게 되었다. 페코에 대한 설명은 nacyot님의 블로그를... 참고한다.


"페코(Peco) - CLI 증분검색도구 

페코(Peco) 강력한 데이터 필터링 도구이다. 달리 말해서 텍스트 증분검색을 통한 필터링 도구라고 수도 있다. 원래 같은 목적으로 만들어진 파이썬 기반의 Percol이라는 도구가 있었으나, 성능이나 멀티 플랫폼 지원을 위해 lestrrat 씨에 의해 프로그래밍 언어(Go) 재구현되었다. 이를 통해 파이썬 없이도 바이너리를 통해 윈도우/리눅스/OSX에서 바로 사용할 있다.

이미 익숙할 사람도 있겠지만 있지만 증분검색(Incremental Search)라는 단어가 낯설게 느껴질 수도 있다. 먼저 증분검색이 무엇인지부터 살펴보고 가자. 증분검색도 검색 방법의 하나이다. 구체적인 사례를 들자면 증분검색은 키워드를 통해서 검색 결과를 얻는 것보다는 키워드를 입력하는 과정에서 검색엔진이 입력에 따라 보여주는 자동완성 결과가 있다. , 검색어를 입력하는 과정에서 점진적으로 검색을 수행하는 방법을 이야기한다. 예를 들어 최종적으로 apple라는 검색을 하기 위해서 a 먼저 입력한다. 그러면 a 매칭이 되는 모든 단어가 검색이 된다. 다음으로 ap 입력하면 ap 매칭이 되는 모든 단어가 검색이 된다."-

-출처: http://blog.nacyot.com/articles/2015-12-09-incremental-search-tool-peco/


1. peco 설치하기

- github에서 직접 설치하거나 brew를 통해 설치할 수 있다. 나는 당연히 brew를 통해... (;;)


$brew tap peco/peco

$brew install peco


$peco --version # 설치 되었는지, 버전 등을 확인 가능하다


2. peco 사용하기


$ cat /var/log/system.log | peco

이런 방식으로 peco 화면을 띄워서 검색이 가능하다.

ctrl + r로 검색 모드를 바꿀 수 있고, 정규표현식 등을 사용 가능하다. 쉘을 자유자제로 사용한다면 이렇게 | peco 명령어를 사용해서 프로세스를 찾아 종료하는 등의.. 기능을 사용할 수 있겠지만 나는 내가 쓴 코멘드 히스토리를 검색하는 용도 위주로 사용할 것이기 때문에 zshrc에 추가하여 ctrl + r 검색 기능으로 사용하려고 한다.


3. 명령어 히스토리 검색


기존에 알고 있을수도 있지만 (나는 몰랐다) 쉘에서는 ctrl + r로 prefix 검색이 가능하다. 이 기능만으로도 충분히 강력하지만 peco를 prefix 검색 대신에 사용 가능하게 zshrc에 추가해준다.


# from http://qiita.com/uchiko/items/f6b1528d7362c9310da0 by uchiko


function peco-select-history() {

    local tac

    if which tac > /dev/null; then

        tac="tac"

    else

        tac="tail -r"

    fi

    BUFFER=$(\history -n 1 | \

        eval $tac | \

        peco --query "$LBUFFER")

    CURSOR=$#BUFFER

    zle clear-screen

}

zle -N peco-select-history

bindkey '^r' peco-select-history


다음 스크립트를 ~/.zsh/peco-history.zsh 로 저장한 다음,

~/.zshrc 파일 마지막에 

source ~/.zsh/peco-history.zsh 를 추가하고 셸을 재실행한다. (그냥 추가해도 상관 없겠지?)




+ 추가적으로 셀 히스토리의 설정 범위를 늘려서 히스토리를 많이 검색 가능하게 바꿔주면 좋다


~/.zshrc에다가 다음을 추가한다.


HISTSIZE=100000

SASVEHIST=100000 # 더 큰 숫자를 적어도 물론 상관없겠다.