What exactly is Busybox / Ash?

Really, what is busybox and ash?

I have never seen a good explaination to what it is.

I've used it and i know its a Linux shell, but I would like to get a real understanding of it.

2 Answers

Ash is a simple unix shell, as compared to bash, which is the more typical fully featured shell preferred on Linux systems.

Busybox is a program that implements an ash like shell, as well as a number of other common unix programs, though in a stripped down version, all in a single program. It is intended to provide a semi-typical unix like environment in a very space limited environment, hence, why it implements many ( stripped down ) programs as single program, and then has the separate program commands symlinked to the busybox binary, which figures out which program it is supposed to emulate and does its best to behave in a similar way to the fully featured program that it is replacing.

Busybox was originally developed for use in very space limited environments such as a single floppy boot disk, and continues to see use today in space limited environments like embedded systems such as dd-wrt.

Let me expound upon @psusi's answer.

@psusi said (emphasis added):

Busybox is a program that implements an ash like shell, as well as a number of other common unix programs, though in a stripped down version, all in a single program...hence, why it implements many ( stripped down ) programs as single program, and then has the separate program commands symlinked to the busybox binary, which figures out which program it is supposed to emulate and does its best to behave in a similar way to the fully featured program that it is replacing.

Check this out. This is interesting, and confirms what is said in the quote above.

Here is a snippet from the beginning of the output from ls -alF /bin on an embedded Linux device. As you can see, nearly all the executables in /bin are actually symlinks to /bin/busybox (and can be called with /bin/busybox <cmd>, by the way):

/bin# ls -alF /bin
total 1184
drwxr-xr-x 2 root root 4096 Nov 11 2021 ./
drwxr-xr-x 22 root root 4096 Nov 11 2021 ../
lrwxrwxrwx 1 root root 7 Nov 11 2021 arch -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 ash -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 base64 -> busybox*
-rwsr-xr-x 1 root root 709792 Nov 11 2021 busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 cat -> busybox*
-rwxr-xr-x 1 root root 10288 Nov 11 2021 chattr*
lrwxrwxrwx 1 root root 7 Nov 11 2021 chgrp -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 chmod -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 chown -> busybox*
-rwxr-xr-x 1 root root 1342 Nov 11 2021 compile_et*
lrwxrwxrwx 1 root root 7 Nov 11 2021 cp -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 cpio -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 date -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 dd -> busybox*
lrwxrwxrwx 1 root root 7 Nov 11 2021 df -> busybox*

So, if you run ash, which ash shows that the ash executable is located at /bin/ash, and ls -alF /bin/ash shows that that executable is a symlink to busybox. Notice /bin/ash -> busybox*, where the * at the end is due to the ls -F flag and means "executable":

/bin# la -alF /bin/ash
lrwxrwxrwx 1 root root 7 Nov 11 2021 /bin/ash -> busybox*

So, running ash is the same as running /bin/ash which is the same as running busybox ash which is the same as running /bin/busybox ash.

Once I run any of those ash or busybox ash cmds I can see that the output of echo $0 has changed from -sh to ash, meaning I am now running the ash shell inside the default -sh shell. exit will bring me back out of the ash shell and back into the -sh shell.

To see all the programs busybox can run, simply type busybox or busybox --help and it will spit out a big list of all of the programs compiled into its binary. Or, use busybox --list to see them all on a separate line. Run them as:

busybox program_name args

Anyway, busybox is a popular program for small embedded Linux devices where Linux is a custom build using build tools such as Buildroot or Yocto, the two main ones. And, apparently ash is a lightweight rewrite of bash and is available as a command within part of the main busybox binary.

See also:

  1. What do the symbols like =, * and | in the output of "ls -F" mean?

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like