ls is a command to show files in Linux and Unix-like operating systems. A ls command first appeared in a version of AT&T UNIX as well as in Multics. BSD and GNU Coreutils package provides the ls command with minor syntax changes. There is now third alternative named exa. It is a modern replacement for ls command.
The exa uses colors for information by default, helping you distinguish between many types of files, such as whether you are the owner, or in the owning group. It also has extra features not present in the original ls, such as viewing the Git status for a directory or recursing into directories with a tree view. The exa command written in Rust, so it’s small, fast, and portable.
exa a modern replacement of ls command written in rust
- By default exa use the colors.
- It can display a file’s extended attributes, as well as standard filesystem information such as the inode, the number of blocks, and a file’s various dates and times.
- Tree view
- Git support: View the staged and unstaged status of every file, right there in the standard view. Also works in tree view.
- It queries files in parallel, giving you performance on par with ls.
Installing exa on Linux and Unix-like systems
One can install exa from the source code or use a package manager.
Install exa on macos
Use the brew command:
$ brew update && brew upgrade
$ brew cleanup
$ brew install exa
==> Downloading https://homebrew.bintray.com/bottles/exa-0.7.0.sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring exa-0.7.0.sierra.bottle.tar.gz ==> Using the sandbox ==> Caveats Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completions have been installed to: /usr/local/share/zsh/site-functions fish completions have been installed to: /usr/local/share/fish/vendor_completions.d ==> Summary /usr/local/Cellar/exa/0.7.0: 9 files, 1.2MB
Install exa on an Arch Linux
Use the pacman command:
$ sudo pacman -S exa
Run the dnf command:
sudo dnf install exa
Type the following emerge command:
$ emerge sys-apps/exa
Execute the nix-env command:
$ nix-env -i exa
OpenSUSE/SUSE Linux users run the following zypper command
sudo zypper install exa
[sudo] password for vivek: Retrieving repository 'openSUSE-Leap-15.1-Update' metadata ..............[done] Building repository 'openSUSE-Leap-15.1-Update' cache ...................[done] Loading repository data... Reading installed packages... Resolving package dependencies... The following NEW package is going to be installed: exa 1 new package to install. Overall download size: 443.5 KiB. Already cached: 0 B. After the operation, additional 1.2 MiB will be used. Continue? [y/n/v/...? shows all options] (y): y Retrieving package exa-0.8.0-lp151.3.53.x86_64 (1/1), 443.5 KiB ( 1.2 MiB unpacked) Retrieving: exa-0.8.0-lp151.3.53.x86_64.rpm ................[done (13.6 KiB/s)] Checking for file conflicts: ............................................[done] (1/1) Installing: exa-0.8.0-lp151.3.53.x86_64 ...........................[done]
Install exa using source code
To install Rust, run the following in your terminal, then follow the onscreen instructions:
$ curl https://sh.rustup.rs -sSf | sh
Install libgit2 and cmake using apt-get command/apt command:
$ sudo apt-get install libgit2-dev cmake git libhttp-parser2.1
To download the latest version, run:
$ git clone https://github.com/ogham/exa.git
Run make install in the new directory to compile and install exa into /usr/local/bin:
$ make install
Install exa using binary method on any Linux distro
Make sure you install libhttp-parser:
$ sudo apt-get install libhttp-parser2.1
$ wget https://github.com/ogham/exa/releases/download/v0.9.0/exa-linux-x86_64-0.9.0.zip
$ unzip exa-linux-x86_64-0.9.0.zip
$ sudo mv exa-linux-x86_64 /usr/local/bin/
How do I use exa?
Simply type the exa command:
$ exa -l
$ exa -l /etc/
The -l option displays extended file metadata as a table. Try another example:
$ exa -bghHliS
Setting up an alias
Add the following alias your bash shell startup file such as ~/.bashrc:
Another option to create a permanent Bash alias on Linux/Unix is as follows:
echo "alias ls='exa -l'" >> ~/.bash_aliases
Getting help about exa command
Type the following command:
$ exa --help
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