Windows で WSL 環境を整えた 際、ついでに WSL に導入していた各コマンド・ツールも一通り見直したのでまとめておく。
見やすく・速く・操作しやすくて分かりやすい 環境構築を目指している。
標準コマンドの置き換え系
新しいツールを導入しても、導入したことを忘れてしまい結局使ってないなんてことが多いので、標準コマンドを置き換えることで強制的に使わざるを得ない状況にする。
Note : Shell Script 内で利用されるコマンドが置き換えられてしまうと意図しない動作をする危険性がある為、Shell がインタラクティブな場合にのみ適応されるように定義する必要がある。
if status --is-interactive
alias ls='exa -l --time-style="long-iso"'
...
end
また、インタラクティブな時でも Alias を使わずに元のコマンドを実行する場合、 command
が利用できる。
$ command ls
# Coreutils の ls が実行される
exa
ls を色付きで見やすくしたコマンド。Rust 製。
- 色綺麗
- git と連携、
A|C|D|M|R|T|U|X|B
を表示 -
.gitignore
で指定されているファイルは無視 ( オプションで切り替え可 )
ls → exa
exa は ls の置き換えとして作られているので、よく使うオプションは互換性高め。
tree → exa -T
exa はツリー構造での出力にも対応している。
しかし、ファイルが多いと出力し始めるまでに時間がかかる。その点 tree コマンドはレスポンスが良い。
exa は表現力は高いのだが、tree のままでも良いかも。
bat
cat を便利にしたコマンド。Rust 製。
https://github.com/sharkdp/bat
- 色綺麗
- less っぽくページング
- git と連携、diff 情報を表示
- コンテンツをパイプラインから入力可能
curl -s https://raw.githubusercontent.com/sharkdp/bat/master/src/main.rs | bat -l rs
- Sublime Text の
.sublime-syntax
を追加してビルドすれば、対応 Syntax を自分で増やせる
cat → bat --paging=never
まず問題なく使える。
Paging を使わなければ、パフォーマンスも気にならないレベル。
less → bat --paging=always
パイプラインからの入力もでき、コンテンツ内操作方法も less とほぼ一緒。
置き換え可能かどうか、様子見中。
ydiff
見やすい diff。Python 製。
https://github.com/ymattw/ydiff
- 見た目綺麗
- Side-by-Side で表示が可能
- 比較機能を持っているわけではなく、他の比較ツールから受け取った比較結果を整形・ハイライトしている
diff -u
-
git diff
,hg diff
,svn log --diff
- Diff File, Patch File
- i.e. Github PullRequest -
curl https://github.com/ymattw/ydiff/pull/63.diff | ydiff -s
- i.e. Github PullRequest -
diff → diff -u A B | ydiff -s
標準の diff に比べると、格段に見やすい。
ripgrep
速い grep。Rust 製。
https://github.com/BurntSushi/ripgrep
- 色綺麗
- 速い
-
.gitignore
で指定されているファイルは無視 ( オプションで切り替え可 )
参考 : ripgrep is faster than {grep, ag, git grep, ucg, pt, sift}
grep → ripgrep
grep との違いをあまり意識せず使えてる。かつ、ripgrep の便利機能も使えて大変良い。
fd
速い find。Rust 製。
- 色綺麗
- 速い
-
.gitignore
で指定されているファイルは無視 ( オプションで切り替え可 )
find → fd
オプションが全然違う。
fd のインターフェイスの方が個人的には好みだが、こっちに慣れすぎるのも… と葛藤している。
tin-summer
見やすい du。Rust 製。
https://github.com/vmchale/tin-summer
- ちょっと色綺麗
- ディスク使用量ではなく、ファイルサイズを返す
- 並列化で du より速いケースも
- サブコマンドでの操作はちょっと癖がある
du → tin-summer
操作感が独特。
ファイルサイズを表示するだけのコマンドと言っては失礼かもしれないが、それにサブコマンドはやり過ぎでは …
rip
ゴミ箱的な削除ができる rm。Rust 製。
-
/tmp/graveyard-USERNAME
がゴミ箱- なので、Windows のように永続化目的じゃない点は注意
- フォルダ階層毎に削除履歴が管理され、それぞれリストアップ・復元ができる
Alternative - gomi ( peco っぽい UI )
rm → rip
公式には 置き換えはオススメしていない が、自分だけで使うなら。
他のサーバ触ってる時、ゴミ箱あると勘違いして勢いよく消して後悔するくらいかな、きっと。
■ Windows との切り分け
WSL を使っているので、/mnt/c
以下は Windows のゴミ箱に捨てたいけど、それ以外は rip に捨てたいという思いもあるが、オプションの解析等必要で骨が折れそうなので、諦めた。
pigz, lbzip2, pixz
並列化されて速くなった gzip, bzip2, xz。
多分、全部 C 言語製。
https://github.com/madler/pigz
https://github.com/kjn/lbzip2
https://github.com/vasi/pixz
- 速い
- CPU 負荷ちょっと高い
gzip, bzip2, xz → pigz, lbzip2, pixz
だいたい同じ。
tar での解凍に使うのであれば tar --use-compress-prog=XXXX
の指定が必要。
■ comp, decomp
置き換えとは別に、Linux の圧縮/解凍 が未だに手に馴染まないので fish shell でちょっとしたプラグインを書いている。
速くて高圧縮と評判の zstd や、Windows とやり取りも多いので zip, 7z も使えるようにしている。
https://github.com/kentork/fish-comp
Alternative : atool ( 同様に、圧縮/解凍を一括管理 )
httpie
ヒューマンフレンドリな http クライアント。Python 製。
🍰 Try HTTPie straight from your browser: https://t.co/0vuzOzDk8S pic.twitter.com/94EuJmWg9W
— httpie (@clihttp) 2017年10月25日
- 色綺麗
- 直感的に使えるインターフェイス
- ヘルプ見やすい
Alternative - http-prompt ( httpie を対話的に操作 )
Alternative - httpstat ( curl -v を見やすく )
Alternative - zou ( ダウンロード速い )
wget → httpie --follow -d
ほぼ同じことができて、かつ情報が読みやすい。
curl → httpie
完全に別物。
正直、http というコマンドは既に手に馴染んでいるので、curl を置き換える必要がなかった。
開発支援コマンド
標準コマンド置き換えではないが、便利なので使っているもの。
正確には、忘れずに使い続けられているもの とでも言ったほうが良いか。
micro
操作感が GUI エディタに近い CLI テキストエディタ。Go 製。
https://github.com/zyedidia/micro
- 色綺麗
- 操作しやすい
nnn
GUI ツールと連携可能な CLI ファイルマネージャ。C 言語製。
https://github.com/jarun/nnn
go to movie on vimeo
- 速い
- 操作は難しくない。すぐ慣れる
- X Windows System 前提 なのが、WSL 的には少し辛い
Alternative : Lf
Alternative : ranger
■ WSL 化
WSL に対し特別の配慮は無いので、様々手を入れる必要がある。
◆ xdg-open → wsl-open
nnn は、ファイルを OS の既定のアプリに処理を渡すために、xdg-open を利用しているが、WSL では当然動かない。
なので、wsl-open と入れ替えることで動作させている。
$ curl -LO https://raw.githubusercontent.com/4U6U57/wsl-open/master/wsl-open.sh
$ sudo chown root:root wsl-open.sh && sudo chrmod +x wsl-open.sh && sudo mv wsl-open.sh /usr/bin/wsl-open
$ sudo mv /usr/bin/xdg-open /usr/bin/xdg-open.old && sudo ln -s /usr/bin/wsl-open /usr/bin/xdg-open
wsl-open は、DrvFs ( /mnt/*
以下 ) はそのまま Windows の規定のアプリに渡されるが、VolFs ( /mnt
以外 ) は 一旦 Windows のテンポラリフォルダにコピーされてから実行される ので注意が必要。
watchexec
ファイルの変更監視してコマンドをトリガーできるツール。Rust 製。
- 言語ランタイムを前提としない
- 速い
- 拡張子指定や無視指定も可能
-
.gitignore
を忖度
-
Alternative : funzzy
Alternative : watchman
Alternative : entr
Alternative : modd
Alternative : watchdog
Alternative : fswatch
hyperfine
ベンチマーク統計を簡単に取れるツール。Rust 製。
- 実行回数を指定可能
- ベンチマーク前にウォームアップが可能
- キャッシュクリアのような処理実行前に毎度実行したい処理を指定可能
Alternative : bench ( hyperfine が参考にしたツール )
tokei
ソースファイルの統計情報を出力してくれるツール。Rust 製。
- 速い
Alternative : cloc
Alternative : loc
usql
SQL クライアント。結構色々な DB に接続できる。Go 製。
- 主要な RDB に対応。一部、NoSQL にも ( SQL Like なクエリを持つものだけ? )
- 使い勝手は psql
便利だけど、使わなかったコマンド
便利さは理解し導入したが 知らぬ間に忘れてしまっていた 者達。
誰かにとっては有用かもしれない。
parallel
GNU parallel の Rust 書き換え。Rust 製。
https://github.com/mmstick/parallel
一言感想
progress
cp, mv, rm... などのコマンドの進捗を確認できる。C 言語製。
https://github.com/Xfennec/progress
一言感想
PathPicker
パイプラインで受け取ったコンテンツからファイルパスを選択し、何かしらの処理を加える。Python 製。
https://github.com/facebook/PathPicker
一言感想
xsv
CSV ファイルを検索・抽出・分析・分割 & 結合できる。Rust 製。
https://github.com/BurntSushi/xsv
一言感想
pup
HTML 版の jq みたいなもの。CSS Selector Like なクエリでノードを選択する。Go 製。
https://github.com/ericchiang/pup
一言感想
glances
ネットワーク状況や、プロセス状況などの山程のシステム情報をひと目で確認できるダッシュボード。Python 製。
https://github.com/nicolargo/glances
一言感想
osquery
各種システム情報に SQL でアクセスできる代物。C++ 製。
https://github.com/facebook/osquery
一言感想
pet
スニペット管理。Go 製。
https://github.com/knqyf263/pet
一言感想
gif-for-cli
CLI で Gif が見られる。Python 製。
https://github.com/google/gif-for-cli
一言感想
おまけ
xonsh という偉大なシェルがあるとのことで、後で触ってみたい。
https://github.com/xonsh/xonsh