# 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

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

	tty2::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, and ctrlaltdel.

		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 immediately before init causes the system to reboot
			(unmounting filesystems with a 'ctrlaltdel' action is a very good
			idea).

		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:/bin/umount -a -r
	::ctrlaltdel:/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.92 2001/03/15 21:20:25 markw Exp $
