| author | created | draft | tags | title | |||
|---|---|---|---|---|---|---|---|
プレハブ小屋 |
2026-02-17 11:44:01 +0900 |
true |
|
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/_ezals(1) のオプションによっては、同じ機能を eza も搭載している。その場合はわかりやすい別名オプションが存在する:
| 短 | 長い名前 | コメント |
|---|---|---|
-1 |
--oneline |
一行に一項目ずつ陳列する |
-G |
--grid |
項目を格子状に陳列する(既定) |
-l |
--long |
項目の情報と属性を表示する |
-R |
--recurse |
サブディレクトリーを再帰的に陳列する |
-x |
--across |
列ではなく行を格子状に並べる |
eza -G は ls(1) に対応するオプションがないが、それは既定の(陳列オプションなしでの)動作だから。
eza -R を使うくらいならば木構造で見る eza -T のほうが良いだろう。
オプション -F/--classify は ls(1) と同様。このオプションを常に与えたい。
- 値なし、
auto,automaticは記号表示をezaの判断で決める alwaysはいつでも記号表示をオンにするneverはいつでも記号表示をオフにする
ファイル名称の末尾に添えられる記号とは *, /, =, @ などだ。man 1 ls で確認可能。
オプション --color は ls(1) と同様。
オプション --color-scale は同一列内を段階に分けて色分けするために用いられる。有効な値は all, age, size か、それらを , で区切った文字列。
さらにオプション --color-scale-mode で fixed か gradient を指示可能。
オプション --icons は項目を表現するアイコン表示をどうするかを指定する。
- 値は
always,auto,neverから指定する。既定値はauto. - アイコンには Unicode 文字を採用している。
オプション --absolute は項目を絶対パスで表記するかどうかを指定する。
- 値は
on,off,followから指定する。既定値はoff. - 値
followはシンボリックリンクの実体を使わせる。
オプション --hyperlink は項目をハイパーリンクにして陳列する。端末エミュレーターの機能次第で $EDITOR や $BROWSER が開くとうれしい。
- 上のオプション
--absoluteと組み合わせて使うのが普通。
オプション --no-quotes は項目名が空白文字を含む場合に単引用符で囲ませないようにする。
オプション -w/--width は ls(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 を併用し、対応するオプションを付加するのが自然だ。次で述べる。
ファイルを表形式で陳列する場合には、表に含める属性を指定するオプションを用いるのが普通だ。ここではその有効なオプションをまとめる。
まず、私がめったに指定しないオプションを列挙する:
-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) 方式で指定するか、次のキーワードのいずれかで指定する:
defaultiso:ls(1) と同様long-iso:ls(1) と同様full-iso:ls(1) と同様relative: SNS にありがちな流儀
また、ls(1) の同名オプションが備えている二行文字列も扱える(古いファイルと最近のものとで時刻の書式を切り替える機能)。
表形式陳列で出力する場合、対象が 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 の動作を構成するのが良い。
別名定義により ls を eza に置き換えるのはいったん保留する。コマンドラインオプションに完全互換性があれば置き換えるべきだった。
- 既存の
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- 絞り込みオプションおよび排列オプションは常用する組み合わせを最初に固めておくと良い。
- 表形式オプションも同様に固めておくのがコツだ。
- 残りの派生別名は基本別名からオプションを追加する形式で定義する。
Homebrew で eza をインストールした場合、コマンドラインにおけるタブ補完が次の共通コードで有効になるはずだ:
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 twiceeza を使い始めてから半年ほど経過したのを契機に、普段のこの CLI の運用を見直したのが本稿だ。この見直しの成果を最後に列挙して満足したい:
- インストールを
apt(8) からbrew(1) に乗り換えることができた- Bash タブ補完の有効コードを発見することができた
ezaを常用することにより、次の効用を得た:- ヘッダー行のおかげで表形式出力における列の意味がわかりやすい
eza -Tで再帰的構造を木形式で出力できる- Git 状態を
git status以外の方法で確認できる - ディレクトリーのみを容易に出力できる (
eza -D)
ls(1) と互換でないコマンドラインオプションに意識がいくようになった- 表形式陳列において Git リポジトリー情報を示せることを知った
- Bash 対話環境でオプション組み合わせを変えた
aliasを複数用意するようになった - 構成ファイルが現在のところテーマ関連しか効かないことが理解できた
- 環境変数
EZA_STRICTを定義したくなった