定番 Unix コマンドを置き換えるモダン CLI ツール集
よるほろぐ編集部
ターミナルを毎日使っていると、素のテキストで流れる cat の出力、白黒でわかりにくい ls の一覧、du の結果を sort | head で整形する手間など、小さな摩擦が少しずつ積み重なってきます。
POSIX 標準コマンドはスクリプトや移植性の面では引き続き頼りになりますが、人間が直接操作する対話的な用途では、Rust や Go で書かれたモダンなツールに切り替えることで体験が大きく変わります。本記事では 8 つの定番コマンドを対象に、対応する代替ツールのインストールと基本的な使い方をまとめます。
テキスト検索(grep / find)まわりの置き換えについては、別記事「ripgrep / fd / fzf で爆速検索」で詳しく扱っています。本記事ではそれ以外のツールに絞ります。
対応一覧
| 用途 | 従来 | モダン | 主な利点 |
|---|---|---|---|
| ファイル表示 | cat | bat | シンタックスハイライト・行番号・Git 差分表示 |
| ファイル一覧 | ls | eza | 色分け・アイコン・ツリー表示・Git 連携 |
| ディレクトリ移動 | cd | zoxide | 履歴学習で短いキーワードでジャンプ |
| ディスク使用量 | du | dust | ツリーで視覚的に把握 |
| ディスク空き容量 | df | duf | 色付きテーブルで整理表示 |
| 差分表示 | diff / git diff | delta | シンタックスハイライト・横並び表示 |
| プロセス一覧 | ps | procs | 色分け・ポート情報・ツリー表示 |
| 文字列置換 | sed | sd | 直感的な正規表現・ファイル直接置換 |
bat — cat の代替
bat は cat コマンドの代替ツールで、シンタックスハイライト・行番号表示・Git 差分のサイドバー表示を持つ Rust 製ファイルビューアーです。対話端末ではページャー(less 相当)として動作し、パイプへ渡したときは cat と同様のプレーンテキスト出力にフォールバックするため、既存のパイプラインとも自然に組み合わせられます。
インストール
# Ubuntu 20.04+
sudo apt install bat
# macOS(Homebrew)
brew install bat
# Cargo(全プラットフォーム共通)
cargo install bat
一部の Ubuntu / Debian バージョンでは、別パッケージとの名前衝突のため apt install bat 後のコマンド名が bat ではなく batcat になります。bat --version でエラーになる場合は batcat --version を試してください。コマンド名を bat に統一したい場合はシンボリックリンクを作成します。
mkdir -p ~/.local/bin
ln -s /usr/bin/batcat ~/.local/bin/bat
# ~/.local/bin が $PATH に含まれているか確認
echo $PATHあるいは単純に alias bat="batcat" を ~/.bashrc に追加するだけでも構いません。
基本的な使い方
# シンタックスハイライト付きでファイルを表示
bat README.md
# 複数ファイルを続けて表示
bat src/*.rs
# 行番号のみ(ハイライトなし)
bat -n main.rs
# 言語を明示して stdin から読む
curl -s https://example.com/script.sh | bat -l sh
# 非印字文字(タブ・空白等)を可視化
bat -A /etc/hosts
実行するとファイルの種類に応じたシンタックスハイライトと行番号が付き、Git で変更した行がサイドバーに + や ~ で示されます。
エイリアス例
# ~/.bashrc に追加
alias cat='bat --paging=never' # ページャーなしで cat に近い挙動に
alias batp='bat' # ページャー付き表示は別名で残す
--paging=never を付けることで、デフォルトの cat と同じように画面に直接出力されます。
eza — ls の代替
eza は ls コマンドの代替ツールです。ファイルの種類やパーミッションを色で区別し、--icons でファイルアイコンを表示し、--tree でディレクトリツリーも表示できます。Git リポジトリ内では --git オプションで各ファイルの Git ステータスを横に並べることもできます。exa の後継プロジェクトとして、eza-community が開発を引き継いでいる Rust 製ツールです。
インストール
Ubuntu では公式パッケージリポジトリに含まれていないため、サードパーティの apt リポジトリを追加する必要があります。
# Ubuntu / Debian(deb.gierens.de 経由)
sudo apt install -y gpg
sudo mkdir -p /etc/apt/keyrings
wget -qO- https://raw.githubusercontent.com/eza-community/eza/main/deb.asc \
| sudo gpg --dearmor -o /etc/apt/keyrings/gierens.gpg
echo "deb [signed-by=/etc/apt/keyrings/gierens.gpg] http://deb.gierens.de stable main" \
| sudo tee /etc/apt/sources.list.d/gierens.list
sudo chmod 644 /etc/apt/keyrings/gierens.gpg /etc/apt/sources.list.d/gierens.list
sudo apt update && sudo apt install -y eza
# Fedora
sudo dnf install eza
# macOS(Homebrew)
brew install eza
# Cargo
cargo install eza
基本的な使い方
# 基本のファイル一覧(色付き)
eza
# 詳細表示
eza -l
# 隠しファイルも含める
eza -la
# ツリー表示(深さ 2 まで)
eza --tree --level=2
# Git ステータス付きの詳細表示
eza -l --git
# アイコン付き表示
eza --icons
エイリアス例
# ~/.bashrc に追加
alias ls='eza'
alias ll='eza -l'
alias la='eza -la'
alias lt='eza --tree --level=2'
zoxide — cd の代替
zoxide は cd コマンドの代替ツールで、訪問したディレクトリを自動的に学習し、部分的なキーワードで素早くジャンプできます。たとえば /home/user/projects/myapp/src を過去に訪れていれば、z myapp あるいは z src だけでそこへ移動できます。autojump や z.sh にインスパイアされた Rust 製ツールです。
インストール
Ubuntu / Debian の公式パッケージは更新が遅いと公式 README で注記されているため、インストールスクリプトか Cargo の利用が推奨されています。
# インストールスクリプト(Linux / macOS 共通)
curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh
# Cargo
cargo install zoxide --locked
# macOS(Homebrew)
brew install zoxide
シェル統合の設定(必須)
インストール後、~/.bashrc の 末尾 に以下を追加します。
# ~/.bashrc の末尾に追加
eval "$(zoxide init bash)"
Zsh の場合は ~/.zshrc に eval "$(zoxide init zsh)" を追加します。設定後はシェルを再起動するか source ~/.bashrc で反映します。
zoxide はシェルの cd フックに割り込んで訪問履歴を記録する仕組みのため、eval "$(zoxide init bash)" の追加が必須です。この行がない状態でも z コマンド自体は存在しますが、訪問履歴が更新されないためジャンプが機能しません。インストール直後は履歴が空なので、しばらく通常の移動をすると z が効いてきます。
基本的な使い方
# "foo" を含む、最もよく使うディレクトリへジャンプ
z foo
# 複数キーワードで絞り込む
z foo bar
# fzf でインタラクティブに選択(fzf が必要)
zi foo
# 通常の cd としても使える
z ~/Documents
z ..
z - # 直前のディレクトリへ
エイリアス例
# zoxide は z コマンドをそのまま使うのが基本
# cd を zoxide に向けたい場合は以下を追加(任意)
alias cd='z'
慣れてきたら cd を上書きするとスムーズですが、最初は z / zi をそのまま使うほうが挙動の違いを把握しやすいです。
dust — du の代替
dust は du(ディスク使用量)コマンドの代替ツールです。ファイルシステムをツリー形式で視覚化し、使用量の大きいディレクトリとその割合をバーで並べて表示します。du | sort | head のような後処理なしに、どこがディスクを使っているかを即座に把握できます。
インストール
# Ubuntu(snap 経由)
snap install dust
# Ubuntu(Cargo 経由)—— snap が使えない環境向け
cargo install du-dust
# macOS(Homebrew)
brew install dust
基本的な使い方
# カレントディレクトリのディスク使用量をツリーで表示
dust
# 特定のディレクトリを調べる
dust ~/Documents
# 表示エントリ数を増やす
dust -n 30
# ディレクトリのみ表示
dust -D
# 表示する深さを指定
dust -d 3
# 最も大きいファイルを探す
dust -F
出力例(バー長さが使用量の割合を示します):
1.2G ┌── deps │████████████████████████████████████████ 70%
1.8G ├── debug │██████████████████████████████████████████████████████ 98%
1.8G └── target │████████████████████████████████████████████████████████ 100%
エイリアス例
# ~/.bashrc に追加
alias du='dust'
duf — df の代替
duf は df(ディスク空き容量)コマンドの代替ツールで、接続されているデバイスをカラフルなテーブル形式で表示します。ローカルデバイス・ネットワークドライブ・特殊ファイルシステムをグループ分けして表示するため、df -h の長い出力から目的のマウントポイントを探す手間がなくなります。Go 製のツールです。
インストール
# Ubuntu 22.04+ / Debian 12+
sudo apt install duf
# macOS(Homebrew)
brew install duf
基本的な使い方
# 全デバイスのディスク使用量を表示
duf
# 特定のパスを表示
duf /home
# 疑似ファイルシステムや重複マウントも含めてすべて表示
duf --all
# ソート(size / used / avail / usage など)
duf --sort size
# JSON 出力(スクリプトとの連携向け)
duf --json
エイリアス例
# ~/.bashrc に追加
alias df='duf'
delta — diff / git diff の代替
delta は diff や git diff の出力を整形する Rust 製ページャーです。シンタックスハイライト・横並び(side-by-side)表示・行番号・ワードレベルの差分強調など、コードレビューを快適にする機能を持ちます。コマンドとして直接呼ぶというより、Git の pager として設定することで git diff・git show・git log -p の出力を自動的に整形します。
インストール時のパッケージ名は多くの環境で git-delta ですが、実行ファイル名は delta です。
インストール
# Ubuntu / Debian
sudo apt install git-delta
# macOS(Homebrew)
brew install git-delta
# Cargo
cargo install git-delta
Git への設定
インストール後、~/.gitconfig を以下のように設定します。
# コマンドラインから一括設定
git config --global core.pager delta
git config --global interactive.diffFilter 'delta --color-only'
git config --global delta.navigate true
git config --global delta.dark true
git config --global merge.conflictStyle zdiff3
または ~/.gitconfig を直接編集します。
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
navigate = true
dark = true
[merge]
conflictStyle = zdiff3
設定後は通常の git コマンドを実行するだけで delta が適用されます。
# 通常どおり実行するだけで delta が整形してくれる
git diff HEAD~1
git show HEAD
git log -p --oneline
横並び表示を有効にするには:
git config --global delta.side-by-side true
n / N キーでファイル間・差分間のナビゲーションができます(navigate = true の場合)。
procs — ps の代替
procs は ps コマンドの代替ツールで、プロセス一覧を色分けして見やすく表示する Rust 製ツールです。CPU・メモリ使用量・コマンド名のほか、TCP/UDP ポートや Docker コンテナ名なども一緒に表示できます。
インストール
# Ubuntu(snap 経由)
sudo snap install procs
# Cargo
cargo install procs
# macOS(Homebrew)
brew install procs
基本的な使い方
# 全プロセスを表示
procs
# キーワードで絞り込む(プロセス名・PID・コマンド引数など)
procs nginx
procs 1234
# ツリー表示(親子関係を可視化)
procs --tree
# ウォッチモード(top のように定期更新)
procs -w
# 更新間隔を指定(秒)
procs --watch-interval 2
エイリアス例
# ~/.bashrc に追加
alias ps='procs'
sd — sed の代替
sd は sed の文字列置換機能に特化した代替ツールです。Python や JavaScript と同じ正規表現構文を使えるため、sed 固有のエスケープ規則を覚える必要がなく、直感的に書けます。ファイルのインプレース(直接)書き換えも引数だけで指定でき、sed -i -e 's/foo/bar/g' のような書き方が不要になります。
インストール
# Cargo(推奨)
cargo install sd
基本的な使い方
# stdin からの文字列置換
echo 'hello world' | sd 'hello' 'bye'
# → bye world
# キャプチャグループを使った置換
echo 'cargo +nightly watch' | sd '(\w+)\s+\+(\w+)\s+(\w+)' 'cmd: $1, channel: $2, subcmd: $3'
# → cmd: cargo, channel: nightly, subcmd: watch
# ファイルをインプレース置換
sd 'window.fetch' 'fetch' http.js
# 変更のプレビュー(-p でファイルは変更しない)
sd -p 'old_api' 'new_api' main.py
# 固定文字列モード(-F で正規表現を無効化)
echo 'foo(bar)' | sd -F 'foo(bar)' 'replaced'
# → replaced
sed との書き方の比較:
# すべての出現を置換
sed 's/foo/bar/g' file.txt # sed
sd 'foo' 'bar' file.txt # sd(デフォルトで全置換・インプレース)
# スラッシュを含む文字列の置換(デリミタ問題)
sed -E 's|/old/path|/new/path|g' file.txt # 別デリミタが必要
sd '/old/path' '/new/path' file.txt # そのまま書ける
sd は sed と構文が異なるためエイリアスにはしません。コマンド名をそのまま使います。
エイリアスまとめ
以下を ~/.bashrc にまとめて追加することで、日常的な操作がモダンツールに切り替わります。
# ===== モダン CLI ツール エイリアス =====
# bat(cat 代替)
alias cat='bat --paging=never'
# eza(ls 代替)
alias ls='eza'
alias ll='eza -l'
alias la='eza -la'
alias lt='eza --tree --level=2'
# zoxide(cd 代替)— eval は末尾に追加
eval "$(zoxide init bash)"
# 慣れてきたら以下も追加
# alias cd='z'
# dust(du 代替)
alias du='dust'
# duf(df 代替)
alias df='duf'
# procs(ps 代替)
alias ps='procs'
# delta は ~/.gitconfig で設定済みのため、エイリアスは不要
alias ls='eza' のように標準コマンドを上書きすると、オプションの互換性がなくなったり、bat のページャー挙動などでパイプとの組み合わせが変わったりする場合があります。
対処のポイント:
alias cat='bat --paging=never'のようにオプションで挙動を調整する。- 標準コマンドが必要なときは
\lsや\catのようにバックスラッシュでエイリアスを無効化する。 - シェルスクリプト内では
env lsなどを使うか、スクリプト冒頭でunalias lsなどを設定して標準コマンドを使うようにする。
まとめ
- bat …
catの代替。シンタックスハイライト・行番号・Git 差分をデフォルトで表示。Ubuntu の一部バージョンではコマンド名がbatcatになる - eza …
lsの代替。色分け・アイコン・ツリー表示・Git ステータス。Ubuntu は外部リポジトリの追加が必要 - zoxide …
cdの代替。履歴学習でz fooだけでジャンプ。eval "$(zoxide init bash)"の追加が必須 - dust …
duの代替。ツリー形式でディスク使用量を視覚化。Cargo でのパッケージ名はdu-dust - duf …
dfの代替。デバイスをグループ分けしてカラフルなテーブルで表示。Ubuntu 22.04+ はaptで入る - delta …
git diffを整形するページャー。パッケージ名git-delta・コマンド名delta。~/.gitconfigの設定で有効化 - procs …
psの代替。色分け・ポート情報・ツリー表示。Ubuntu はsnap経由が手軽 - sd …
sedの代替。直感的な正規表現でファイル内文字列置換。cargo install sdでインストール
どれも既存コマンドとの共存が可能で、エイリアスを使えば既存の操作感を保ちながら少しずつ切り替えられます。まずは bat や eza など見た目の変化がわかりやすいものから試してみるとよいでしょう。
出典
- bat README(MIT / Apache-2.0): https://github.com/sharkdp/bat
- eza README(EUPL-1.2): https://github.com/eza-community/eza
- eza インストールガイド: https://github.com/eza-community/eza/blob/main/INSTALL.md
- zoxide README(MIT): https://github.com/ajeetdsouza/zoxide
- dust README(Apache-2.0): https://github.com/bootandy/dust
- duf README(MIT): https://github.com/muesli/duf
- delta README(MIT): https://github.com/dandavison/delta
- delta インストールドキュメント: https://dandavison.github.io/delta/installation.html
- procs README(MIT): https://github.com/dalance/procs
- sd README(MIT): https://github.com/chmln/sd