Help us understand the problem. What is going on with this article?

使いやすいように Linux (WSL) をカスタマイズ

More than 1 year has passed since last update.

Windows で WSL 環境を整えた 際、ついでに WSL に導入していた各コマンド・ツールも一通り見直したのでまとめておく。

見やすく・速く・操作しやすくて分かりやすい 環境構築を目指している。

標準コマンドの置き換え系

新しいツールを導入しても、導入したことを忘れてしまい結局使ってないなんてことが多いので、標準コマンドを置き換えることで強制的に使わざるを得ない状況にする。

Note : Shell Script 内で利用されるコマンドが置き換えられてしまうと意図しない動作をする危険性がある為、Shell がインタラクティブな場合にのみ適応されるように定義する必要がある。

config.fish
if status --is-interactive
    alias ls='exa -l --time-style="long-iso"'
    ...
end

また、インタラクティブな時でも Alias を使わずに元のコマンドを実行する場合、 command が利用できる。

$ command ls
# Coreutils の ls が実行される

exa

ls を色付きで見やすくしたコマンド。Rust 製。

https://github.com/ogham/exa
image.png

  • 色綺麗
  • git と連携、A|C|D|M|R|T|U|X|B を表示
  • .gitignore で指定されているファイルは無視 ( オプションで切り替え可 )

:sunny: ls → exa

exa は ls の置き換えとして作られているので、よく使うオプションは互換性高め。

:partly_sunny: tree → exa -T

exa はツリー構造での出力にも対応している。
しかし、ファイルが多いと出力し始めるまでに時間がかかる。その点 tree コマンドはレスポンスが良い。
exa は表現力は高いのだが、tree のままでも良いかも。

bat

cat を便利にしたコマンド。Rust 製。

https://github.com/sharkdp/bat
image.png

image.png

  • 色綺麗
  • less っぽくページング
  • git と連携、diff 情報を表示
  • コンテンツをパイプラインから入力可能
    • curl -s https://raw.githubusercontent.com/sharkdp/bat/master/src/main.rs | bat -l rs
  • Sublime Text の .sublime-syntax を追加してビルドすれば、対応 Syntax を自分で増やせる

参考 : Alternatives

:sunny: cat → bat --paging=never

まず問題なく使える。
Paging を使わなければ、パフォーマンスも気にならないレベル。

:cloud: less → bat --paging=always

パイプラインからの入力もでき、コンテンツ内操作方法も less とほぼ一緒。
置き換え可能かどうか、様子見中。

ydiff

見やすい diff。Python 製。

https://github.com/ymattw/ydiff
image.png

  • 見た目綺麗
  • 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

:sunny: diff → diff -u A B | ydiff -s

標準の diff に比べると、格段に見やすい。

ripgrep

速い grep。Rust 製。

https://github.com/BurntSushi/ripgrep
image.png

  • 色綺麗
  • 速い
  • .gitignore で指定されているファイルは無視 ( オプションで切り替え可 )

参考 : ripgrep is faster than {grep, ag, git grep, ucg, pt, sift}

:sunny: grep → ripgrep

grep との違いをあまり意識せず使えてる。かつ、ripgrep の便利機能も使えて大変良い。

fd

速い find。Rust 製。

https://github.com/sharkdp/fd

fd.gif

  • 色綺麗
  • 速い
  • .gitignore で指定されているファイルは無視 ( オプションで切り替え可 )

参考 : Benchmark

:partly_sunny: find → fd

オプションが全然違う。
fd のインターフェイスの方が個人的には好みだが、こっちに慣れすぎるのも… と葛藤している。

tin-summer

見やすい du。Rust 製。

https://github.com/vmchale/tin-summer
image.png

  • ちょっと色綺麗
  • ディスク使用量ではなく、ファイルサイズを返す
  • 並列化で du より速いケースも
  • サブコマンドでの操作はちょっと癖がある

Alternative : dust

:cloud_rain: du → tin-summer

