"ls"コマンドの代替?"exa"コマンドを使ってみる

つい最近だがマイナビニュースにて下記記事を目にした。
※参考:lsコマンドに替わるコマンド「exa」とは

はて?"exa"とは聞いたことが無いな。
よくよく記事を読んでみるとRustという言語で書かれた新しいコマンドらしい。

面白そうなので、インストールして試してみた。


exaコマンドのインストール


Macであればbrewを使ってそのままインストールできるらしいが、
残念ながらMacは持っていないのでLinuxで試すことにした。

今回はBash on Ubuntu on Windowsを使ってインストールしていく。
理由はDebian系であればインストールが簡単そうだったから。
詳細は下記サイトにて紹介されている。
※参考:exa a modern replacement for ls written in rust for Linux/Unix


サイトの手順に従い、apt-getにて"libhttp-parser"をインストールする。

 $ sudo apt-get install libhttp-parser2.1


次にWEB経由でファイルをダウンロードする。

 $ wget https://the.exa.website/releases/exa-linux-x86_64-0.7.0.zip


次にダウンロードしたZIPファイルを解凍する。

 $ unzip exa-linux-x86_64-0.7.0.zip
プログラム 'unzip' はまだインストールされていません。 次のように入力することでインストールできます:
sudo apt-get install unzip


とここで、"unzip"が入っていないよとエラーが出た。
そうか、無かったのか・・・てことで、先に"unzip"をインストールする。

 $ sudo apt-get install unzip


"unzip"インストール後に解凍をリトライ。

 $ unzip exa-linux-x86_64-0.7.0.zip
Archive: exa-linux-x86_64-0.7.0.zip
inflating: exa-linux-x86_64


最後に解凍したファイルを移動させて、紹介されている手順は完了。

 $ sudo mv exa-linux-x86_64 /usr/local/bin/


軽く試してみた。

 $ exa
コマンド 'exa' は見つかりませんでした。もしかして:
コマンド 'exp' - パッケージ 'alliance' (universe)
コマンド 'ex' - パッケージ 'vim-tiny' (main)
コマンド 'ex' - パッケージ 'vim' (main)
コマンド 'ex' - パッケージ 'nvi' (universe)
コマンド 'ex' - パッケージ 'vim-gnome' (main)
コマンド 'ex' - パッケージ 'vim-gtk' (universe)
コマンド 'ex' - パッケージ 'vim-nox' (universe)
コマンド 'ex' - パッケージ 'vim-athena' (universe)
コマンド 'efa' - パッケージ 'libtravel-routing-de-vrr-perl' (universe)
コマンド 'xa' - パッケージ 'xa65' (universe)
exa: コマンドが見つかりません


撃沈・・・。ちゃんと移動されているのか確認する。

 $ ls /usr/local/bin/
exa-linux-x86_64


と、ここでふと思った。
"exa-linux-x86_64"で実行しなきゃダメだったのか?と。

 $ exa-linux-x86_64
exa-linux-x86_64-0.7.0.zip aaa.txt bbb.txt test.sh


今度は成功!そういうことか・・・。
あまり独自にインストールとかしないので分からなかったが、
"/usr/local/bin/"に配置した名前じゃなきゃダメなのね。
もう少しLinuxも触らないといかんなぁ。

リネームしても良いのかな?
でも動かなくなったら嫌なので、エイリアスを張ることにした。

 $ alias exa=exa-linux-x86_64


これで使いやすくなった。
エイリアスはターミナルを落とすと設定が元に戻るので、
毎回使用したい場合は".bashrc"に記載する必要があるので注意。

 $ exa
exa-linux-x86_64-0.7.0.zip aaa.txt bbb.txt test.sh


ちなみに現在のバージョンは"0.7.0"となっている。

 $ exa -v
exa 0.7.0


暫く使ってみたが、"ls"とオプションも似ているので、それほど違和感はない。

 $ exa -l
