コマンドラインのチートシート管理ツール「Cheat」
先日、Twitterを眺めていて、tldrというコマンドを知りました。
これは便利、とさっそく導入したのですが、どうせなら自分で使うパターンを登録できるものがないものかと思って探してみたところ、Cheatというツールを発見しました。というか、 tldrのGitHubリポジトリのREADME で紹介されていました。
基本的にはtldrと同様、指定したコマンドのよくある使い方のようなものを表示してくれるものですが、それ以外にも表示内容を編集したり、新しいコマンドの使い方を追加することができる、というものです。
インストール
Homebrewで入れることができます。
$ brew install cheat
コマンド自体はPythonで作られているようなので、 pip
でもインストールできるようです。
使い方
チートシートの表示 cheat <command>
引数として、使い方を知りたいコマンドを渡すことで、その主だった使い方を表示します。
例えば curl
の使い方例を観たい場合は、以下のように実行します。
$ cheat curl # Download a single file curl http://path.to.the/file # Download a file and specify a new filename curl http://example.com/file.zip -o new_file.zip ...
チートシートの編集 cheat -e <command>
エディタが起動して、表示内容を編集することができるようになります。
環境変数 EDITOR
を参照しているようです。
自分はよく curl
でリダイレクトも辿ってダウンロードをするオプションを忘れるので、 curl
のチートシートを編集して、以下の例を追記しておきました。
# Follow the redirect curl -L http://example.com/file
パーミッションに注意
私の環境では cheat -e
したときに、読み取り専用状態で開かれました。
Homebrewで導入すると、オリジナルのチートシートファイルは /usr/local/Cellar/cheat/2.1.18/lib/python2.7/site-packages/cheat/cheatsheets/
といったパスにコマンド単位で格納されているようなのですが、そのオリジナルを保護するためか、各ファイルは読み取り専用になっていましたので、そのためかと思います。
この場合は、編集後に別名保存して、必要なら chmod
で書き込み権限を付与すればOKです。
なお、編集した個人用のチートシートは、デフォルトでは ~/.cheat
というパスに保存されるようです。これを変更したい場合は、 DEFAULT_CHEAT_DIR
という環境変数を設定すれば良いようです。
チートシートの検索 cheat -s <keyword>
指定したキーワードを含むチートシート内を検索することができます。
例えば キーワードとして awk
を検索すると、以下のように出力されます。
$ cheat -s awk awk: printf '1\n2\n3\n' | awk '{ sum += $1} END {print sum}' printf '1:2:3' | awk -F ":" '{print $1+$2+$3}' seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}' printf '1 2 3' | awk 'BEGIN {OFS=":"}; {print $1,$2,$3}' find: find . -type f -size +20000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }' history: history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10 netstat: netstat -pln | grep <port> | awk '{print $NF}' openssl: awk '/-----BEGIN/,/END CERTIFICATE-----/' | \
awk
の使用例のほか、内部的に awk
を使っているケースもヒットするので、コマンドの勉強にもなるかもしれません。
チートシートの一覧 cheet -l
こんな感じで、ズラズラっと表示されます。
7z /usr/local/Cellar/cheat/2.1.18/lib/python2.7/site-packages/cheat/cheatsheets/7z ab /usr/local/Cellar/cheat/2.1.18/lib/python2.7/site-packages/cheat/cheatsheets/ab apk /usr/local/Cellar/cheat/2.1.18/lib/python2.7/site-packages/cheat/cheatsheets/apk apparmor /usr/local/Cellar/cheat/2.1.18/lib/python2.7/site-packages/cheat/cheatsheets/apparmor apt-cache /usr/local/Cellar/cheat/2.1.18/lib/python2.7/site-packages/cheat/cheatsheets/apt-cache apt-get /usr/local/Cellar/cheat/2.1.18/lib/python2.7/site-packages/cheat/cheatsheets/apt-get aptitude /usr/local/Cellar/cheat/2.1.18/lib/python2.7/site-packages/cheat/cheatsheets/aptitude asciiart /usr/local/Cellar/cheat/2.1.18/lib/python2.7/site-packages/cheat/cheatsheets/asciiart asterisk /usr/local/Cellar/cheat/2.1.18/lib/python2.7/site-packages/cheat/cheatsheets/asterisk ...
上記だとチートシート自体のパスも出力されていて少し見にくいので、コマンドだけ抽出すると、2/9時点(Cheat 2.1.18)で、以下のとおりでした。
7z, ab, apk, apparmor, apt-cache, apt-get, aptitude, asciiart, asterisk, at, awk, bash, bower, chmod, chown, convert, crontab, csplit, cups, curl, cut, date, dd, df, dhclient, diff, distcc, dnf, docker, dpkg, du, emacs, ffmpeg, find, gcc, gdb, git, gpg, grep, gs, gzip, hardware-info, head, history, hub, ifconfig, indent, ip, iptables, irssi, iwconfig, journalctl, jq, jrnl, less, lib, ln, ls, lsof, lvm, man, markdown, mkdir, more, mount, mysql, mysqldump, nc, ncat, netstat, nmap, notify-send, nova, ntp, numfmt, od, openssl, p4, pacman, paste, pdftk, php, ping, ping6, pip, ps, python, readline, rm, route, rpm, rss2email, rsync, sam2p, scp, screen, sed, shred, smbclient, snmpwalk, sockstat, sort, split, sqlmap, ss, ssh, ssh-copy-id, ssh-keygen, stdout, strace, systemctl, systemd, tail, tar, tcpdump, tee, tmux, top, tr, truncate, udisksctl, uname, uniq, unzip, vagrant, vim, weechat, wget, xargs, yaourt, youtube-dl, yum, zip, zoneadm
面倒くさいので両方使いたい
ところで、同じタイミングのtldrの対応コマンドは以下のとおり。
※tldrは様々な言語・プラットフォームのものが用意されていますが、自分的に導入しやすいNode.js版を使っています。
7za, ab, ack, adb, ag, alias, apropos, ar, aria2c, arp, atom, autojump, autossh, awk, axel, bash, bashmarks, bc, bmaptool, bundle, cal, calibre-server, calibredb, cat, cd, chmod, chown, chsh, cksum, clang, comm, convert, convmv, cordova, cowsay, cp, csvclean, csvcut, csvformat, csvgrep, csvlook, csvpy, csvsort, csvstat, curl, cut, date, deluser, df, dhcpwn, diff, dig, docker, dokku, drush, ebook-convert, echo, electrum, emacs, enca, env, espeak, exiftool, fdupes, ffmpeg, file, find, for, fortune, fswebcam, fzf, gcc, gem, gifsicle, git-add, git-blame, git-branch, git-checkout, git-clone, git-commit, git-config, git-diff, git-fetch, git-init, git-log, git-merge, git-mv, git-pull, git-push, git-rebase, git-remote, git-rm, git-stash, git-status, git-svn, git-tag, git, glances, gpg, gradle, grep, gzip, handbrakecli, haxelib, history, host, iconv, if, ifconfig, in2csv, ionice, ioping, ipcs, jar, java, javac, kill, last, latexmk, less, license, ln, lp, lpstat, ls, lsof, lwp-request, mailx, make, man, mitmproxy, mkdir, mocha, montage, more, mount, mp4box, mtr, mv, mysql, mysqldump, nano, nc, nginx, nice, nix-env, nmap, node, nohup, npm, nvm, openssl, optipng, pandoc, parallel, pass, passwd, paste, patch, pdflatex, pg_dump, pg_restore, pgrep, php, phpize, phpunit, pigz, ping, pip, pkill, play, pngcrush, printf, ps, psql, pushd, pv, pwd, python, read, redis-cli, redshift, rename, renice, rm, rmdir, route, rsync, sails, salt-call, salt-key, salt-run, salt, sass, scp, screen, sed, seq, sftp, shred, skicka, sl, socat, sort, sox, split, srm, ssh-keygen, ssh, sshfs, strings, su, sudo, sum, svn, tabula, tac, tail, tar, tcpdump, tee, telnet, test, time, tldr, tldrl, tmux, touch, tr, traceroute, transcode, tree, ufraw-batch, umount, uname, uniq, unrar, unzip, uptime, vagrant, vim, vimtutor, virtualenv, w, watch, wc, wget, which, while, who, whoami, x_x, xargs, xz, yes, youtube-dl, zbarimg, zcat, zdb, zfs, zip, zless, zpool, airport, archey, base64, brew, caffeinate, dd, diskutil, ditto, drutil, du, head, hostname, locate, md5, mdfind, netstat, networksetup, nm, open, pbcopy, pbpaste, qlmanage, route, say, shutdown, sw_vers, sysctl, system_profiler, systemsetup, top, w, wacaw, xctool, xed, xsltproc
tldrの方がサポートしているコマンドは多く、またCheatと違ってチートシートの内容のみアップデートできる( tldr -u
)ので、今後もまだまだ増えていきそう。
よって普段使い的にはtldrの方がヒットする率が高そうですが、Cheatは自分用のチートシートを用意できるのが便利。
ということで、両方呼び出すシェルスクリプトを作って使うことにしました。
以下のgistを実行権限付きでPATHが通った場所に保存して、 how <command>
で使えます。
実行すると、以下のような感じで cheat
と tldr
両方の結果を出力します。
$ how curl ======================================= cheat # Download a single file curl http://path.to.the/file # Download a file and specify a new filename curl http://example.com/file.zip -o new_file.zip # Follow the redirect curl -L http://example.com/file ... ======================================== tldr curl Transfers data from or to a server. Supports most protocols including HTTP, FTP, POP. - Download a URL to a file: curl "URL" -o filename - Send form-encoded data: curl --data name=bob http://localhost/form - Send JSON data: curl -X POST -H "Content-Type: application/json" -d '{"name":"bob"}' http://localhost/login ...
参考
すべてのUNIXで20年動くプログラムはどう書くべきか デプロイ・保守に苦しむエンジニア達へ贈る[シェルスクリプトレシピ集]
- 作者: 松浦智之,USP研究所
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2015/07/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る