Skip to content

Instantly share code, notes, and snippets.

@showa-yojyo
Created February 23, 2026 04:11
Show Gist options
  • Select an option

  • Save showa-yojyo/71f56ca3a5a784ead976bfa9d07d7344 to your computer and use it in GitHub Desktop.

Select an option

Save showa-yojyo/71f56ca3a5a784ead976bfa9d07d7344 to your computer and use it in GitHub Desktop.
My notes on using eza, a modern alternative to ls.
author created draft tags title
プレハブ小屋
2026-02-17 11:44:01 +0900
true
CLI
exa
eza
eza 利用ノート

eza 利用ノート

はじめに

Unix/Linux システムに標準搭載されているファイル一覧 CLI プログラム ls(1) の、現代的代替物である eza について、私なりに情報をこのファイルにまとめる。

eza の良い特徴を挙げる:

  • 多機能
  • 既定設定が優れている
  • ファイルタイプやメタデータを色分けする
  • シンボリックリンク、拡張属性、Git を認識する
  • 軽量かつ高速

この CLI ツールを WSL (Ubuntu) で利用する前提で綴る。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.3 LTS
Release:        24.04
Codename:       noble

評価に用いた eza のバージョン情報は次節に記す。

パッケージ管理

いつもの apt (8) でもパッケージを管理することが可能だが、Homebrew をなるべく使いたい。apt (8) よりも積極的に採用しろ。パッケージの更新ペースが apt (8) よりも良好であることが予期されるからだ。

インストールコマンドなどを次に示す:

brew install eza

インストール直後はこのようになる:

$ brew list eza
/home/linuxbrew/.linuxbrew/Cellar/eza/0.23.4/.crates.toml
/home/linuxbrew/.linuxbrew/Cellar/eza/0.23.4/.crates2.json
/home/linuxbrew/.linuxbrew/Cellar/eza/0.23.4/bin/eza
/home/linuxbrew/.linuxbrew/Cellar/eza/0.23.4/etc/bash_completion.d/eza
/home/linuxbrew/.linuxbrew/Cellar/eza/0.23.4/sbom.spdx.json
/home/linuxbrew/.linuxbrew/Cellar/eza/0.23.4/share/fish/vendor_completions.d/eza.fish
/home/linuxbrew/.linuxbrew/Cellar/eza/0.23.4/share/man/ (3 files)
/home/linuxbrew/.linuxbrew/Cellar/eza/0.23.4/share/zsh/site-functions/_eza

オプション

陳列オプション

ls(1) のオプションによっては、同じ機能を eza も搭載している。その場合はわかりやすい別名オプションが存在する:

長い名前 コメント
-1 --oneline 一行に一項目ずつ陳列する
-G --grid 項目を格子状に陳列する(既定)
-l --long 項目の情報と属性を表示する
-R --recurse サブディレクトリーを再帰的に陳列する
-x --across 列ではなく行を格子状に並べる

eza -Gls(1) に対応するオプションがないが、それは既定の(陳列オプションなしでの)動作だから。

eza -R を使うくらいならば木構造で見る eza -T のほうが良いだろう。

ファイル種別

オプション -F/--classifyls(1) と同様。このオプションを常に与えたい。

  • 値なし、auto, automatic は記号表示を eza の判断で決める
  • always はいつでも記号表示をオンにする
  • never はいつでも記号表示をオフにする

ファイル名称の末尾に添えられる記号とは *, /, =, @ などだ。man 1 ls で確認可能。

着色

オプション --colorls(1) と同様。

オプション --color-scale は同一列内を段階に分けて色分けするために用いられる。有効な値は all, age, size か、それらを , で区切った文字列。 さらにオプション --color-scale-modefixedgradient を指示可能。

アイコン

オプション --icons は項目を表現するアイコン表示をどうするかを指定する。

  • 値は always, auto, never から指定する。既定値は auto.
  • アイコンには Unicode 文字を採用している。

絶対パスとハイパーリンク

オプション --absolute は項目を絶対パスで表記するかどうかを指定する。

  • 値は on, off, follow から指定する。既定値は off.
  • follow はシンボリックリンクの実体を使わせる。

オプション --hyperlink は項目をハイパーリンクにして陳列する。端末エミュレーターの機能次第で $EDITOR$BROWSER が開くとうれしい。

  • 上のオプション --absolute と組み合わせて使うのが普通。

残り物

オプション --no-quotes は項目名が空白文字を含む場合に単引用符で囲ませないようにする。

オプション -w/--widthls(1) と同様。

絞り込みオプション

次のオプション群は ls(1) と同様:

  • -a/--all; ただし eza では二度指定することで ... が一覧に現れる。
  • -A/--almost-all
  • -d; ただし eza では別名を --treat-dirs-as-files という。

オプション --git-ignore を使うと、出力の一覧は Git が無視する項目を含まない。

