# 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 fileutils, shellutils, findutils, textutils, grep, gzip,
tar, etc.  BusyBox provides a fairly complete POSIX environment for any small
or embedded system.  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 a kernel, a shell (such as ash),
and an editor (such as elvis-tiny or ae).

=head1 USAGE

When you create a link to BusyBox for the function you wish to use, when BusyBox
is called using that link it will behave as if the command itself has been invoked.

For example, entering

	ln -s ./BusyBox ls
	./ls

will cause BusyBox to behave as 'ls' (if the 'ls' command has been compiled
into BusyBox). 

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

	./BusyBox ls

will also cause BusyBox to behave as 'ls'. 

=head1 COMMON OPTIONS

Most BusyBox commands support the B<--help> option to provide a
terse runtime description of their behavior. 

=head1 COMMANDS

Currently defined functions include:

ar, basename, busybox, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp, cp,
cut, date, dc, dd, deallocvt, df, dirname, dmesg, dos2unix, dpkg, dpkg-deb, du,
dumpkmap, dutmp, echo, expr, false, fbset, fdflush, find, free, freeramdisk,
fsck.minix, getopt, grep, gunzip, gzip, halt, head, hostid, hostname, id,
ifconfig, init, insmod, kill, killall, klogd, length, ln, loadacm, loadfont,
loadkmap, logger, logname, ls, lsmod, makedevs, md5sum, mkdir, mkfifo,
mkfs.minix, mknod, mkswap, mktemp, more, mount, mt, mv, nc, nslookup, ping,
pivot_root, poweroff, printf, ps, pwd, rdate, readlink, reboot, renice, reset,
rm, rmdir, rmmod, route, rpmunpack, sed, setkeycodes, sh, sleep, sort, stty,
swapoff, swapon, sync, syslogd, tail, tar, tee, telnet, test, tftp, touch, tr,
true, tty, umount, uname, uniq, unix2dos, update, uptime, usleep, uudecode,
uuencode, watchdog, wc, wget, which, whoami, xargs, yes, zcat, [

=over 4

=item B<adjtimex>

adjtimex [B<-q>] [B<-o> offset] [B<-f> frequency] [B<-p> timeconstant] [B<-t> tick]

Reads and optionally sets system timebase parameters.
See adjtimex(2).

Options:

	-q		quiet mode - do not print
	-o offset	time offset, microseconds
	-f frequency	frequency adjust, integer kernel units (65536 is 1ppm)
			(positive values make the system clock run fast)
	-t tick		microseconds per tick, usually 10000
	-p timeconstant

-------------------------------

=item B<ar>

ar -[ovR]{ptx} archive filenames

Extract or list files from an ar archive.

Options:

	-o		preserve original dates
	-p		extract to stdout
	-t		list
	-x		extract
	-v		verbosely list files processed
	-R		recursive action

-------------------------------

=item B<basename>

basename FILE [SUFFIX]

Strips directory path and suffixes from FILE.
If specified, also removes any trailing SUFFIX.

Example:

	$ basename /usr/local/bin/foo
	foo
	$ basename /usr/local/bin/
	bin
	$ basename /foo/bar.txt .txt
	bar

-------------------------------

=item B<cat>

cat [FILE]...

Concatenates FILE(s) and prints them to stdout.

Example:

	$ cat /proc/uptime
	110716.72 17.67

-------------------------------

=item B<chgrp>

chgrp [OPTION]... GROUP FILE...

Change the group membership of each FILE to GROUP.

Options:

	-R	Changes files and directories recursively.

Example:

	$ ls -l /tmp/foo
	-r--r--r--    1 andersen andersen        0 Apr 12 18:25 /tmp/foo
	$ chgrp root /tmp/foo
	$ ls -l /tmp/foo
	-r--r--r--    1 andersen root            0 Apr 12 18:25 /tmp/foo

-------------------------------

=item B<chmod>

chmod [B<-R>] MODE[,MODE]... FILE...

Each MODE is one or more of the letters ugoa, one of the
symbols +-= and one or more of the letters rwxst.

Options:

	-R	Changes files and directories recursively.

Example:

	$ ls -l /tmp/foo
	-rw-rw-r--    1 root     root            0 Apr 12 18:25 /tmp/foo
	$ chmod u+x /tmp/foo
	$ ls -l /tmp/foo
	-rwxrw-r--    1 root     root            0 Apr 12 18:25 /tmp/foo*
	$ chmod 444 /tmp/foo
	$ ls -l /tmp/foo
	-r--r--r--    1 root     root            0 Apr 12 18:25 /tmp/foo

-------------------------------

=item B<chown>

chown [OPTION]...  OWNER[<.|:>[GROUP]] FILE...

Change the owner and/or group of each FILE to OWNER and/or GROUP.

Options:

	-R	Changes files and directories recursively.

Example:

	$ ls -l /tmp/foo
	-r--r--r--    1 andersen andersen        0 Apr 12 18:25 /tmp/foo
	$ chown root /tmp/foo
	$ ls -l /tmp/foo
	-r--r--r--    1 root     andersen        0 Apr 12 18:25 /tmp/foo
	$ chown root.root /tmp/foo
	ls -l /tmp/foo
	-r--r--r--    1 root     root            0 Apr 12 18:25 /tmp/foo

-------------------------------

=item B<chroot>

chroot NEWROOT [COMMAND...]

Run COMMAND with root directory set to NEWROOT.

Example:

	$ ls -l /bin/ls
	lrwxrwxrwx    1 root     root          12 Apr 13 00:46 /bin/ls -> /BusyBox
	$ mount /dev/hdc1 /mnt -t minix
	$ chroot /mnt
	$ ls -l /bin/ls
	-rwxr-xr-x    1 root     root        40816 Feb  5 07:45 /bin/ls*

-------------------------------

=item B<chvt>

chvt N

Changes the foreground virtual terminal to /dev/ttyN

-------------------------------

=item B<clear>

clear 

Clear screen.

-------------------------------

=item B<cmp>

cmp FILE1 [FILE2]

Compare files.

-------------------------------

=item B<cp>

cp [OPTION]... SOURCE DEST

Copies SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

	-a	Same as -dpR
	-d	Preserves links
	-p	Preserves file attributes if possible
	-f	force (implied; ignored) - always set
	-R	Copies directories recursively

-------------------------------

=item B<cut>

cut [OPTION]... [FILE]...

Prints selected fields from each input FILE to standard output.

Options:

	-b LIST		Output only bytes from LIST
	-c LIST		Output only characters from LIST
	-d CHAR		Use CHAR instead of tab as the field delimiter
	-s		Output only the lines containing delimiter
	-f N		Print only these fields
	-n		Ignored

Example:

	$ echo Hello world | cut -f 1 -d ' '
	Hello
	$ echo Hello world | cut -f 2 -d ' '
	world

-------------------------------

=item B<date>

date [OPTION]... [+FORMAT]

Displays the current time in the given FORMAT, or sets the system date.

Options:

	-R		Outputs RFC-822 compliant date string
	-d STRING	display time described by STRING, not `now'
	-s		Sets time described by STRING
	-u		Prints or sets Coordinated Universal Time

Example:

	$ date
	Wed Apr 12 18:52:41 MDT 2000

-------------------------------

=item B<dc>

dc expression ...

This is a Tiny RPN calculator that understands the
following operations: +, -, /, *, and, or, not, eor.
i.e. 'dc 2 2 add' -> 4, and 'dc 8 8 \* 2 2 + /' -> 16

Example:

	$ dc 2 2 +
	4
	$ dc 8 8 * 2 2 + /
	16
	$ dc 0 1 and
	0
	$ dc 0 1 or
	1
	$ echo 72 9 div 8 mul | dc
	64

-------------------------------

=item B<dd>

dd [if=FILE] [of=FILE] [bs=N] [count=N] [skip=N]
	  [seek=N] [conv=notrunc|sync]

Copy a file, converting and formatting according to options

	if=FILE		read from FILE instead of stdin
	of=FILE		write to FILE instead of stdout
	bs=N		read and write N bytes at a time
	count=N		copy only N input blocks
	skip=N		skip N input blocks
	seek=N		skip N output blocks
	conv=notrunc	don't truncate output file
	conv=sync	pad blocks with zeros

Numbers may be suffixed by c (x1), w (x2), b (x512), kD (x1000), k (x1024),
MD (x1000000), M (x1048576), GD (x1000000000) or G (x1073741824).

Example:

	$ dd if=/dev/zero of=/dev/ram1 bs=1M count=4
	4+0 records in
	4+0 records out

-------------------------------

=item B<deallocvt>

deallocvt N

Deallocate unused virtual terminal /dev/ttyN

-------------------------------

=item B<df>

df [B<-hmk>] [filesystem ...]

Print the filesystem space used and space available.

Options:

	-h	print sizes in human readable format (e.g., 1K 243M 2G )
	-m	print sizes in megabytes
	-k	print sizes in kilobytes(default) 

Example:

	$ df
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/sda3              8690864   8553540    137324  98% /
	/dev/sda1                64216     36364     27852  57% /boot
	$ df /dev/sda3
	Filesystem           1k-blocks      Used Available Use% Mounted on
	/dev/sda3              8690864   8553540    137324  98% /

-------------------------------

=item B<dirname>

dirname [FILENAME ...]

Strips non-directory suffix from FILENAME

Example:

	$ dirname /tmp/foo
	/tmp
	$ dirname /tmp/foo/
	/tmp

-------------------------------

=item B<dmesg>

dmesg [B<-c>] [B<-n> LEVEL] [B<-s> SIZE]

Prints or controls the kernel ring buffer

Options:

	-c		Clears the ring buffer's contents after printing
	-n LEVEL	Sets console logging level
	-s SIZE		Use a buffer of size SIZE

-------------------------------

=item B<dos2unix>

dos2unix [option] [file]

Converts a text file to/from dos format to unix format.

Options:

	-u	output will be in UNIX format
	-d	output will be in DOS format

- when no option is given then input format will be automaticaly detected

  and converted to the oposite format on output
- when no file is given, then stdin is used as input and stdout as output

-------------------------------

=item B<dpkg>

dpkg [B<-i>|B<-r>|-B<-unpack>|-B<-configure>] my.deb

WORK IN PROGRESS, only usefull for debian-installer

-------------------------------

=item B<dpkg_deb>

dpkg_deb [B<-cexX>] file directory

Perform actions on debian packages (.debs)

Options:

	-c	List contents of filesystem tree (verbose)
	-l	List contents of filesystem tree (.list format)
	-e	Extract control files to directory
	-x	Exctract packages filesystem tree to directory
	-X	Verbose extract

Example:

	$ dpkg-deb -X ./busybox_0.48-1_i386.deb /tmp

-------------------------------

=item B<du>

du [B<-lshmk>] [FILE]...

Summarizes disk space used for each FILE and/or directory.
Disk space is printed in units of 1024 bytes.

Options:

	-l	count sizes many times if hard linked
	-s	display only a total for each argument
	-h	print sizes in human readable format (e.g., 1K 243M 2G )
	-m	print sizes in megabytes
	-k	print sizes in kilobytes(default) 

Example:

	$ du
	16      ./CVS
	12      ./kernel-patches/CVS
	80      ./kernel-patches
	12      ./tests/CVS
	36      ./tests
	12      ./scripts/CVS
	16      ./scripts
	12      ./docs/CVS
	104     ./docs
	2417    .

-------------------------------

=item B<dumpkmap>

dumpkmap > keymap

Prints out a binary keyboard translation table to standard output.

Example:

	$ dumpkmap > keymap

-------------------------------

=item B<dutmp>

dutmp [FILE]

Dump utmp file format (pipe delimited) from FILE
or stdin to stdout.  (i.e. 'dutmp /var/run/utmp')

Example:

	$ dutmp /var/run/utmp
	8|7||si|||0|0|0|955637625|760097|0
	2|0|~|~~|reboot||0|0|0|955637625|782235|0
	1|20020|~|~~|runlevel||0|0|0|955637625|800089|0
	8|125||l4|||0|0|0|955637629|998367|0
	6|245|tty1|1|LOGIN||0|0|0|955637630|998974|0
	6|246|tty2|2|LOGIN||0|0|0|955637630|999498|0
	7|336|pts/0|vt00andersen|andersen|:0.0|0|0|0|955637763|0|0

-------------------------------

=item B<echo>

echo [B<-neE>] [ARG ...]

Prints the specified ARGs to stdout

Options:

	-n	suppress trailing newline
	-e	interpret backslash-escaped characters (i.e. \t=tab etc)
	-E	disable interpretation of backslash-escaped characters

Example:

	$ echo Erik is cool
	Erik is cool
	$  echo -e Erik
	is
	cool
	Erik
	is
	cool
	$ echo Erik
	is
	cool
	Erik
	is
	cool

-------------------------------

=item B<env>

env [-] [B<-iu>] [name=value ...] [command]

Prints the current environment or runs a program after setting
up the specified environment.

Options:

	-, -i	start with an empty environment
	-u	remove variable from the environment

-------------------------------

=item B<expr>

expr EXPRESSION

Prints the value of EXPRESSION to standard output.

EXPRESSION may be:

	ARG1 |  ARG2	ARG1 if it is neither null nor 0, otherwise ARG2
	ARG1 &  ARG2	ARG1 if neither argument is null or 0, otherwise 0
	ARG1 <  ARG2	ARG1 is less than ARG2
	ARG1 <= ARG2	ARG1 is less than or equal to ARG2
	ARG1 =  ARG2	ARG1 is equal to ARG2
	ARG1 != ARG2	ARG1 is unequal to ARG2
	ARG1 >= ARG2	ARG1 is greater than or equal to ARG2
	ARG1 >  ARG2	ARG1 is greater than ARG2
	ARG1 +  ARG2	arithmetic sum of ARG1 and ARG2
	ARG1 -  ARG2	arithmetic difference of ARG1 and ARG2
	ARG1 *  ARG2	arithmetic product of ARG1 and ARG2
	ARG1 /  ARG2	arithmetic quotient of ARG1 divided by ARG2
	ARG1 %  ARG2	arithmetic remainder of ARG1 divided by ARG2
	STRING : REGEXP             anchored pattern match of REGEXP in STRING
	match STRING REGEXP         same as STRING : REGEXP
	substr STRING POS LENGTH    substring of STRING, POS counted from 1
	index STRING CHARS          index in STRING where any CHARS is found,
	                            or 0
	length STRING               length of STRING
	quote TOKEN                 interpret TOKEN as a string, even if
	                            it is a keyword like `match' or an
	                            operator like `/'
	( EXPRESSION )              value of EXPRESSION

Beware that many operators need to be escaped or quoted for shells.
Comparisons are arithmetic if both ARGs are numbers, else
lexicographical.  Pattern matches return the string matched between 
\( and \) or null; if \( and \) are not used, they return the number 
of characters matched or 0.

-------------------------------

=item B<false>

false 

Return an exit code of FALSE (1).

Example:

	$ false
	$ echo $?
	1

-------------------------------

=item B<fbset>

fbset [options] [mode]

Show and modify frame buffer settings

Example:

	$ fbset
	mode 1024x768-76
		# D: 78.653 MHz, H: 59.949 kHz, V: 75.694 Hz
		geometry 1024 768 1024 768 16
		timings 12714 128 32 16 4 128 4
		accel false
		rgba 5/11,6/5,5/0,0/0
	endmode

-------------------------------

=item B<fdflush>

fdflush DEVICE

Forces floppy disk drive to detect disk change

-------------------------------

=item B<find>

find [PATH...] [EXPRESSION]

Search for files in a directory hierarchy.  The default PATH is
the current directory; default EXPRESSION is 'B<-print>'

EXPRESSION may consist of:

	-follow		Dereference symbolic links.
	-name PATTERN	File name (leading directories removed) matches PATTERN.	-print		Print (default and assumed).

	-type X		Filetype matches X (where X is one of: f,d,l,b,c,...)
	-perm PERMS	Permissions match any of (+NNN); all of (-NNN);
			or exactly (NNN)
	-mtime TIME	Modified time is greater than (+N); less than (-N);
			or exactly (N) days

Example:

	$ find / -name /etc/passwd
	/etc/passwd

-------------------------------

=item B<free>

free 

Displays the amount of free and used system memory

Example:

	$ free
	              total         used         free       shared      buffers
	  Mem:       257628       248724         8904        59644        93124
	 Swap:       128516         8404       120112
	Total:       386144       257128       129016
	 

-------------------------------

=item B<freeramdisk>

freeramdisk DEVICE

Frees all memory used by the specified ramdisk.

Example:

	$ freeramdisk /dev/ram2

-------------------------------

=item B<fsck_minix>

fsck_minix [B<-larvsmf>] /dev/name

Performs a consistency check for MINIX filesystems.

Options:

	-l	Lists all filenames
	-r	Perform interactive repairs
	-a	Perform automatic repairs
	-v	verbose
	-s	Outputs super-block information
	-m	Activates MINIX-like mode not cleared warnings
	-f	Force file system check.

-------------------------------

=item B<getopt>

getopt [OPTIONS]...

Parse command options

	-a, --alternative		Allow long options starting with single -
	-l, --longoptions=longopts	Long options to be recognized
	-n, --name=progname		The name under which errors are reported
	-o, --options=optstring	Short options to be recognized
	-q, --quiet			Disable error reporting by getopt(3)
	-Q, --quiet-output		No normal output
	-s, --shell=shell		Set shell quoting conventions
	-T, --test			Test for getopt(1) version
	-u, --unqote			Do not quote the output

Example:

	$ cat getopt.test
	#!/bin/sh
	GETOPT=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \
	       -n 'example.busybox' -- $@`
	if [ $? != 0 ] ; then  exit 1 ; fi
	eval set -- $GETOPT
	while true ; do
	 case $1 in
	   -a|--a-long) echo Option a ; shift ;;
	   -b|--b-long) echo Option b, argument `$2' ; shift 2 ;;
	   -c|--c-long)
	     case $2 in
	       \) echo Option c, no argument; shift 2 ;;
	       *)  echo Option c, argument `$2' ; shift 2 ;;
	     esac ;;
	   --) shift ; break ;;
	   *) echo Internal error! ; exit 1 ;;
	 esac
	done