操作感が独特。
ファイルサイズを表示するだけのコマンドと言っては失礼かもしれないが、それにサブコマンドはやり過ぎでは …

rip

ゴミ箱的な削除ができる rm。Rust 製。

https://github.com/nivekuil/rip

  • /tmp/graveyard-USERNAME がゴミ箱
    • なので、Windows のように永続化目的じゃない点は注意
  • フォルダ階層毎に削除履歴が管理され、それぞれリストアップ・復元ができる

Alternative - gomi ( peco っぽい UI )

:partly_sunny: 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 負荷ちょっと高い

:sunny: 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
comp.gif

Alternative : atool ( 同様に、圧縮/解凍を一括管理 )

httpie

ヒューマンフレンドリな http クライアント。Python 製。

https://github.com/jakubroztocil/httpie

  • 色綺麗
  • 直感的に使えるインターフェイス
  • ヘルプ見やすい

Alternative - http-prompt ( httpie を対話的に操作 )
Alternative - httpstat ( curl -v を見やすく )
Alternative - zou ( ダウンロード速い )

:sunny: wget → httpie --follow -d

ほぼ同じことができて、かつ情報が読みやすい。

:cloud_snow: curl → httpie

完全に別物。
正直、http というコマンドは既に手に馴染んでいるので、curl を置き換える必要がなかった。

開発支援コマンド

標準コマンド置き換えではないが、便利なので使っているもの。
正確には、忘れずに使い続けられているもの とでも言ったほうが良いか。

micro

操作感が GUI エディタに近い CLI テキストエディタ。Go 製。

https://github.com/zyedidia/micro
image.png

  • 色綺麗
  • 操作しやすい

Alternative : iota

nnn

GUI ツールと連携可能な CLI ファイルマネージャ。C 言語製。

https://github.com/jarun/nnn
image.png
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 製。

https://github.com/mattgreen/watchexec

  • 言語ランタイムを前提としない
  • 速い
  • 拡張子指定や無視指定も可能
    • .gitignore を忖度

Alternative : funzzy
Alternative : watchman
Alternative : entr
Alternative : modd
Alternative : watchdog
Alternative : fswatch

hyperfine

ベンチマーク統計を簡単に取れるツール。Rust 製。

https://github.com/sharkdp/hyperfine

68747470733a2f2f692e696d6775722e636f6d2f354f71724757652e676966.gif

  • 実行回数を指定可能
  • ベンチマーク前にウォームアップが可能
  • キャッシュクリアのような処理実行前に毎度実行したい処理を指定可能

Alternative : bench ( hyperfine が参考にしたツール )

tokei

ソースファイルの統計情報を出力してくれるツール。Rust 製。

https://github.com/Aaronepower/tokei

tokei.gif

  • 速い

Alternative : cloc
Alternative : loc

usql

SQL クライアント。結構色々な DB に接続できる。Go 製。

https://github.com/xo/usql

usql.gif

  • 主要な 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

一言感想

凄いけど、CLI でそこまで詳しく HTML 見なかった。
Shell Script の中で使うかもなぁ。

glances

ネットワーク状況や、プロセス状況などの山程のシステム情報をひと目で確認できるダッシュボード。Python 製。
https://github.com/nicolargo/glances

一言感想

凄いけど、
そして、WSL で動かなかった。

osquery

各種システム情報に SQL でアクセスできる代物。C++ 製。
https://github.com/facebook/osquery

一言感想

凄いけど、覚えることが多くて、何となく使わなくなった。
WSL では参照できる情報に限界があるので、あまり魅力的ではなかったのもある。

pet

スニペット管理。Go 製。
https://github.com/knqyf263/pet

一言感想

凄いけど、Windows 側のとスニペット管理ツールと被っているので、いまいち使わなかった。

gif-for-cli

CLI で Gif が見られる。Python 製。
https://github.com/google/gif-for-cli

一言感想

凄い。

おまけ

xonsh という偉大なシェルがあるとのことで、後で触ってみたい。
https://github.com/xonsh/xonsh

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away