オプション -I/--ignore-glob を使うと、引数のワイルドカードパターンに合致する項目が一覧に含まれない。例:

eza -I '*.md'

オプション -L/--level を使うと、出力である一覧の深さを引数の値に制限する。

オプション -D/--only-dirs を使うと、一覧がディレクトリーしか含まなくなる。反対に、-f/--only-files を使うと、一覧がファイルしか含まなくなる。

  • ls -d */ の代わりに eza -D が使える。

排列オプション

次のオプション群は ls(1) と同様:

  • -r/--reverse
  • --sort; ただし eza では有効な引数が異なる。下で記す。
  • --group-directories-first; ただし eza には --group-directories-last もある。

オプション -s/--sort の引数で公式なものと、それを指定するときに起こる並び替えは次のとおり:

引数 排列方式
name AaBb... 方式で名前の辞書順
Name AB...ab... 方式で名前の辞書順
extension AaBb... 方式で拡張子順
Extension AB...ab... 方式で拡張子順
size ファイル容量の小さい順
modified ファイル mtime の古い順
changed ファイル ctime の古い順
accessed ファイル atime の古い順
inode ファイルの inode の小さい順
type ディレクトリー、ファイル、リンクの順
none 不明
  • modified の代わりに date/time/newest を用いてもかまわない。
  • オプション --reverse --sort=modified の代わりに --sort=age/--sort=oldest でも通じる。

排列を検証したい場合にはオプション -l/--long を併用し、対応するオプションを付加するのが自然だ。次で述べる。

-l/--long に付随するオプション

ファイルを表形式で陳列する場合には、表に含める属性を指定するオプションを用いるのが普通だ。ここではその有効なオプションをまとめる。

まず、私がめったに指定しないオプションを列挙する:

  • -b/--binary: ファイル容量を二進単位で示す (KiB, MiB, etc.)
  • -B/--bytes: ファイル容量をバイト単位で示す
  • -g/--group: ファイルのグループを示す (Group)
  • --smart-group: ファイル所有者とグループが異なる場合のみグループ名を示す
    • グループをめったに出力しないがゆえに、このフラグはむしろ常時指定するという考えもある。
  • -H/--links: ファイルに対するハードリンクの個数を示す (Links)
  • -i/--inode: ファイルの inode を示す (inode)
  • -n/--numeric: ファイルの所有者と所有グループを数字で示す
  • -S/--blocksize: ファイルのブロックサイズ(ファイルシステムの観点でのサイズ)を示す (Blocksize)
  • --stdin: 標準入力から(たいていパイプ経由で)入力を与えることを指示する
  • -@/--extended: ????
  • -Z/--context: (Security Context)

次に、まともに使いそうなオプションを列挙する:

  • --changed: ファイルの ctime (Date Changed)
  • -h/--header: 表にヘッダー行を付ける
  • -m/--modified: ファイルの mtime (Date Modified)
  • --total-size: 再帰的ディレクトリーサイズを示す
  • -u/--accessed: ファイルの atime (Date Accessed)
  • -U/--created: ファイルが作成された時刻 (Date Created)
  • -o/--octal-permissions: ファイルの権限を八進数表記で示す

陳列抑制オプション

表形式陳列では権限、容量、所有者、時刻を通常は外せない。隠す必要がある場合には次のオプションを使え:

  • --no-permissions
  • --no-filesize
  • --no-user
  • --no-time

ファイル名を外すことは不可能らしい。

時刻書式オプション

ls(1) と同じ方式で陳列する時刻指定オプションが二つともある。

オプション -t=WORD/--time=WORD: ただし有効な値の集合は ls と異なる。次の四つしかない:

  • modified: -m/--modified と等しい
  • changed: --changed と等しい
  • accessed: -u/--accessed と等しい
  • created: -U/--created と等しい

オプション --time-style=STYLE: 時刻書式。date(1) 方式で指定するか、次のキーワードのいずれかで指定する:

  • default
  • iso: ls(1) と同様
  • long-iso: ls(1) と同様
  • full-iso: ls(1) と同様
  • relative: SNS にありがちな流儀

また、ls(1) の同名オプションが備えている二行文字列も扱える(古いファイルと最近のものとで時刻の書式を切り替える機能)。

Git 関連オプション

表形式陳列で出力する場合、対象が Git リポジトリーであれば、Git 状態を各行に含めることが可能だ。

オプション --git により、リポジトリーにあるファイルの Git 状態を陳列する。二文字幅の列が表に加わる。一文字目と二文字目が staged / unstaged 状態をそれぞれ示す。記号の意味は git status のそれとほとんど同じだ:

記号 意味
- 変化なし
D 削除
I 無視
M 修正
N 新規
R 移動
T 種別変更
U 衝突中

オプション --git-repos はディレクトリーの Git 状態を示す記号を含めて陳列する。

記号 意味
` `
+ 変化した
~ 不明

