I'm relatively new to programming as a whole and some tutorials have been telling me to use ls -l
to look at files in a directory and others have been saying ll
. I know that ls
is a short list, but is there a difference between the other two?
6 Answers
On many systems, ll
is an alias of ls -l
:
$ type ll
ll is aliased to `ls -l'
They are the same.
-
4
-
5
-
7
-
3
-
1
As noted, ll
is often defined as an alias of ls -l
. In fact, ls
is often an alias itself:
$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
The actual command is ls
which above is found in /usr/bin
. ll
is intended as a convenience, but you cannot rely on it being defined on all *nix systems, so it is good to know what it is really doing.
-
Great answer. I can't help by add that this is one of the reasons why relying on
ls
in automation (especially ad-hoc one-liners) is usually a bad idea. It has several options that change its output, and many ways to specify them. With different distributions choosing different defaults, it tends to lead to headaches.– cttJun 18, 2014 at 2:30 -
I haven't seen any popular distribution to alias
ls
to anything else thanls --color=auto
. It's either that or there is no alias.– ek9Jun 18, 2014 at 7:02
Ubuntu 12.04, 14.04, 16.04, 18.04:
laike9m@laike9m1:~$ type ll
ll is aliased to `ls -alF'
-
1Also 12.04 and 16.04, but that is all I have available to test right now.– PaulNov 5, 2016 at 17:00
-
In most cases, ll
does not work in shell scripts.
-
1What happens is that typically commands like
ll
are really aliases, that aren't defined when running scripts.– vonbrandJun 18, 2014 at 7:57 -
3Some people have the alias in the .profile, and the alias is working in an interactive shell. After debugging/testing a new script, the script suddenly fails in crontab. Cron does not read the .profile.– Walter AJun 18, 2014 at 9:49
-
1This is not an answer to the question, but should be a comment instead. From my little understanding, aliases are deprecated in shell scripts. Jan 23, 2016 at 20:21
-
ll
is an alias for ls -l
.
The option -l
tells the command to use a long list format. It gives back several columns, not shown when the simple ls
command is used. These columns include:
Permissions
Number of hardlinks
File owner
File group
File size
Modification
time
Filename
ll is actually aliased to `ls -l' If you run ll, then it will show you files in the shell then you to press Enter to see the next files (more.. option). If you run ls -l, then all files will be displayed at a time.
which ll
. You will probably discover thatll
is actually an alias forls -l
.ls
any other command I put into the shell? If I typewhich ls
I getalias ls='ls --color=auto' /bin/ls
, but if I type (for example)which cd
I get/usr/bin/which: no cd in (........)
. EDIT: I tried it again withwhich mkdir
and I got/bin/mkdir
. What is the distinction between these commands that some of them are stored(?) in/usr/bin
and some are apparently not?$PATH
.ls
is very often aliased, so your shell reports the alias (which takes precedence over the binary) and the binary's actual location (in your case,/bin/ls
). Ifwhich
could not findcd
, then something appears terribly wrong.cd
is a shell builtin keyword, not a program found in a filesystem. Usetype cd
andtype ls
to see what I mean. Some commands are simply overriden by shell builtins:echo
exists in/bin/echo
, but inbash
and in fact most of modern shells, a builtinecho
function is called instead (which usually has extended features).type
actually tells you which one it is.