.rw-rw-rw- 1.2M user 8 7月 3:19 exa-linux-x86_64-0.7.0.zip
.rw-rw-rw- 19 user 24 9月 2016 aaa.txt
.rw-rw-rw- 21 user 24 9月 2016 bbb.txt
.rwxr-xr-x 33 user 6 8月 2016 test.sh


"-T"オプションでツリー表示も可能。

 $ exa -T /home
/home
└── user
├── exa-linux-x86_64-0.7.0.zip
├── aaa.txt
├── bbb.txt
└── test.sh


サイトで紹介されていた謎なオプション。

 $ exa -bghHliS
inode Permissions Links Size Blocks User Group Date Modified Name
30962247438197156 .rw-rw-rw- 1 1.1Mi 2304 user user 8 7月 3:19 exa-linux-x86_64-0.7.0.zip
3659174697313621 .rw-rw-rw- 1 19 0 user user 24 9月 2016 aaa.txt
6755399441072166 .rw-rw-rw- 1 21 0 user user 24 9月 2016 bbb.txt
11258999068434500 .rwxr-xr-x 1 33 0 user user 6 8月 2016 test.sh


色々と使えそうだが、慣れ親しんだ"ls"コマンドをすぐには捨てられない。
"ls"の方が文字数も少ないしね。
もし"exa"の表示が気に入ったのであればエイリアスを活用すると良さそう。

 $ alias ls=exa


まぁ暫くは様子見かな。


"ls"と"exa"の表示の違い


"exa"が使えるようになったので、"ls"との表示の違いを確認してみた。

■ファイル詳細表示
exa000.JPG

■ディレクトリ表示
exa001.JPG

"exa"の方がカラフルな印象。
表示内容にはそれほど違いは見られないが、タイムスタンプの月と日が逆で少々見づらい。
海外の日付の書き方に準拠している感じだな。

あと、紹介されていた謎なコマンドも打ってみた。

exa002.JPG

更にカラフルになった。
色分けが好きな人にはいいかもしれない。


exaコマンドのヘルプ


最後にexaコマンドのヘルプを記載しておく。
ヘルプを表示するには"-?"オプションを付ければ良い。

 $ exa -?
Usage:
exa [options] [files...]

-?, --help show list of command-line options
-v, --version show version of exa

DISPLAY OPTIONS
-1, --oneline display one entry per line
-l, --long display extended file metadata as a table
-G, --grid display entries as a grid (default)
-x, --across sort the grid across, rather than downwards
-R, --recurse recurse into directories
-T, --tree recurse into directories as a tree
-F, --classify display type indicator by file names
--colo[u]r=WHEN when to use terminal colours (always, auto, never)
--colo[u]r-scale highlight levels of file sizes distinctly

FILTERING AND SORTING OPTIONS
-a, --all show hidden and 'dot' files
-d, --list-dirs list directories like regular files
-r, --reverse reverse the sort order
-s, --sort SORT_FIELD which field to sort by:
--group-directories-first list directories before other files
-I, --ignore-glob GLOBS glob patterns (pipe-separated) of files to ignore
Valid sort fields: name, Name, extension, Extension, size, type,
modified, accessed, created, inode, none

LONG VIEW OPTIONS
-b, --binary list file sizes with binary prefixes
-B, --bytes list file sizes in bytes, without any prefixes
-g, --group list each file's group
-h, --header add a header row to each column
-H, --links list each file's number of hard links
-i, --inode list each file's inode number
-L, --level DEPTH limit the depth of recursion
-m, --modified use the modified timestamp field
-S, --blocks show number of file system blocks
-t, --time FIELD which timestamp field to list (modified, accessed, created)
-u, --accessed use the accessed timestamp field
-U, --created use the created timestamp field
--time-style how to format timestamps (default, iso, long-iso, full-iso)
--git list each file's Git status, if tracked
-@, --extended list each file's extended attributes and sizes


色々とオプションもあるので奥が深そうである。
しかし、全体的に悪くないが、"ls"から乗り換える程でも・・・といった印象。

まぁまだ出たばかりなので、今後の展開に期待!


以上。



Linuxコマンドブック ビギナーズ 第4版


この記事へのコメント