オプション --git-repos-no-status はディレクトリーが Git リポジトリーであるかどうか(のみ)を陳列する。

  • --no-git: 上の Git 関連オプション全てを無効にする

構成

対話モードシェル構成

ファイル ~/.bashrc など(人によっては分割定義している)で eza の動作を構成するのが良い。

別名をオプションの組み合わせに応じて複数定義する

別名定義により lseza に置き換えるのはいったん保留する。コマンドラインオプションに完全互換性があれば置き換えるべきだった。

  • 既存の ls は上書きしないものとする。
  • 本家をリスペクトするべく exa という別名を定義する。

ファイル /etc/skel/.bashrc における ls 派生別名に倣い、オプションだけ異なる alias を定義する。例を示す:

if [ -x "$(command -v eza)" ]; then
    alias exa='eza --group-directories-first --sort=extension --no-quotes'

    alias ll='exa -alF --color-scale=age --color-scale-mode=gradient --git --header --smart-group --time-style=long-iso' # long list
    alias la='exa -A' # all but . and ..
    alias l='exa -F'
else
    alias ls='ls --group-directories-first -x'
    alias ll='ls -alF'
    alias la='ls -A'
    alias l='ls -CF'
fi
  • 絞り込みオプションおよび排列オプションは常用する組み合わせを最初に固めておくと良い。
  • 表形式オプションも同様に固めておくのがコツだ。
  • 残りの派生別名は基本別名からオプションを追加する形式で定義する。

コマンドライン引数に対するタブ補完

Homebreweza をインストールした場合、コマンドラインにおけるタブ補完が次の共通コードで有効になるはずだ:

if [ -x "$(command -v brew)" ]; then
    HOMEBREW_PREFIX="$(brew --prefix)"
    if [[ -r "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh" ]]; then
        source "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh"
    else
        for f in "${HOMEBREW_PREFIX}/etc/bash_completion.d/"*; do
            [[ -r "$f" ]] && source "$f"
        done
    fi
fi

動作確認方法:端末で eza -- とタイプして Tab を押すと、有効オプションが陳列されるはずだ。

構成ファイル

一般的な CLI ツールのように、オプションを構成ファイルから読み取る仕組みが eza にもある。

eza には構成ファイルが複数存在し得る。それらを格納するディレクトリー候補を次の優先度で採用する:

  • 環境変数 EZA_CONFIG_DIR が指すファイルパス
  • $XDG_CONFIG_HOME/eza; 通常は下に記すファイルパスと同じ
  • $HOME/.config/eza

このディレクトリーに eza の構成を記述したファイルを置けばいい。

  • theme.yml: テーマ構成

環境変数

環境変数は利用することはないはずだ。いずれの環境変数も、対応するコマンドラインオプションが存在して、その明示的指示により設定を上書きできる。

他の CLI が参照する環境変数であって、eza も参照するものがある:

  • COLUMNS: シェル変数だが、他のまともな CLI ツールと同じ画面幅を認識するために参照。
  • LS_COLORS: ls --color に対して、異なるファイルタイプをどのように表示するかを指示する環境変数だが、eza に対しても流用可能。
  • NO_COLOR: 環境変数として定義するだけで eza の出力は色を使わなくなる。

eza 専用環境変数のうち、使いそうなものを記す:

  • EZA_CONFIG_DIR: 先述のとおり
  • EZA_ICONS_AUTO: オプション --icons=auto を毎回コマンドラインで指定する人は定義するとよい
  • EZA_ICON_SPACING: アイコンとファイル名の隙間の文字幅を指定する
  • EZA_OVERRIDE_GIT: コマンドラインで --git--git-repos されても上書きする(無効にする?)
  • EZA_STRICT: 空でない値を定義しておくと eza が互換でないオプションを受け取ったときにエラー終了するようになる
$ EZA_STRICT=1 eza --sort=name --sort=created
eza: Flag --sort was given twice

おわりに

eza を使い始めてから半年ほど経過したのを契機に、普段のこの CLI の運用を見直したのが本稿だ。この見直しの成果を最後に列挙して満足したい:

  • インストールを apt(8) から brew(1) に乗り換えることができた
    • Bash タブ補完の有効コードを発見することができた
  • eza を常用することにより、次の効用を得た:
    • ヘッダー行のおかげで表形式出力における列の意味がわかりやすい
    • eza -T で再帰的構造を木形式で出力できる
    • Git 状態を git status 以外の方法で確認できる
    • ディレクトリーのみを容易に出力できる (eza -D)
  • ls(1) と互換でないコマンドラインオプションに意識がいくようになった
  • 表形式陳列において Git リポジトリー情報を示せることを知った
  • Bash 対話環境でオプション組み合わせを変えた alias を複数用意するようになった
  • 構成ファイルが現在のところテーマ関連しか効かないことが理解できた
  • 環境変数 EZA_STRICT を定義したくなった

資料

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment