Glide Note

glidenote's blog

peco/percolでCUIなスニペットツールを作ってみる

以前にSheetというスニペットツールを利用すると大変便利と書いた。

で、障害対応で使うコマンドとかよく忘れるコマンドを大量に登録してて、毎日使ってて重宝してるんですが、スニペットが 増えると管理が破綻する問題があって、pecopercolを使えば解決出来そうと思ってやってみた。

仕組み

  • snippets用のファイル or sheetのスニペットファイルをpeco/percolで絞りこんで、クリップボードに送ったりして簡単に利用できるようにする

よく使うコマンドのスニペットファイルを用意

sheetの資産をそのまま利用も出来るんですが、今回は下記のような感じでファイルを~/.snippetsで用意。私が使ってるやつから一部抜粋。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# apache
tail -n 5000 /usr/local/apache2/logs/access_log | awk '{print $1}'  | sort | uniq -c | sort -gr | head -n 4
tail -n 5000 /usr/local/apache2/logs/access_log | awk '{print $2}'  | sort | uniq -c | sort -gr | head -n 4
tail -n 5000 /usr/local/apache2/logs/access_log | awk '{print $12}' | sort | uniq -c | sort -gr | head -n 4
tail -n 5000 /usr/local/apache2/logs/access_log | awk '{print $13}' | sort | uniq -c | sort -gr | head -n 4

# search
netstat -ltapn | grep ESTABLISHED | more
netstat -ltan | grep ":80 " | awk '{print $5}' | awk -F : '{print $4}' | sort | uniq -c | sort -nr | head
lsof -i:80

# dstat
dstat -Tclmdrn
dstat -Tclm
dstat -Tclr
dstat -Tclnd
dstat -Tcldr
dstat --top-cpu --top-cputime
dstat --top-io --top-bio
dstat --top-io-adv --top-bio-adv

# openssl
openssl x509 -noout -modulus -in *.crt | openssl md5
openssl rsa  -noout -modulus -in *.key | openssl md5
openssl req  -noout -modulus -in *.csr | openssl md5

# find
find ./ -daystart -ctime +2
find ./ -daystart -ctime -2

# date
date +%Y%m%d

peco/percol経由で利用出来るようにする

下記のようなのを、.zshrcに記載するか、peco-snippets.zshとかでファイルを作成してsourceして読み込む

1
2
3
4
5
6
7
8
function peco-snippets() {

    local SNIPPETS=$(grep -v "^#" ~/.snippets | peco --query "$LBUFFER" | pbcopy)
    zle clear-screen
}

zle -N peco-snippets
bindkey '^x^s' peco-snippets

snippetsファイルを用意せずに、sheetの資産を生かすなら、下記みたいな感じ。

1
2
3
4
5
6
7
8
function peco-snippets() {

    local SNIPPETS=$(cat ~/.sheets/* | peco --query "$LBUFFER" | pbcopy)
    zle clear-screen
}

zle -N peco-snippets
bindkey '^x^s' peco-snippets

で上の例だとCtrl+x, Ctrl+sでスニペットの一覧が出てくるのでpecoやpercolで絞ると pbcopyに渡されて、クリップボードに格納される。

Linux上とかでクリップボード使わずに、そのまま利用したい場合は下記みたいな感じ

1
2
3
4
5
6
7
8
function peco-snippets() {

    BUFFER=$(grep -v "^#" ~/.snippets | peco --query "$LBUFFER")
    zle clear-screen
}

zle -N peco-snippets
bindkey '^x^s' peco-snippets

実際に動かして見るとこんな感じ

便利になった!

私がUNIXという考え方にどっぶり浸かっているので、pecoやpercolのパイプで渡して処理させるってのは感覚的に分かりやすくて大変扱いやすい。

Comments