-------------------------------

=item B<grep>

grep [B<-ihHnqvs>] pattern [files...]

Search for PATTERN in each FILE or standard input.

Options:

	-H	prefix output lines with filename where match was found
	-h	suppress the prefixing filename on output
	-i	ignore case distinctions
	-n	print line number with output lines
	-q	be quiet. Returns 0 if result was found, 1 otherwise
	-v	select non-matching lines
	-s	suppress file open/read error messages

Example:

	$ grep root /etc/passwd
	root:x:0:0:root:/root:/bin/bash
	$ grep ^[rR]oo. /etc/passwd
	root:x:0:0:root:/root:/bin/bash

-------------------------------

=item B<gunzip>

gunzip [OPTION]... FILE

Uncompress FILE (or standard input if FILE is '-').

Options:

	-c	Write output to standard output
	-t	Test compressed file integrity

Example:

	$ ls -la /tmp/BusyBox*
	-rw-rw-r--    1 andersen andersen   557009 Apr 11 10:55 /tmp/BusyBox-0.43.tar.gz
	$ gunzip /tmp/BusyBox-0.43.tar.gz
	$ ls -la /tmp/BusyBox*
	-rw-rw-r--    1 andersen andersen  1761280 Apr 14 17:47 /tmp/BusyBox-0.43.tar

