# 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
	-l	list names of files that match
	-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.

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

=back

=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>

Vladimir Oleynik <dzo@simtreas.ru>

    cmdedit, stty-port, locale, various fixes 
    and irreconcilable critic of everything not perfect.

=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.100 2001/04/10 18:17:05 andersen Exp $
