≡ Menu

Linux: What is Dash ( /bin/dash ) Shell?

What is /bin/dash? I noticed that the default system shell /bin/sh was changed to /bin/dash. Why was this change made?

Dash is an acronym for Debian Almquist shell (dash). It is a Unix and Linux shell which is much smaller than bash but still aiming at POSIX-compliancy. dash is a POSIX-compliant implementation of /bin/sh that aims to be as small as possible. dash is a direct descendant of the NetBSD version of ash (the Almquist SHell), ported to Linux in early 1997. It was renamed to dash in 2002.

From the dash man page:

dash is the standard command interpreter for the Linux system. The current version of dash is in the process of being changed to conform with the POSIX 1003.2 and 1003.2a specifications for the shell. This version has many features which make it appear similar in some respects to the Korn shell, but it is not a Korn shell clone. Only features designated by POSIX, plus a few Berkeley extensions, are being incorporated into this shell.

Starting with DebianSqueeze and Ubuntu 6.10, the default shell will be dash. The default system shell, /bin/sh, was changed to /bin/dash due to the following technical reasons:

  1. To speed up the system boot time. The reason is that dash starts faster than bash, and the shell is started quite a lot of times during boot. Measurements showed that they run equally fast, so the improved boot time must be due to dash doing less work during initialization.
  2. It requires less disk space but is also less feature-rich.
  3. It depends on fewer libraries.
  4. It is believed to be more reliable in the case of upgrade problems or disk failures.

A Note About Bash Specific Scripts

It is recommend that to avoid errors with your own Bash-specific scripts you can use the shebang line as follows:
#!/usr/bin/env bash.
However, Ubuntu wiki recommends that:

Developers of shell scripts adhere to the POSIX standard, omitting those items flagged as XSI extensions. Doing so will improve portability to a variety of Unix systems, and will provide assurance that problems you encounter will be treated as bugs rather than as undocumented features.

Test all your scripts and see if they will break once /bin/sh defaults to /bin/dash using virtualization or test machine.


Share this tutorial on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:

{ 4 comments… add one }
  • JackS May 30, 2011, 6:28 am


    you can use checkbashisms to spot if your scripts can work under dash.


    or. under debian/ubuntu aptitude install devscripts

  • Change for the Sake of Change June 6, 2011, 6:20 pm

    Anybody else getting tired of Ubuntu making radical changes to the OS with each release? Changes to the desktop is one thing but internals like the system shell, init scripts, inittab, and the list goes on.. seem to me like change for the sake of change. Having the system boot a couple seconds faster holds absolutely no value to me in light of the fact that I pay the price of no longer having easy access to bash and also having to re-evaluate all my scripts now. So what’s next? Maybe eliminating the whole /etc directory? I’m sure that has to be on the list somewhere.

  • Anthony Thyssen June 9, 2011, 1:35 pm

    Dash being used to speed up the system scripts is fine. But as a user you can specif some other shell as the shell to use.

    However on point that dash does loose compliance in is that it only allows 1 digit file descriptors! That is you can not open a file descriptor numbered 10 or above.

    For example this fails, and it is POSIX compliant.
    $ exec 10>log_file
    exec: 1: 10: not found

    • Timothy Danielson August 8, 2014, 9:07 pm

      I am new to Linux and to Debian… so I honestly didn;t understand what you said and am thibking “Huh?” and “What did he Mean?”

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">

   Tagged with: , , , , , , , , , , , , , , , , ,