-------------------------------

=item B<gzip>

gzip [OPTION]... FILE

Compress FILE with maximum compression.
When FILE is '-', reads standard input.  Implies B<-c>.

Options:

	-c	Write output to standard output instead of FILE.gz
	-d	decompress

Example:

	$ ls -la /tmp/BusyBox*
	-rw-rw-r--    1 andersen andersen  1761280 Apr 14 17:47 /tmp/BusyBox-0.43.tar
	$ gzip /tmp/BusyBox-0.43.tar
	$ ls -la /tmp/BusyBox*
	-rw-rw-r--    1 andersen andersen   554058 Apr 14 17:49 /tmp/BusyBox-0.43.tar.gz

-------------------------------

=item B<halt>

halt 

Halt the system.

-------------------------------

=item B<head>

head [OPTION] [FILE]...

Print first 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the
file name. With no FILE, or when FILE is -, read standard input.

Options:

	-n NUM		Print first NUM lines instead of first 10

Example:

	$ head -n 2 /etc/passwd
	root:x:0:0:root:/root:/bin/bash
	daemon:x:1:1:daemon:/usr/sbin:/bin/sh

-------------------------------

=item B<hostid>

hostid 

Print out a unique 32-bit identifier for the machine.

-------------------------------

=item B<hostname>

