# vi: set sw=4 ts=4:

=head1 NAME

BusyBox - The Swiss Army Knife of Embedded Linux

=head1 SYNTAX

 BusyBox <function> [arguments...]  # or

 <function> [arguments...]	    # if symlinked

=head1 DESCRIPTION

BusyBox combines tiny versions of many common UNIX utilities into a single
small executable. It provides minimalist replacements for most of the utilities
you usually find in GNU coreutils, util-linux, etc. The utilities in BusyBox
generally have fewer options than their full-featured GNU cousins; however, the
options that are included provide the expected functionality and behave very
much like their GNU counterparts.

BusyBox has been written with size-optimization and limited resources in mind.
It is also extremely modular so you can easily include or exclude commands (or
features) at compile time. This makes it easy to customize your embedded
systems. To create a working system, just add /dev, /etc, and a Linux kernel.
BusyBox provides a fairly complete POSIX environment for any small or embedded
system.

BusyBox is extremely configurable.  This allows you to include only the
components you need, thereby reducing binary size. Run 'make config' or 'make
menuconfig' to select the functionality that you wish to enable.  The run
'make' to compile BusyBox using your configuration.

After the compile has finished, you should use 'make install' to install
BusyBox.  This will install the '/bin/busybox' binary, and will also create
symlinks pointing to the '/bin/busybox' binary for each utility that you
compile into BusyBox.  By default, 'make install' will place these symlinks
into the './_install' directory, unless you have defined 'PREFIX', thereby
specifying some alternative location (i.e., 'make PREFIX=/tmp/foo install').
If you wish to install using hardlinks, rather than the default of using
symlinks, you can use 'make PREFIX=/tmp/foo install-hardlinks' instead.

=head1 USAGE

BusyBox is a multi-call binary.  A multi-call binary is an executable program
that performs the same job as more than one utility program.  That means there
is just a single BusyBox binary, but that single binary acts like a large
number of utilities.  This allows BusyBox to be smaller since all the built-in
utility programs (we call them applets) can share code for many common operations.

You can also invoke BusyBox by issuing a command as an argument on the
command line.  For example, entering

	/bin/busybox ls

will also cause BusyBox to behave as 'ls'.

Of course, adding '/bin/busybox' into every command would be painful.  So most
people will invoke BusyBox using links to the BusyBox binary.

For example, entering

	ln -s /bin/busybox ls
	./ls

will cause BusyBox to behave as 'ls' (if the 'ls' command has been compiled
into BusyBox).  Generally speaking, you should never need to make all these
links yourself, as the BusyBox build system will do this for you when you run
the 'make install' command.

If you invoke BusyBox with no arguments, it will provide you with a list of the
applets that have been compiled into your BusyBox binary.

=head1 COMMON OPTIONS

Most BusyBox commands support the B<--help> argument to provide a terse runtime
description of their behavior.  If the CONFIG_FEATURE_VERBOSE_USAGE option has
been enabled, more detailed usage information will also be available.

=head1 COMMANDS

Currently defined functions include:

	addgroup, adduser, adjtimex, ar, arping, ash, awk, basename, bunzip2,
	busybox, bzcat, cal, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp,
	cp, cpio, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser,
	devfsd, df, dirname, dmesg, dos2unix, dpkg, dpkg-deb, du, dumpkmap,
	dumpleases, echo, egrep, env, expr, false, fbset, fdflush, fdformat, fdisk,
	fgrep, find, fold, free, freeramdisk, fsck.minix, ftpget, ftpput, getopt,
	getty, grep, gunzip, gzip, halt, hdparm, head, hexdump, hostid, hostname,
	httpd, hush, hwclock, id, ifconfig, ifdown, ifup, inetd, init, insmod,
	install, ip, ipcalc, iplink, iproute, iptunnel, kill, killall, klogd, lash,
	last, length, linuxrc, ln, loadfont, loadkmap, logger, login, logname,
	logread, losetup, ls, lsmod, makedevs, md5sum, mesg, mkdir, mkfifo,
	mkfs.minix, mknod, mkswap, mktemp, modprobe, more, mount, msh, mt, mv,
	nameif, nc, netstat, nslookup, od, openvt, passwd, patch, pidof, ping,
	ping6, pipe_progress, pivot_root, poweroff, printf, ps, pwd, rdate,
	readlink, realpath, reboot, renice, reset, rm, rmdir, rmmod, route, rpm,
	rpm2cpio, run-parts, rx, sed, seq, setkeycodes, sha1sum, sleep, sort,
	start-stop-daemon, strings, stty, su, sulogin, swapoff, swapon, sync,
	sysctl, syslogd, tail, tar, tee, telnet, telnetd, test, tftp, time, top,
	touch, tr, traceroute, true, tty, udhcpc, udhcpd, umount, uname,
	uncompress, uniq, unix2dos, unzip, uptime, usleep, uudecode, uuencode,
	vconfig, vi, vlock, watch, watchdog, wc, wget, which, who, whoami, xargs,
	yes, zcat

=head1 LIBC NSS

GNU Libc (glibc) uses the Name Service Switch (NSS) to configure the behavior
of the C library for the local environment, and to configure how it reads
system data, such as passwords and group information.  This is implemented
using an /etc/nsswitch.conf configuration file, and using one or more of the
/lib/libnss_* libraries.  BusyBox tries to avoid using any libc calls that make
use of NSS.  Some applets however, such as login and su, will use libc functions
that require NSS.

If you enable CONFIG_USE_BB_PWD_GRP, BusyBox will use internal functions to
directly access the /etc/passwd, /etc/group, and /etc/shadow files without
using NSS.  This may allow you to run your system without the need for
installing any of the NSS configuration files and libraries.

When used with glibc, the BusyBox 'networking' applets will similarly require
that you install at least some of the glibc NSS stuff (in particular,
/etc/nsswitch.conf, /lib/libnss_dns*, /lib/libnss_files*, and /lib/libresolv*).

Shameless Plug: As an alternative, one could use a C library such as uClibc.  In
addition to making your system significantly smaller, uClibc does not require the
use of any NSS support files or libraries.

=over 4


