Ask someone to name all the things they can find in a room. Only a few will mention air. Ask a Linux command line user about programs they use and they may well forget to mention ls
. Like air, it is seemingly invisible since it is so everpresent. But is it the best it can be? Sure, you can use environment variables and aliases to make it work a little nicer, but, in fact, it is much the same ls
we have used for decades. But there have always been moves to make better ls
programs. One of them, exa
, was recently deprecated in favor of one of its forks, eza
.
One thing we liked about eza
is that it is a single file. No strange installation. No multiple files to coordinate. Put it on your path, and you are done. So installation is easy, but why should you install it?
Features
One of the nice features of eza
is that it has better defaults. Sure, you can work around that with ls
, but it is still nice. It also knows about things like hyperlinks, Git repos, and even icons — sort of.
By default, the program ignores . and .., even if you give the -a
option. You can, however, use -a
twice to show those directories, as well. Want to know if a file is tracked or ignored in Git? Use the --git
option. If you want to see file permissions in octal (and who doesn’t?), try -o
. The --git-ignore
option allows you to skip things you’ve already told Git not to worry about. You can even get a nice tree-like output (-T
).
Column headers are a simple but nice feature (-lh
).
Of Course…
Of course, ls
has a lot of options, too. You can suppress the . and .. directories, for example, with -A
. You can also ask it to create hyperlinks. In fact, if there is one complaint we have, it is that the options are different, and many scripts use ls
. So replacing ls
with eza
can be a problem. You might be better off aliasing it only for commands you enter. It would be nice if, for example, eza
took normal ls
options until you used a special option to trigger extended options.
If you want, for example, to list only directories using stock ls, you usually use one of two options:
ls -d */ls -l | grep ^d
With eza
, you simply say:
eza -D
Then Again…
Eza
isn’t going to change your world. In general, you can do everything it does with some combination of existing tools or ls
options. But it is handy, especially if you work with tools it knows about like Git. Another common choice is LSDeluxe, known as lsd
. This is widely supported and also has a configuration file, so you can make its defaults what you want.
The lsd
program is probably a bit more compatible with ls
, which we like. It also offers tree view, icons, and Git modes. One thing we definitely like is the ability to specify –classic to get output similar to what you get from the stock ls
.
Overall, they are both pretty similar. Which one you choose will probably fall to your personal preference. Or, maybe you want to stick with the old Unix principle that programs should do one thing and only one thing well. Then you might stick with the old way of doing things, and that’s fine too. Linux is, after all, about choice.
Grep
is another one of those tools you might consider replacing. Of course, if you really want a different experience, try changing shells.
ls -edalf
What about DIR ? 😁
I use lsd on everything with a fish abbreviation and it looks great and works the same
I had alias lsd=”ls -d “$*”\.#*(/)” but having it natively is very nice, as you can do more with other options e.g. “eza -DT” is very nice. Also, at least my implementation lsd, is a bit hacky. The eza -D works much better. My eza is aliased to ls (two vs 3 letters) ;P
ls -shalrt
what is the problem with ls?
Add the following to your .bashrc or .profile. Salt to taste (or convert to another shell).
“`
export LS_OPTIONS=’–color=auto –classify –escape –group-directories-first’
alias ls=”ls $LS_OPTIONS”
“`
Under Ubuntu bash LS options should actually read:
export LS_OPTIONS=’–color=auto -b -F –group-directories-first’
Why not just the alias with the desired options directly? What is the purpose of that extra env var?
Obviously that’s fine too. In theory, one could have different options in different shells/term windows or make changes on the fly. But that’s a corner case.
In my case it’s just a historical artifact. I use a ~/.bashrc ~/.bashrc.d/*.rc style shell config. At some point the options were in a separate file and I’ve never gone back to modify it. I simply did a cut/past of those two lines for the post.
Re the .bashrc.d/ style
It lets me break out my shell configs into multiple file for different purposes. e.g. I have one that configures git related stuff, one for aliases, one for python stuff, etc.
At the bottom of my .bashrc it has
“`
for RC in ${HOME}/.bashrc.d/*.rc ; do
source $RC
done
“`
The man page would indicate the long form arguments are just as valid and I find it more readable. But it’s your RC so whatever you prefer/works for you is totally valid.
I like the built in tree function exa -T ~/bin or exa -T -l ~/bin is even more fun.
ageed!
Eza seems to have some nice features. Someone should rewrite it in C so it’s maintainable and doesn’t take a half hour to compile.
Somewhat of topic here:
How to suppress all the anoying error message from ‘find’. Is there another command or are there some flag I have missed?
No mention of straight up tree command? Definitely the most portable (well established on most systems) and tree with ls can do basically all of this.
What I generally do is:
find / -name “looking_for” -print 2>/dev/null
Doing the 2>/dev/null will eliminate the errors messages.
If you expect a lot of output you can:
find / -name “looking_for” -print 2>/dev/null | more
Pipe output to more to page the output.
Thanks. Coming from Unix/Solaris I used tcsh where you can’t redirect stderr without also redirect stdout. It’s time to change shell. Bash or… ?
Isn’t ‘eza’ hideous to type compared to the alternating right-left-right on the home row of ‘ls’?
This. I type ‘ls’ so many times during a typical workday, and it rolls off the fingers really easily. ‘eza’ is far too awkward. As least ‘lsd’ is easy to type and it shares many of the commonly-used options with ls.
alias is your friend, lots of people have ll aliased to ‘ls -l’ so you could use ll to alias to eza instead. As an added bonus it will leave ls alone, so when it is used in scripts (never seen that in practice though), it will still function as intended.
What? No “I use lsd all the time” comments yet?
Annoyingly, the installation of ls in linux is broken by the common .bashrc file. It purports to allow simply enabling/disabling of the rather useless colours (which always have some unreadable choices whether you use a dark or light terminal) due to having a too-indirect control of the option.
This results in a choice being made that’s then overidden by some differently prioritised options. I can only assume that some previous maintainer was so frustrated by one scheme that they plastered another one on top.
I get that some people think dark mode is trendy. But many of us got over it with green on black in the 80s and are rather glad to have a screen that’s compatible with workbench lighting. Please test your text colour screens in other backgrounds if you want them to be more widely useful.
Adrian said: I get that some people think dark mode is trendy.
IT IS NOT trendy for many. I for one have sensitivity to bright colors. I use dark mode when possible.
Please choose your words more carefully. Thank you.
Nonetheless, that seems to be the most common reason behind using it. I hate hackaday’s presentation, find it very hard to read. Whatever you find undesirable about light colours I find undesirable about dark backgrounds.
Note that a dark screen is inherently more difficult to read because of physics/optics. Low light means wide pupils. Wide pupils means short depth of field. Bright conditions give deeper fields and less tiring vision.
If you have difficulties for other reasons then I’m sorry that you have to deal with it, but due to aging most people will progressively prefer the opposite.
When you jump from machine to machine, and from machines that are not yours, I just use ll or ls.. if eza is sooo great, build its features into ls – but i dont see that happening