もた日記

くだらないことを真面目にやる

Linuxメモ : あると便利かもしれないRust製コマンドラインツール

GitHub TrendingのRustのページを眺めていて気になったコマンドラインツールを試してみる。
スター数の多いツールは既に有名なものもあるし便利。個人的にはbat, ripgrep, fd, starship, delta, lsd, zoxide, tealdeerなんかがお気に入り。
とは言っても本番環境で使うことには抵抗があるし、このようなツールに慣れると素の環境で困るので個人の開発環境で使っている。
スター数順に紹介するが、似たようなツール、関連しそうなツールは併せて紹介。
キャプチャはWSL 2/Ubuntu 20.04の環境で実際に使ってみたときの画像。ツール数が多く雑な説明になっているので適切でないところもあるかも。
一部のツールについては本ブログのRustカテゴリのページで紹介しているので興味があればどうぞ。

Rust カテゴリーの記事一覧 - もた日記

Repository スター数
sharkdp/bat 25,165
BurntSushi/ripgrep 23,727
sharkdp/fd 16,363
starship/starship 14,644
ogham/exa 12,201
nushell/nushell 9,298
denisidoro/navi 8,325
dandavison/delta 7,091
sharkdp/hyperfine 6,897
BurntSushi/xsv 6,832
benfred/py-spy 6,517
imsnif/bandwhich 6,139
sharkdp/hexyl 5,828
Peltoche/lsd 5,159
Canop/broot 4,932
orf/gping 4,745
XAMPPRocky/tokei 4,485
svenstaro/genact 4,372
Y2Z/monolith 4,036
anordal/shellharden 3,626
phiresky/ripgrep-all 3,497
Schniz/fnm 3,314
sharkdp/pastel 3,159
extrawurst/gitui 3,086
volta-cli/volta 3,001
o2sh/onefetch 2,821
ogham/dog 2,709
lotabout/skim 2,363
watchexec/watchexec 2,119
bootandy/dust 2,086
ajeetdsouza/zoxide 2,033
cjbassi/ytop 2,023
cantino/mcfly 1,997
chmln/sd 1,963
jhspetersson/fselect 1,837
r-darwish/topgrade 1,586
Nukesor/pueue 1,585
dalance/procs 1,546
ClementTsang/bottom 1,502
pemistahl/grex 1,470
Aloxaf/silicon 1,391
m4b/bingrep 1,375
dbrgn/tealdeer 1,134
willdoescode/nat 1,102
rcoh/angle-grinder 1,087
ducaale/ht 983
imsnif/diskonaut 814
fcsonline/drill 750
MitMaro/git-interactive-rebase-tool 746
Byron/dua-cli 703
SoptikHa2/desed 702
bvaisvil/zenith 632
hatoo/oha 621
theryangeary/choose 565
nachoparker/dutree 483
adamsky/globe 424
fcsonline/tmux-thumbs 296
wfxr/csview 192
kuviman/glitchcat 81


インストール方法

基本的にはcargo installするか、GitHubのreleaseページにあるexecutableをダウンロードして実行すればよい。
コマンド名とインストールするときの名前が違うツールや、インストールできるバージョンが違ったりすることもあるので詳細はそれぞれのREADME.mdを参照。
以下はripgrepの例。

$ cargo install ripgrep
$ rg --version
ripgrep 12.1.1
-SIMD -AVX (compiled)
+SIMD +AVX (runtime)
$ curl -O -L https://github.com/BurntSushi/ripgrep/releases/download/12.1.1/ripgrep-12.1.1-x86_64-unknown-linux-musl.tar.gz
$ tar xf ripgrep-12.1.1-x86_64-unknown-linux-musl.tar.gz
$ ./ripgrep-12.1.1-x86_64-unknown-linux-musl/rg --version
ripgrep 12.1.1 (rev 7cb211378a)
-SIMD -AVX (compiled)
+SIMD +AVX (runtime)


bat

シンタックスハイライトしてくれるcat。Gitのステータスも表示してくれる。

f:id:wonder-wall:20210206212143p:plain


ripgrep, ripgrep-all

ripgrepは高速なgrep
ripgrep-allはzip, tar.gz, pdf, sqlite3などもripgrepで検索できるようにするツール。

