I have compared the man pages of
ls and they seem to be exactly the same. Both are part of GNU coreutils and "list directory contents".
The only difference I've seen so far is that
dir doesn't colorize the output.
So why do two commands exist? Is there a difference I missed? Why would one prefer