Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

There is a command l available on my machine which appears to do nothing. which l also produces no output. Is this a real command, and does it actually do anything?

share|improve this question
up vote 13 down vote accepted

l is an alias for ls -CF, which behaves differently from plain ls.


-C makes ls print output in column form. When stdout is a terminal (rather than being redirected to a file or non-terminal device, or piped to another command), -C is implied. So running ls -C is the same as running ls. But they are not equivalent when ls is redirected or piped. For example:

ek@Kip:~/firefox$ ls
application.ini             libfreebl3.chk
chrome                mozilla-xremote-client
chrome.manifest     omni.ja
components               platform.ini
crashreporter             plugin-container


ek@Kip:~/firefox$ ls | less



In contrast, ls -C (or -l) outputs in column form regardless of what kind of device stdout is. ls -C | less looks like the top output (but paged by less, of course).


The main visible difference between ls and l is due to the -F flag, which causes ls to append symbolic suffixes (called indicators) to the entries it displays. These indicators identify what kind of file or directory they are.

Compare this to the output of the first ls command above:

ek@Kip:~/firefox$ ls -F
application.ini             libfreebl3.chk*
blocklist.xml     **
chrome/           *    mozilla-xremote-client*
chrome.manifest   *  omni.ja
components/       *       platform.ini
crashreporter*    *        plugin-container*



  • / means the entry is a directory.
  • * means the entry is not a normal file but is executable (i.e., has executable permissions).

There are several other indicators:

The --classify flag and --indicator-style=classify are equivalent to -F.

Source: GNU Coreutils manual, Section 10.1.5 General output formatting

In conclusion, l (ls -CF) is similar to but not the same as ls.

It's also good to keep in mind:

The same text can be both a regular command and an alias.

This is commonly used to specify options that are widely considered both highly useful and harmless, such as automatic colorization (where color is applied when stdout is unredirected or is a terminal, so the escape codes specifying colors are virtually guaranteed not to be misinterpreted).

By this principle, ls is itself an alias.

ek@Kip:/$ alias ls
alias ls='ls --color=auto'

So what command really gets executed when you run l? This one:

/bin/ls --color=auto -CF
  1. The shell (bash) resolves commands that don't contain a / to the first match appearing in PATH, which in Ubuntu for ls is /bin/ls.
  2. Aliases can contain aliases. Alias resolution is not recursive (an alias cannot call itself, though it can call a regular command that has the same name). But it does support nesting.

So l resolves to ls -CF which resolves to ls --color=auto -CF.

Aliases can be changed.

These aliases exist because they're set up that way by default, but every user can change their aliases. See man alias, Chapter 25 and Appendix M in the Advanced Bash-Scripting Guide, and How save my "alias" entries forever.

Related: Color Meanings in Terminal

share|improve this answer
Great answer! :) – waldyrious Mar 18 '13 at 12:45

Actually both ls and l are equal

raja@badfox:~/Pictures$ l
Screenshot from 2012-09-22 19:37:03.png
Screenshot from 2012-09-22 19:37:11.png
Screenshot from 2012-09-22 19:37:12.png
raja@badfox:~/Pictures$ ls
Screenshot from 2012-09-22 19:37:03.png
Screenshot from 2012-09-22 19:37:11.png
Screenshot from 2012-09-22 19:37:12.png

why means there is a in-built system alias causing for this . if you want to see , open your terminal and type alias then you will get output like this

raja@badfox:~/Pictures$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias lock='gnome-screensaver-command -l'
alias ls='ls --color=auto'
alias sms='php .sms.php'
share|improve this answer
Mystery solved :) – Alison Sep 24 '12 at 6:23
@Alison l and plain ls are not the same--they just happened to produce the same output for those particular files, since none were directories, executable, symlinks, or device nodes (and standard output was a terminal). – Eliah Kagan Feb 3 '13 at 12:58

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.