f:id:wonder-wall:20210206213010p:plain


fd, fselect

fdは高速なfind
ファイル検索としてSQLライクにファイルを検索できるfselectもある。

f:id:wonder-wall:20210206214621p:plain


starship

starshipはプロンプトをカスタマイズするツール。bash, zsh, fishなど複数シェルに対応している。
プログラミング言語のバージョンやGitのステータスなどを表示してくれる。

f:id:wonder-wall:20210206211322p:plain


exa, lsd, nat

exa, lsd, natはモダンなls
個人的にはlsdがお気に入り。アイコンを表示するにはNerd Fontが必要。

f:id:wonder-wall:20210206212128p:plain


nushell

nushellはツールというかシェル。使い方はドキュメント参照。

f:id:wonder-wall:20210208220355p:plain


naviはコマンドラインのチートシート。自分でチートシートを作成することもできる。
tealdeerはコマンドの代表的な使い方を表示してくれるツール。tldrクライアントはいろいろな言語での実装がある。
似たようなツールとしてはcheat.sh, cheat, howdoi, how2がある

f:id:wonder-wall:20210207191124p:plain f:id:wonder-wall:20210206223724p:plain


delta

deltaはdiff出力を見やすく表示してくれるツール。git diffにも使えるし、以下のように2つのファイルの比較もできる。

delta a.txt b.txt
diff -u a.txt b.txt | delta

f:id:wonder-wall:20210207191026p:plain


hyperfine

hyperfineはコマンドラインのベンチマークツール。Rust製のツールが高速だということを示すためにこのツールでベンチマークしていることがある。

f:id:wonder-wall:20210207211000p:plain


xsv, csview

xsvはCSVファイルの加工、分析ができるツール。
csviewはCSVファイルを見やすく表示してくれるツール。

f:id:wonder-wall:20210207191009p:plain


py-spy

py-spyはPythonプログラムのプロファイラ。以下のように実行中のPIDを指定できる。

py-spy top --pid 12345
# OR
py-spy top -- python myprogram.py

f:id:wonder-wall:20210209220749p:plain


bandwhich, gping, ht, dog

ネットワーク関連としてbandwhichはプロセス、アドレス、コネクション毎のネットワーク使用状況を表示するツール(キャプチャはプロセスのみ)。

f:id:wonder-wall:20210210234724p:plain

gpingはグラフ表示のping

f:id:wonder-wall:20210208220839p:plain

htはHTTPクライアントHTTPieのRust実装。

f:id:wonder-wall:20210209192856p:plain

dogはdigコマンドのようなDNSクライアント。

f:id:wonder-wall:20210209193908p:plain


hexyl, bingrep

hexylはHEX(16進数)viewer。

f:id:wonder-wall:20210211004833p:plain

bingrepはバイナリ解析ツール。

f:id:wonder-wall:20210209230351p:plain


broot

brootはディレクトリツリーの表示、移動、プレビューなどができるツール。

f:id:wonder-wall:20210207221149p:plain


tokei

tokeiはソースコードのファイル数、行数などを表示してくれるツール。

f:id:wonder-wall:20210206223711p:plain


genact, globe, glitchcat

面白系としてgenactは何か作業している感じを出すツール。

f:id:wonder-wall:20210208194003p:plain

globeはアスキーアートの地球を表示するツール。

f:id:wonder-wall:20210208194015p:plain

glitchcatはグリッチアニメーションでcatするツール。

f:id:wonder-wall:20210208194025p:plain


monolith

monolithはWebページをjs, css, 画像を含んだ1つのHTMLとして保存するツール。

$ monolith https://lyrics.github.io/db/P/Portishead/Dummy/Roads/ -o portishead-roads-lyrics.html
https://lyrics.github.io/db/P/Portishead/Dummy/Roads/
https://lyrics.github.io/favicon.ico
https://lyrics.github.io/s.css
https://lyrics.github.io/1.svg
https://lyrics.github.io/2.svg
https://lyrics.github.io/3.svg


shellharden

shellhardenはシェルスクリプト向けのシンタックスハイライトツール。修正すべき箇所も背景色でサジェストしてくれる。

