# 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 provides a fairly complete POSIX
environment for any small or embedded system.

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 is extremely configurable.  This allows you to include only the
components you need, thereby reducing binary size. Run 'make config' or 'make
menuconfig' for 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 the 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, df, dirname, dmesg, dos2unix, dpkg, dpkg-deb, du, dumpkmap,
	dumpleases, dutmp, echo, egrep, env, expr, false, fbset, fdflush,
	fdformat, 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, ip, ipcalc, iplink, iproute, iptunnel, kill,
	killall, klogd, lash, length, linuxrc, ln, loadfont, loadkmap, logger,
	login, logname, logread, losetup, ls, lsmod, makedevs, md5sum, mesg,
	minit, mkdir, mkfifo, mkfs.minix, mknod, mkswap, mktemp, modprobe,
	more, mount, msh, msvc, mt, mv, nameif, nc, netstat, nslookup, od,
	openvt, passwd, patch, pidfilehack, pidof, ping, ping6, pivot_root,
	poweroff, printf, ps, pwd, rdate, readlink, realpath, reboot, renice,
	reset, rm, rmdir, rmmod, route, rpm, rpm2cpio, run-parts, sed,
	setkeycodes, sha1sum, sleep, sort, start-stop-daemon, strings, stty,
	su, sulogin, swapoff, swapon, sync, 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, such as login and su, will use libc functions that
usually 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 need or
use any NSS support files or libraries.

=over 4