hostname [OPTION] {hostname | B<-F> file}

Get or set the hostname or DNS domain name. If a hostname is given
(or a file with the B<-F> parameter), the host name will be set.

Options:

	-s		Short
	-i		Addresses for the hostname
	-d		DNS domain name
	-F, --file FILE	Use the contents of FILE to specify the hostname

Example:

	$ hostname
	slag 

-------------------------------

=item B<id>

id [OPTIONS]... [USERNAME]

Print information for USERNAME or the current user

Options:

	-g	prints only the group ID
	-u	prints only the user ID
	-n	print a name instead of a number (with for -ug)
	-r	prints the real user ID instead of the effective ID (with -ug)

Example:

	$ id
	uid=1000(andersen) gid=1000(andersen)

-------------------------------

=item B<ifconfig>

ifconfig [B<-a>] <interface> [<address>]

configure a network interface

Options:

	[[-]broadcast [<address>]]  [[-]pointopoint [<address>]]
	[netmask <address>]  [dstaddr <address>]
	[outfill <NN>] [keepalive <NN>]
	[hw ether <address>]  [metric <NN>]  [mtu <NN>]
	[[-]trailers]  [[-]arp]  [[-]allmulti]
	[multicast]  [[-]promisc]  [txqueuelen <NN>]  [[-]dynamic]
	[mem_start <NN>]  [io_addr <NN>]  [irq <NN>]
	[up|down] ...

-------------------------------

=item B<init>

init 

Init is the parent of all processes.

This version of init is designed to be run only by the kernel.

BusyBox init doesn't support multiple runlevels.  The runlevels field of
the /etc/inittab file is completely ignored by BusyBox init. If you want 
runlevels, use sysvinit.

BusyBox init works just fine without an inittab.  If no inittab is found, 
it has the following default behavior:

	::sysinit:/etc/init.d/rcS
	::askfirst:/bin/sh
	::ctrlaltdel:/sbin/reboot
	::shutdown:/sbin/swapoff -a
	::shutdown:/bin/umount -a -r

if it detects that /dev/console is _not_ a serial console, it will also run:

	tty2::askfirst:/bin/sh
	tty3::askfirst:/bin/sh
	tty4::askfirst:/bin/sh

If you choose to use an /etc/inittab file, the inittab entry format is as follows:

	<id>:<runlevels>:<action>:<process>

	<id>: 

		WARNING: This field has a non-traditional meaning for BusyBox init!
		The id field is used by BusyBox init to specify the controlling tty for
		the specified process to run on.  The contents of this field are
		appended to /dev/ and used as-is.  There is no need for this field to
		be unique, although if it isn't you may have strange results.  If this
		field is left blank, the controlling tty is set to the console.  Also
		note that if BusyBox detects that a serial console is in use, then only
		entries whose controlling tty is either the serial console or /dev/null
		will be run.  BusyBox init does nothing with utmp.  We don't need no
		stinkin' utmp.

	<runlevels>: 

		The runlevels field is completely ignored.

	<action>: 

		Valid actions include: sysinit, respawn, askfirst, wait, 
		once, ctrlaltdel, and shutdown.

		The available actions can be classified into two groups: actions
		that are run only once, and actions that are re-run when the specified
		process exits.

		Run only-once actions:

			'sysinit' is the first item run on boot.  init waits until all
			sysinit actions are completed before continuing.  Following the
			completion of all sysinit actions, all 'wait' actions are run.
			'wait' actions, like  'sysinit' actions, cause init to wait until
			the specified task completes.  'once' actions are asyncronous,
			therefore, init does not wait for them to complete.  'ctrlaltdel'
			actions are run when the system detects that someone on the system
                       console has pressed the CTRL-ALT-DEL key combination.  Typically one
                       wants to run 'reboot' at this point to cause the system to reboot.
			Finally the 'shutdown' action specifies the actions to taken when
                       init is told to reboot.  Unmounting filesystems and disabling swap
                       is a very good here

		Run repeatedly actions:

			'respawn' actions are run after the 'once' actions.  When a process
			started with a 'respawn' action exits, init automatically restarts
			it.  Unlike sysvinit, BusyBox init does not stop processes from
			respawning out of control.  The 'askfirst' actions acts just like
			respawn, except that before running the specified process it
			displays the line Please press Enter to activate this console.
			and then waits for the user to press enter before starting the
			specified process.  

		Unrecognized actions (like initdefault) will cause init to emit an
		error message, and then go along with its business.  All actions are
		run in the reverse order from how they appear in /etc/inittab.

	<process>: 

		Specifies the process to be executed and it's command line.

Example /etc/inittab file:

	# This is run first except when booting in single-user mode.
	#
	::sysinit:/etc/init.d/rcS
	
	# /bin/sh invocations on selected ttys
	#
	# Start an askfirst shell on the console (whatever that may be)
	::askfirst:-/bin/sh
	# Start an askfirst shell on /dev/tty2-4
	tty2::askfirst:-/bin/sh
	tty3::askfirst:-/bin/sh
	tty4::askfirst:-/bin/sh
	
	# /sbin/getty invocations for selected ttys
	#
	tty4::respawn:/sbin/getty 38400 tty5
	tty5::respawn:/sbin/getty 38400 tty6
	
	
	# Example of how to put a getty on a serial line (for a terminal)
	#
	#::respawn:/sbin/getty -L ttyS0 9600 vt100
	#::respawn:/sbin/getty -L ttyS1 9600 vt100
	#
	# Example how to put a getty on a modem line.
	#::respawn:/sbin/getty 57600 ttyS2
	
	# Stuff to do before rebooting
	::ctrlaltdel:/sbin/reboot
	::shutdown:/bin/umount -a -r
	::shutdown:/sbin/swapoff -a


-------------------------------

=item B<insmod>

insmod [OPTION]... MODULE [symbol=value]...

Loads the specified kernel modules into the kernel.

Options:

	-f	Force module to load into the wrong kernel version.
	-k	Make module autoclean-able.
	-v	verbose output
	-L	Lock to prevent simultaneous loads of a module
	-x	do not export externs

-------------------------------

=item B<kill>

kill [B<-signal>] process-id [process-id ...]

Send a signal (default is SIGTERM) to the specified process(es).

Options:

	-l	List all signal names and numbers.

Example:

	$ ps | grep apache
	252 root     root     S [apache]
	263 www-data www-data S [apache]
	264 www-data www-data S [apache]
	265 www-data www-data S [apache]
	266 www-data www-data S [apache]
	267 www-data www-data S [apache]
	$ kill 252

-------------------------------

=item B<killall>

killall [B<-signal>] process-name [process-name ...]

Send a signal (default is SIGTERM) to the specified process(es).

Options:

	-l	List all signal names and numbers.

Example:

	$ killall apache
	 

-------------------------------

=item B<klogd>

klogd B<-n>