f:id:wonder-wall:20210209225010p:plain


fnm, volta

fnm, voltaはNode.jsのバージョン管理ツール。
似たようなツールとしてはnvm, nがある。

f:id:wonder-wall:20210208230146p:plain f:id:wonder-wall:20210211011849p:plain


pastel

pastelは色の操作ができるツール。color, random, formatなどいろいろなサブコマンドがある。

f:id:wonder-wall:20210207210915p:plain


gitui, onefetch, git-interactive-rebase-tool

Git関連としてgituiはgitのターミナルクライアント。
似たようなツールとしてはtig, lazygitなどがある。

f:id:wonder-wall:20210210234813p:plain

onefetchはGit repositoryのサマリを表示するツール。
似たようなツールとしてはシステム情報を表示するneofetchがある。

f:id:wonder-wall:20210209213428p:plain

git-interactive-rebase-toolはgit rebase -iで使えるsequence.editor。

f:id:wonder-wall:20210210230203p:plain


skim

skimはfuzzy finder(コマンド名はsk)。
似たようなツールとしてはfzf, peco, percol, fzyがある。
これまでに紹介したコマンドを組み合わせると、fdで検索したファイルをskで絞り込んでbatでプレビューみたいなこともできる。

fd | sk --preview 'bat --style=numbers --color=always --line-range :500 {}'

f:id:wonder-wall:20210206215541p:plain


watchexec

GitHub - watchexec/watchexec: Executes commands in response to file modifications

watchexecはファイルの変更を監視してコマンドを実行するツール。以下はコマンド実行例。

$ watchexec --exts js,css,html make

$ watchexec -i target make test

$ watchexec -- ls -la

$ watchexec -e py -r python server.py


dust, diskonaut, dua-cli, dutree

それぞれディスク使用量を見た目にわかりやすく表示するツール(dustとdiskonautの例)。

f:id:wonder-wall:20210207225730p:plain f:id:wonder-wall:20210210234832p:plain


zoxide

zoxideは頻繁に使用するディレクトリへの移動を支援するツール。
似たようなツールとしてはz, autojump, enhancdなどがある。

f:id:wonder-wall:20210207191101p:plain


ytop, bottom, zenith

ytop, bottom, zenithはシステムモニタリングツール。
ytopはもうメンテナンスされていないのでbottomの例。
似たようなツールとしてはhtop, glances, bashtop, gtop, gotopなどがある。

f:id:wonder-wall:20210210234849p:plain


mcfly

mcflyは作業ディレクトリなどのコンテキストを考慮してコマンド履歴をサジェストするツール。

f:id:wonder-wall:20210209222411p:plain


sd, desed

sdは直感的に置換ができるsedのようなツール。

f:id:wonder-wall:20210210230928p:plain

desedはsedのデバッグツール。sed--debugオプションみたいなもの。

f:id:wonder-wall:20210210234910p:plain


topgrade

topgradeはシステムにインストールされているパッケージなどを自動で判定して一括アップデートしてくれるツール。ドライランもできる。

f:id:wonder-wall:20210208232000p:plain


pueue

pueueは長時間かかるようなコマンドをキューに追加して処理してくれるツール。並列実行もできる。

f:id:wonder-wall:20210209231624p:plain


procs

procsはpsのようなツール。

f:id:wonder-wall:20210209225623p:plain


grex

grexは引数で与えた文字列がマッチする正規表現を作成するツール。

f:id:wonder-wall:20210208221155p:plain


silicon

siliconはソースコードを画像に変換できるツール。

f:id:wonder-wall:20210207224025p:plain


angle-grinder

angle-grinderはログ分析ツール。

f:id:wonder-wall:20210209194708p:plain


drill, oha

drill, ohaは負荷テストツール。
似たようなツールとしてはwrk, vegeta, heyがある。

f:id:wonder-wall:20210209211956p:plain


choose

chooseはPythonのスライス構文のようにフィールドを抽出できるツール。

f:id:wonder-wall:20210210231807p:plain


tmux-thumbs

tmux-thumbsはtmux-fingersのRust実装。tmuxで作業時にパスやIPアドレスなどの文字列をキー操作でコピーするツール。

f:id:wonder-wall:20210209212727p:plain