# 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<-h> option to provide a
terse runtime description of their behavior. 

=head1 COMMANDS

Currently defined functions include:

adjtimex, 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<-cefItxX>] file [argument]

Perform actions on debian packages (.debs)

Options:

	-c	List contents of filesystem tree
	-e	Extract control files to [argument] directory
	-f	Display control field name starting with [argument]
	-I	Display the control filenamed [argument]
	-t	Extract filesystem tree to stdout in tar format
	-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\nis\ncool"
	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\n" 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<-nru>] [FILE]...

Sorts lines of text in the specified files

Options:

	-u	suppress duplicate lines
	-r	sort in reverse order
	-n	sort numerics

Example:

	$ echo -e "e\nf\nb\nd\nc\na" | 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 naming 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\na\nb\nc\nc\na" | 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<-q>] [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>

John Beppu <beppu@lineo.com>

    du, head, nslookup, sort, tee, uniq (so Kraai could rewrite them ;-),
    documentation

=for html <br>

Edward Betts <edward@debian.org>

    expr, hostid, logname, tty, wc, whoami, yes
 
=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>

Larry Doolittle <ldoolitt@recycle.lbl.gov>

    various fixes, shell rewrite

=for html <br>

Karl M. Hegbloom <karlheg@debian.org>

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

=for html <br>

Sterling Huxley <sterling@europa.com>

    vi (!!!)

=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.102 2001/04/17 23:57:23 beppu Exp $