Kernel logger.
Options:

	-n	Run as a foreground process.

-------------------------------

=item B<length>

length STRING

Prints out the length of the specified STRING.

Example:

	$ length Hello
	5

-------------------------------

=item B<ln>

ln [OPTION] TARGET... LINK_NAME|DIRECTORY

Create a link named LINK_NAME or DIRECTORY to the specified TARGET

You may use '--' to indicate that all following arguments are non-options.

Options:

	-s	make symbolic links instead of hard links
	-f	remove existing destination files
	-n	no dereference symlinks - treat like normal file

Example:

	$ ln -s BusyBox /tmp/ls
	$ ls -l /tmp/ls
	lrwxrwxrwx    1 root     root            7 Apr 12 18:39 ls -> BusyBox*
	 

-------------------------------

=item B<loadacm>

loadacm < mapfile

Loads an acm from standard input.

Example:

	$ loadacm < /etc/i18n/acmname
	 

-------------------------------

=item B<loadfont>

loadfont < font

Loads a console font from standard input.

Example:

	$ loadfont < /etc/i18n/fontname
	 

-------------------------------

=item B<loadkmap>

loadkmap < keymap

Loads a binary keyboard translation table from standard input.

Example:

	$ loadkmap < /etc/i18n/lang-keymap
	 

-------------------------------

=item B<logger>

logger [OPTION]... [MESSAGE]

Write MESSAGE to the system log.  If MESSAGE is omitted, log stdin.

Options:

	-s	Log to stderr as well as the system log.
	-t	Log using the specified tag (defaults to user name).
	-p	Enter the message with the specified priority.
		This may be numerical or a ``facility.level'' pair.

Example:

	$ logger hello
	 

-------------------------------

=item B<logname>

logname 

Print the name of the current user.

Example:

	$ logname
	root
	 

-------------------------------

=item B<logread>

logread 

Shows the messages from syslogd (using circular buffer).

-------------------------------

=item B<ls>

ls [B<-1AacCdeFilnpLRrSsTtuvwxXhk>] [filenames...]

List directory contents

Options:

	-1	list files in a single column
	-A	do not list implied . and ..
	-a	do not hide entries starting with .
	-C	list entries by columns
	-c	with -l: show ctime
	-d	list directory entries instead of contents
	-e	list both full date and full time
	-F	append indicator (one of */=@|) to entries
	-i	list the i-node for each file
	-l	use a long listing format
	-n	list numeric UIDs and GIDs instead of names
	-p	append indicator (one of /=@|) to entries
	-L	list entries pointed to by symbolic links
	-R	list subdirectories recursively
	-r	sort the listing in reverse order
	-S	sort the listing by file size
	-s	list the size of each file, in blocks
	-T NUM	assume Tabstop every NUM columns
	-t	with -l: show modification time
	-u	with -l: show access time
	-v	sort the listing by version
	-w NUM	assume the terminal is NUM columns wide
	-x	list entries by lines instead of by columns
	-X	sort the listing by extension
	-h	print sizes in human readable format (e.g., 1K 243M 2G )
	-k	print sizes in kilobytes(default)  

-------------------------------

=item B<lsmod>

lsmod 

List the currently loaded kernel modules.

-------------------------------

=item B<makedevs>

makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]

Creates a range of block or character special files

TYPEs include:

	b:	Make a block (buffered) device.
	c or u:	Make a character (un-buffered) device.
	p:	Make a named pipe. MAJOR and MINOR are ignored for named pipes.

FIRST specifies the number appended to NAME to create the first device.
LAST specifies the number of the last item that should be created.
If 's' is the last argument, the base device is created as well.

For example:

	makedevs /dev/ttyS c 4 66 2 63   ->  ttyS2-ttyS63
	makedevs /dev/hda b 3 0 0 8 s    ->  hda,hda1-hda8

Example:

	$ makedevs /dev/ttyS c 4 66 2 63
	[creates ttyS2-ttyS63]
	$ makedevs /dev/hda b 3 0 0 8 s
	[creates hda,hda1-hda8]
	 

-------------------------------

=item B<md5sum>

md5sum [OPTION] [FILE]...
or: md5sum [OPTION] B<-c> [FILE]

Print or check MD5 checksums.

Options:
With no FILE, or when FILE is -, read standard input.

	-b	read files in binary mode
	-c	check MD5 sums against given list
	-t	read files in text mode (default)
	-g	read a string

The following two options are useful only when verifying checksums:

	-s	don't output anything, status code shows success
	-w	warn about improperly formated MD5 checksum lines

Example:

	$ md5sum < busybox
	6fd11e98b98a58f64ff3398d7b324003
	$ md5sum busybox
	6fd11e98b98a58f64ff3398d7b324003  busybox
	$ md5sum -c -
	6fd11e98b98a58f64ff3398d7b324003  busybox
	busybox: OK
	^D

-------------------------------

=item B<mkdir>

mkdir [OPTION] DIRECTORY...

Create the DIRECTORY(ies), if they do not already exist

Options:

	-m	set permission mode (as in chmod), not rwxrwxrwx - umask
	-p	no error if existing, make parent directories as needed

Example:

	$ mkdir /tmp/foo
	$ mkdir /tmp/foo
	/tmp/foo: File exists
	$ mkdir /tmp/foo/bar/baz
	/tmp/foo/bar/baz: No such file or directory
	$ mkdir -p /tmp/foo/bar/baz
	 

-------------------------------

=item B<mkfifo>

mkfifo [OPTIONS] name

Creates a named pipe (identical to 'mknod name p')

Options:

	-m	create the pipe using the specified mode (default a=rw)

-------------------------------

=item B<mkfs_minix>

mkfs_minix [B<-c> | B<-l> filename] [B<-nXX>] [B<-iXX>] /dev/name [blocks]

Make a MINIX filesystem.

Options:

	-c		Check the device for bad blocks
	-n [14|30]	Specify the maximum length of filenames
	-i INODES	Specify the number of inodes for the filesystem
	-l FILENAME	Read the bad blocks list from FILENAME
	-v		Make a Minix version 2 filesystem

-------------------------------

=item B<mknod>

mknod [OPTIONS] NAME TYPE MAJOR MINOR

Create a special file (block, character, or pipe).

Options:

	-m	create the special file using the specified mode (default a=rw)

TYPEs include:

	b:	Make a block (buffered) device.
	c or u:	Make a character (un-buffered) device.
	p:	Make a named pipe. MAJOR and MINOR are ignored for named pipes.

Example:

	$ mknod /dev/fd0 b 2 0 
	$ mknod -m 644 /tmp/pipe p
	 

-------------------------------

=item B<mkswap>

mkswap [B<-c>] [B<-v0>|B<-v1>] device [block-count]

Prepare a disk partition to be used as a swap partition.

Options:

	-c		Check for read-ability.
	-v0		Make version 0 swap [max 128 Megs].
	-v1		Make version 1 swap [big!] (default for kernels >
			2.1.117).
	block-count	Number of block to use (default is entire partition).

-------------------------------

