# 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 I<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 I<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 I<cat>

cat [FILE]...

Concatenates FILE(s) and prints them to stdout.

Example:

	$ cat /proc/uptime
	110716.72 17.67

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

=item I<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 I<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 I<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 I<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 I<chvt>

chvt N

Changes the foreground virtual terminal to /dev/ttyN

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

=item I<clear>

clear 

Clear screen.

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

=item I<cmp>

cmp FILE1 [FILE2]

Compare files.

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

=item I<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 I<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 I<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 I<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 I<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 I<deallocvt>

deallocvt N

Deallocate unused virtual terminal /dev/ttyN

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

=item I<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 I<dirname>

dirname [FILENAME ...]

Strips non-directory suffix from FILENAME

Example:

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

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

=item I<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 I<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 I<dpkg>

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

WORK IN PROGRESS, only usefull for debian-installer

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

=item I<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 I<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 I<dumpkmap>

dumpkmap > keymap

Prints out a binary keyboard translation table to standard output.

Example:

	$ dumpkmap > keymap

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

=item I<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 I<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 I<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 I<false>

false 

Return an exit code of FALSE (1).

Example:

	$ false
	$ echo $?
	1

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

=item I<fbset>

fbset [options] [mode]

Show and modify frame buffer settings

Example:

	$ fbset
	mode 1024x768-76
			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 I<fdflush>

fdflush DEVICE

Forces floppy disk drive to detect disk change

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

=item I<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.
	-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 I<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 I<freeramdisk>

freeramdisk DEVICE

Frees all memory used by the specified ramdisk.

Example:

	$ freeramdisk /dev/ram2

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

=item I<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 I<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
	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 I<grep>

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

Search for PATTERN in each FILE or standard input.

Options:

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

Example:

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

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

=item I<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 I<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 I<halt>

halt 

Halt the system.

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

=item I<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 I<hostid>

hostid 

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

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

=item I<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 I<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 I<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 I<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:

	::sysinit:/etc/init.d/rcS
	
	::askfirst:-/bin/sh
	tty2::askfirst:-/bin/sh
	tty3::askfirst:-/bin/sh
	tty4::askfirst:-/bin/sh
	
	tty4::respawn:/sbin/getty 38400 tty5
	tty5::respawn:/sbin/getty 38400 tty6
	
	::ctrlaltdel:/sbin/reboot
	::shutdown:/bin/umount -a -r
	::shutdown:/sbin/swapoff -a


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

=item I<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 I<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 I<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 I<klogd>

klogd B<-n>

Kernel logger.
Options:

	-n	Run as a foreground process.

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

=item I<length>

length STRING

Prints out the length of the specified STRING.

Example:

	$ length Hello
	5

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

=item I<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 I<loadacm>

loadacm < mapfile

Loads an acm from standard input.

Example:

	$ loadacm < /etc/i18n/acmname
	 

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

=item I<loadfont>

loadfont < font

Loads a console font from standard input.

Example:

	$ loadfont < /etc/i18n/fontname
	 

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

=item I<loadkmap>

loadkmap < keymap

Loads a binary keyboard translation table from standard input.

Example:

	$ loadkmap < /etc/i18n/lang-keymap
	 

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

=item I<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 I<logname>

logname 

Print the name of the current user.

Example:

	$ logname
	root
	 

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

=item I<logread>

logread 

Shows the messages from syslogd (using circular buffer).

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

=item I<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 I<lsmod>

lsmod 

List the currently loaded kernel modules.

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

=item I<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 I<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 I<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 I<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 I<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 I<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 I<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 I<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 I<more>

more [FILE ...]

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

Example:

	$ dmesg | more
	 

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

=item I<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 I<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 I<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 I<nc>

nc [IP] [port] 

Netcat opens a pipe to IP:port

Example:

	$ nc foobar.somedomain.com 25
	220 foobar ESMTP Exim 3.12 help
	214-Commands supported:
	214-    HELO EHLO MAIL RCPT DATA AUTH
	214     NOOP QUIT RSET HELP
	quit
	221 foobar closing connection
	 

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

=item I<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 I<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 I<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 I<poweroff>

poweroff 

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

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

=item I<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 I<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 I<pwd>

pwd 

Print the full filename of the current working directory.

Example:

	$ pwd
	/root

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

=item I<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 I<readlink>

readlink 

Read a symbolic link.

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

=item I<reboot>

reboot 

Reboot the system.

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

=item I<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 I<reset>

reset 

Resets the screen.

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

=item I<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 I<rmdir>

rmdir [OPTION]... DIRECTORY...

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

Example:



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

=item I<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 I<route>

route [{add|del|flush}]

Edit the kernel's routing tables

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

=item I<rpmunpack>

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

Extracts an rpm archive.

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

=item I<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 I<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 I<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 I<sleep>

sleep N

Pause for N seconds.

Example:

	$ sleep 2
	[2 second delay results]

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

=item I<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 I<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 I<swapoff>

swapoff [OPTION] [device]

Stop swapping virtual memory pages on the given device.

Options:

	-a	Stop swapping on all swap devices

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

=item I<swapon>

swapon [OPTION] [device]

Start swapping virtual memory pages on the given device.

Options:

	-a	Start swapping on all swap devices

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

=item I<sync>

sync 

Write all buffered filesystem blocks to disk.

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

=item I<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 I<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 I<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 I<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 I<telnet>

telnet host [port]

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

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

=item I<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 I<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 I<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 I<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 I<true>

true 

Return an exit code of TRUE (0).

Example:

	$ true
	$ echo $?
	0

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

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

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

=item I<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 I<unix2dos>

unix2dos [option] [file]

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

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

=item I<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 I<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 I<usleep>

usleep N 

Pause for N microseconds.

Example:

	$ usleep 1000000
	[pauses for 1 second]

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

=item I<uudecode>

uudecode [FILE]...

Uudecode a file that is uuencoded.

Options:

	-o FILE	direct output to FILE$ uudecode -o busybox busybox.uu
$ ls B<-l> busybox
B<-rwxr>-xr-x   1 ams      ams        245264 Jun  7 21:35 busybox
 

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

=item I<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 I<watchdog>

watchdog DEV

Periodically write to watchdog device DEV

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

=item I<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 I<wget>

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

wget retrieves files via HTTP

Options:

	-c	continue retrieval of aborted transfers
	-O	save to filename ('-' for stdout)

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

=item I<which>

which [COMMAND ...]

Locates a COMMAND.

Example:

	$ which login
	/bin/login

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

=item I<whoami>

whoami 

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

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

=item I<xargs>

xargs [COMMAND] [ARGS...]

Executes COMMAND on every item given by standard input.

Example:

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

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

=item I<yes>

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

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

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

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

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.93 2001/04/03 18:01:51 andersen Exp $