=item B<mktemp>

mktemp [B<-q>] TEMPLATE

Creates a temporary file with its name based on TEMPLATE.
TEMPLATE is any name with six `Xs' (i.e. /tmp/temp.XXXXXX).

Example:

	$ mktemp /tmp/temp.XXXXXX
	/tmp/temp.mWiLjM
	$ ls -la /tmp/temp.mWiLjM
	-rw-------    1 andersen andersen        0 Apr 25 17:10 /tmp/temp.mWiLjM
	 

-------------------------------

=item B<more>

more [FILE ...]

More is a filter for viewing FILE one screenful at a time.

Example:

	$ dmesg | more
	 

-------------------------------

=item B<mount>

mount [flags] device directory [B<-o> options,more-options]

Mount a filesystem

Flags:

	-a:		Mount all filesystems in fstab.
	-f:		Fake Add entry to mount table but don't mount it.
	-n:		Don't write a mount table entry.
	-o option:	One of many filesystem options, listed below.
	-r:		Mount the filesystem read-only.
	-t fs-type:	Specify the filesystem type.
	-w:		Mount for reading and writing (default).

Options for use with the B<-o> flag:

	async/sync:	Writes are asynchronous / synchronous.
	atime/noatime:	Enable / disable updates to inode access times.
	dev/nodev:	Allow use of special device files / disallow them.
	exec/noexec:	Allow use of executable files / disallow them.
	loop:		Mounts a file via loop device.
	suid/nosuid:	Allow set-user-id-root programs / disallow them.
	remount:	Re-mount a mounted filesystem, changing its flags.
	ro/rw:		Mount for read-only / read-write.

There are EVEN MORE flags that are specific to each filesystem.
You'll have to see the written documentation for those.

Example:

	$ mount
	/dev/hda3 on / type minix (rw)
	proc on /proc type proc (rw)
	devpts on /dev/pts type devpts (rw)
	$ mount /dev/fd0 /mnt -t msdos -o ro
	$ mount /tmp/diskimage /opt -t ext2 -o loop
	 

-------------------------------

=item B<mt>

mt [B<-f> device] opcode value

Control magnetic tape drive operation

Available Opcodes:

bsf bsfm bsr bss datacompression drvbuffer eof eom erase
fsf fsfm fsr fss load lock mkpart nop offline ras1 ras2
ras3 reset retension rew rewoffline seek setblk setdensity
setpart tell unload unlock weof wset

-------------------------------

=item B<mv>

mv SOURCE DEST
or: mv SOURCE... DIRECTORY

Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

Example:

	$ mv /tmp/foo /bin/bar
	 

-------------------------------

=item B<nc>

nc [IP] [port] 

Netcat opens a pipe to IP:port

Example:

	$ nc foobar.somedomain.com 25
	220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600
	help
	214-Commands supported:
	214-    HELO EHLO MAIL RCPT DATA AUTH
	214     NOOP QUIT RSET HELP
	quit
	221 foobar closing connection
	 

-------------------------------

=item B<nslookup>

nslookup [HOST]

Queries the nameserver for the IP address of the given HOST

Example:

	$ nslookup localhost
	Server:     default
	Address:    default
	
	Name:       debian
	Address:    127.0.0.1
	 

-------------------------------

=item B<ping>

ping [OPTION]... host

Send ICMP ECHO_REQUEST packets to network hosts.

Options:

	-c COUNT	Send only COUNT pings.
	-s SIZE		Send SIZE data bytes in packets (default=56).
	-q		Quiet mode, only displays output at start
			and when finished.

Example:

	$ ping localhost
	PING slag (127.0.0.1): 56 data bytes
	64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=20.1 ms
	
	--- debian ping statistics ---
	1 packets transmitted, 1 packets received, 0% packet loss
	round-trip min/avg/max = 20.1/20.1/20.1 ms
	 

-------------------------------

=item B<pivot_root>

pivot_root new_root put_old

Move the current root file system to put_old and make new_root
the new root file system.

-------------------------------

=item B<poweroff>

poweroff 

Halt the system and request that the kernel shut off the power.

-------------------------------

=item B<printf>

printf FORMAT [ARGUMENT...]

Formats and prints ARGUMENT(s) according to FORMAT,
Where FORMAT controls the output exactly as in C printf.

Example:

	$ printf Val=%d
	 5
	Val=5
	 

-------------------------------

=item B<ps>

ps 

Report process status

This version of ps accepts no options.

Example:

	$ ps
	  PID  Uid      Gid State Command
	    1 root     root     S init
	    2 root     root     S [kflushd]
	    3 root     root     S [kupdate]
	    4 root     root     S [kpiod]
	    5 root     root     S [kswapd]
	  742 andersen andersen S [bash]
	  743 andersen andersen S -bash
	  745 root     root     S [getty]
	 2990 andersen andersen R ps

-------------------------------

=item B<pwd>

pwd 

Print the full filename of the current working directory.

Example:

	$ pwd
	/root

-------------------------------

=item B<rdate>

rdate [OPTION] HOST

Get and possibly set the system date and time from a remote HOST.

Options:

	-s	Set the system date and time (default).
	-p	Print the date and time.

-------------------------------

=item B<readlink>

readlink 

Read a symbolic link.

-------------------------------

=item B<reboot>

reboot 

Reboot the system.

-------------------------------

=item B<renice>

renice priority pid [pid ...]

Changes priority of running processes. Allowed priorities range
from 20 (the process runs only when nothing else is running) to 0
(default priority) to B<-20> (almost nothing else ever gets to run).

-------------------------------

=item B<reset>

reset 

Resets the screen.

-------------------------------

=item B<rm>

rm [OPTION]... FILE...

Remove (unlink) the FILE(s).  You may use '--' to
indicate that all following arguments are non-options.

Options:

	-i		always prompt before removing each destinations
	-f		remove existing destinations, never prompt
	-r or -R	remove the contents of directories recursively

Example:

	$ rm -rf /tmp/foo

-------------------------------

=item B<rmdir>

rmdir [OPTION]... DIRECTORY...

Remove the DIRECTORY(ies), if they are empty.

Example:

	# rmdir /tmp/foo

-------------------------------

=item B<rmmod>

rmmod [OPTION]... [MODULE]...

Unloads the specified kernel modules from the kernel.

Options:

	-a	Try to remove all unused kernel modules.

Example:

	$ rmmod tulip

-------------------------------

=item B<route>

route [{add|del|flush}]

Edit the kernel's routing tables

-------------------------------

=item B<rpmunpack>

rpmunpack < package.rpm | gunzip | cpio B<-idmuv>

Extracts an rpm archive.

-------------------------------

=item B<sed>

sed [B<-Vhnef>] pattern [files...]

Options:

	-n		suppress automatic printing of pattern space
	-e script	add the script to the commands to be executed
	-f scriptfile	add the contents of script-file to the commands to be executed
	-h		display this help message

If no B<-e> or B<-f> is given, the first non-option argument is taken as the
sed script to interpret. All remaining arguments are names of input
files; if no input files are specified, then the standard input is read.

Example:

	$ echo foo | sed -e 's/f[a-zA-Z]o/bar/g'
	bar

-------------------------------

=item B<setkeycodes>

setkeycodes SCANCODE KEYCODE ...

Set entries into the kernel's scancode-to-keycode map,
allowing unusual keyboards to generate usable keycodes.

SCANCODE may be either xx or e0xx (hexadecimal),
and KEYCODE is given in decimal

Example:

	$ setkeycodes e030 127

-------------------------------

=item B<sh>

sh [FILE]...
or: sh B<-c> command [args]...

lash: The BusyBox LAme SHell (command interpreter)

This command does not yet have proper documentation.

Use lash just as you would use any other shell.  It properly handles pipes,
redirects, job control, can be used as the shell for scripts, and has a
sufficient set of builtins to do what is needed.  It does not (yet) support
Bourne Shell syntax.  If you need things like if-then-else, while, and such
use ash or bash.  If you just need a very simple and extremely small shell,
this will do the job.

-------------------------------

=item B<sleep>

sleep N

Pause for N seconds.

Example:

	$ sleep 2
	[2 second delay results]

-------------------------------

=item B<sort>

sort [B<-n>] [B<-r>] [FILE]...

Sorts lines of text in the specified files

Example:

	$ echo -e e
	f
	b
	d
	c
	a | sort
	a
	b
	c
	d
	e
	f

-------------------------------

=item B<stty>

stty [B<-a>|g] [B<-F> device] [SETTING]...

Without arguments, prints baud rate, line discipline,
and deviations from stty sane.

Options:

	-F device	open device instead of stdin
	-a		print all current settings in human-readable form
	-g		print in stty-readable form
	[SETTING]	see documentation

-------------------------------

=item B<swapoff>

swapoff [OPTION] [device]

Stop swapping virtual memory pages on the given device.

Options:

	-a	Stop swapping on all swap devices

-------------------------------

=item B<swapon>

swapon [OPTION] [device]

Start swapping virtual memory pages on the given device.

Options:

	-a	Start swapping on all swap devices

-------------------------------

=item B<sync>

sync 

Write all buffered filesystem blocks to disk.

-------------------------------

=item B<syslogd>

syslogd [OPTION]...

Linux system and kernel logging utility.
Note that this version of syslogd ignores /etc/syslog.conf.

Options:

	-m NUM		Interval between MARK lines (default=20min, 0=off)
	-n		Run as a foreground process
	-O FILE		Use an alternate log file (default=/var/log/messages)
	-R HOST[:PORT]	Log to IP or hostname on PORT (default PORT=514/UDP)
	-L		Log locally and via network logging (default is network only)

Example:

	$ syslogd -R masterlog:514
	$ syslogd -R 192.168.1.1:601

-------------------------------

=item B<tail>

tail [OPTION]... [FILE]...

Print last 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the
file name. With no FILE, or when FILE is -, read standard input.

Options:

	-c N[kbm]	output the last N bytes
	-n N[kbm]	print last N lines instead of last 10
	-f		output data as the file grows
	-q		never output headers giving file names
	-s SEC		wait SEC seconds between reads with -f
	-v		always output headers giving file names

If the first character of N (bytes or lines) is a '+', output begins with 
the Nth item from the start of each file, otherwise, print the last N items
in the file. N bytes may be suffixed by k (x1024), b (x512), or m (1024^2).

Example:

	$ tail -n 1 /etc/resolv.conf
	nameserver 10.0.0.1

-------------------------------

=item B<tar>

tar -[cxtvO] [-B<-exclude> File] [B<-X> File][B<-f> tarFile] [FILE(s)] ...

Create, extract, or list files from a tar file.

Main operation mode:

	c		create
	x		extract
	t		list

File selection:

	f		name of tarfile or - for stdin
	O		extract to stdout
	exclude		file to exclude
	X		file with names to exclude

Informative output:

	v		verbosely list files processed

Example:

	$ zcat /tmp/tarball.tar.gz | tar -xf -
	$ tar -cf /tmp/tarball.tar /usr/local

-------------------------------

=item B<tee>

tee [OPTION]... [FILE]...

Copy standard input to each FILE, and also to standard output.

Options:

	-a	append to the given FILEs, do not overwrite

Example:

	$ echo Hello | tee /tmp/foo
	$ cat /tmp/foo
	Hello

-------------------------------

=item B<telnet>

telnet host [port]

Telnet is used to establish interactive communication with another
computer over a network using the TELNET protocol.

-------------------------------

=item B<test>

test EXPRESSION
  or   [ EXPRESSION ]

Checks file types and compares values returning an exit
code determined by the value of EXPRESSION.

Example:

	$ test 1 -eq 2
	$ echo $?
	1
	$ test 1 -eq 1
	$ echo $? 
	0
	$ [ -d /etc ]
	$ echo $?
	0
	$ [ -d /junk ]
	$ echo $?
	1

-------------------------------

=item B<tftp>

tftp command SOURCE DEST

Transfers a file from/to a tftp server using octet mode.

Commands:

	get	Get file from server SOURCE and store to local DEST.
	put	Put local file SOURCE to server DEST.

When nameing a server, use the syntax server:file.

-------------------------------

=item B<touch>

touch [B<-c>] file [file ...]

Update the last-modified date on the given file[s].

Options:

	-c	Do not create any files

Example:

	$ ls -l /tmp/foo
	/bin/ls: /tmp/foo: No such file or directory
	$ touch /tmp/foo
	$ ls -l /tmp/foo
	-rw-rw-r--    1 andersen andersen        0 Apr 15 01:11 /tmp/foo
	 

-------------------------------

=item B<tr>

tr [B<-cds>] STRING1 [STRING2]

Translate, squeeze, and/or delete characters from
standard input, writing to standard output.

Options:

	-c	take complement of STRING1
	-d	delete input characters coded STRING1
	-s	squeeze multiple output characters of STRING2 into one character

Example:

	$ echo gdkkn vnqkc | tr [a-y] [b-z]
	hello world
	 

-------------------------------

=item B<true>

true 

Return an exit code of TRUE (0).

Example:

	$ true
	$ echo $?
	0

-------------------------------

=item B<tty>

tty 

Print the file name of the terminal connected to standard input.

Options:

	-s	print nothing, only return an exit status

Example:

	$ tty
	/dev/tty2

-------------------------------

=item B<umount>

umount [flags] filesystem|directory

Unmount file systems

Flags:

	-a:	Unmount all file systems in /etc/mtab
	-n:	Don't erase /etc/mtab entries
	-r:	Try to remount devices as read-only if mount is busy
	-f:	Force filesystem umount (i.e. unreachable NFS server)
	-l:	Do not free loop device (if a loop device has been used)

Example:

	$ umount /dev/hdc1 

-------------------------------

=item B<uname>

uname [OPTION]...

Print certain system information.  With no OPTION, same as B<-s>.

Options:

	-a	print all information
	-m	the machine (hardware) type
	-n	print the machine's network node hostname
	-r	print the operating system release
	-s	print the operating system name
	-p	print the host processor type
	-v	print the operating system version

Example:

	$ uname -a
	Linux debian 2.2.15pre13 #5 Tue Mar 14 16:03:50 MST 2000 i686 unknown
	 

-------------------------------

=item B<uniq>

uniq [OPTION]... [INPUT [OUTPUT]]

Discard all but one of successive identical lines from INPUT
(or standard input), writing to OUTPUT (or standard output).

Options:

	-c	prefix lines by the number of occurrences
	-d	only print duplicate lines
	-u	only print unique lines

Example:

	$ echo -e a
	a
	b
	c
	c
	a | sort | uniq
	a
	b
	c

-------------------------------

=item B<unix2dos>

unix2dos [option] [file]

See 'dos2unix -B<-help>' for help!

-------------------------------

=item B<update>

update [options]

Periodically flushes filesystem buffers.

Options:

	-S	force use of sync(2) instead of flushing
	-s SECS	call sync this often (default 30)
	-f SECS	flush some buffers this often (default 5)

-------------------------------

=item B<uptime>

uptime 

Display the time since the last boot.

Example:

	$ uptime
	  1:55pm  up  2:30, load average: 0.09, 0.04, 0.00
	 

-------------------------------

=item B<usleep>

usleep N 

Pause for N microseconds.

Example:

	$ usleep 1000000
	[pauses for 1 second]

-------------------------------

=item B<uudecode>

uudecode [FILE]...

Uudecode a file that is uuencoded.

Options:

	-o FILE	direct output to FILE 

Example:

	$ uudecode -o busybox busybox.uu
	$ ls -l busybox
	-rwxr-xr-x   1 ams      ams        245264 Jun  7 21:35 busybox
	 

-------------------------------

=item B<uuencode>

uuencode [OPTION] [INFILE] REMOTEFILE

Uuencode a file.

Options:

	-m	use base64 encoding as of RFC1521

Example:

	$ uuencode busybox busybox
	begin 755 busybox
	<encoded file snipped>
	$ uudecode busybox busybox > busybox.uu
	$

-------------------------------

=item B<vi>

vi [OPTION] [FILE]...

edit FILE.

Options:

	-R	Read-only- do not write to the file. 

-------------------------------

=item B<watchdog>

watchdog DEV

Periodically write to watchdog device DEV

-------------------------------

=item B<wc>

wc [OPTION]... [FILE]...

Print line, word, and byte counts for each FILE, and a total line if
more than one FILE is specified.  With no FILE, read standard input.

Options:

	-c	print the byte counts
	-l	print the newline counts
	-L	print the length of the longest line
	-w	print the word counts

Example:

	$ wc /etc/passwd
	     31      46    1365 /etc/passwd
	 

-------------------------------

=item B<wget>

wget [B<-c>] [B<-O> file] url

wget retrieves files via HTTP or FTP

Options:

	-c	continue retrieval of aborted transfers
	-q	quiet mode - do not print
	-O	save to filename ('-' for stdout)

-------------------------------

=item B<which>

which [COMMAND ...]

Locates a COMMAND.

Example:

	$ which login
	/bin/login

-------------------------------

=item B<whoami>

whoami 

Prints the user name associated with the current effective user id.

-------------------------------

=item B<xargs>

xargs [COMMAND] [ARGS...]

Executes COMMAND on every item given by standard input.

Example:

	$ ls | xargs gzip
	$ find . -name '*.c' -print | xargs rm
	 

-------------------------------

=item B<yes>

yes [OPTION]... [STRING]...

Repeatedly outputs a line with all specified STRING(s), or 'y'.

-------------------------------

=item B<zcat>

zcat FILE

Uncompress to stdout.

-------------------------------

=head1 LIBC NSS

GNU Libc 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.  BusyBox has made it Policy that it
will never use NSS, and will never use and libc calls that make use of NSS.
This allows you to run an embedded system without the need for installing an
/etc/nsswitch.conf file and without and /lib/libnss_* libraries installed.

If you are using a system that is using a remote LDAP server for authentication
via GNU libc NSS, and you want to use BusyBox, then you will need to adjust the
BusyBox source.  Chances are though, that if you have enough space to install
of that stuff on your system, then you probably want the full GNU utilities.

=head1 SEE ALSO

textutils(1), shellutils(1), etc...

=head1 MAINTAINER

Erik Andersen <andersee@debian.org> <andersen@lineo.com>

=head1 AUTHORS

The following people have contributed code to BusyBox whether
they know it or not.


=for html <br>

Erik Andersen <andersen@lineo.com>, <andersee@debian.org>

    Tons of new stuff, major rewrite of most of the
    core apps, tons of new apps as noted in header files.

=for html <br>

Edward Betts <edward@debian.org>

    expr, hostid, logname, tty, wc, whoami, yes
 
=for html <br>

John Beppu <beppu@lineo.com>

    du, head, nslookup, sort, tee, uniq

=for html <br>

Brian Candler <B.Candler@pobox.com>

    tiny-ls(ls)

=for html <br>

Randolph Chung <tausq@debian.org>

    fbset, ping, hostname, and mkfifo

=for html <br>

Dave Cinege <dcinege@psychosis.com>	

    more(v2), makedevs, dutmp, modularization, auto links file, 
    various fixes, Linux Router Project maintenance

=for html <br>

Karl M. Hegbloom <karlheg@debian.org>

    cp_mv.c, the test suite, various fixes to utility.c, &c.

=for html <br>

Daniel Jacobowitz <dan@debian.org>

    mktemp.c

=for html <br>

Matt Kraai <kraai@alumni.carnegiemellon.edu>

    documentation, bugfixes

=for html <br>

John Lombardo <john@deltanet.com>	

    dirname, tr

=for html <br>

Glenn McGrath <bug1@netconnect.com.au>

    ar.c

=for html <br>

Bruce Perens <bruce@pixar.com>

    Original author of BusyBox. His code is still in many apps.

=for html <br>

Chip Rosenthal <chip@unicom.com>, <crosenth@covad.com>

    wget - Contributed by permission of Covad Communications

=for html <br>

Pavel Roskin <proski@gnu.org>

    Lots of bugs fixes and patches.

=for html <br>

Gyepi Sam <gyepi@praxis-sw.com>

    Remote logging feature for syslogd

=for html <br>

Linus Torvalds <torvalds@transmeta.com>

    mkswap, fsck.minix, mkfs.minix

=for html <br>

Mark Whitley <markw@lineo.com>

    sed remix, bug fixes, style-guide, etc.

=for html <br>

Charles P. Wright <cpwright@villagenet.com>

    gzip, mini-netcat(nc)

=for html <br>

Enrique Zanardi <ezanardi@ull.es>

    tarcat (since removed), loadkmap, various fixes, Debian maintenance

=cut

# $Id: busybox.pod,v 1.96 2001/04/05 21:45:54 andersen Exp $
