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

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

=over 4

=item ar

Usage: ar [optxvV] 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

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

=item basename

Usage: 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 cat  

Usage: cat [FILE ...]

Concatenates FILE(s) and prints them to the standard output.

Example:

	$ cat /proc/uptime
	110716.72 17.67

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

=item chgrp

Usage: chgrp [OPTION]... GROUP FILE...

Change the group membership of each FILE to GROUP.

Options:

	-R	change 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 chmod

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

Changes file access permissions for the specified FILE(s) (or directories).
Each MODE is defined by combining the letters for WHO has access to the file,
an OPERATOR for selecting how the permissions should be changed, and a
PERMISSION for FILE(s) (or directories).

WHO may be chosen from

	u	User who owns the file
	g	Users in the file's Group
	o	Other users not in the file's group
	a	All users

OPERATOR may be chosen from

	+	Add a permission
	-	Remove a permission
	=	Assign a permission

PERMISSION may be chosen from

	r	Read
	w	Write
	x	Execute (or access for directories)
	s	Set user (or group) ID bit
	t	Sticky bit (for directories prevents removing files by non-owners)

Alternately, permissions can be set numerically where the first three
numbers are calculated by adding the octal values, such as

	4	Read
	2	Write
	1	Execute

An optional fourth digit can also be used to specify

	4	Set user ID
	2	Set group ID
	1	Sticky bit

Options:

	-R	Change 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 chown

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

Changes 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 chroot

Usage: 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 chvt

Usage: chvt N

Changes the foreground virtual terminal to /dev/ttyN

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

=item clear

Clears the screen.

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

=item cp

Usage: cp [OPTION]... SOURCE DEST

   or: cp [OPTION]... SOURCE... DIRECTORY

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

Options:

        -a      Same as -dpR
        -d      Preserves links
        -p      Preserves file attributes if possible
        -R      Copies directories recursively

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

=item cut

Usage: 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 date

Usage: date [OPTION]... [+FORMAT]

  or:  date [OPTION] [MMDDhhmm[[CC]YY][.ss]]

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

Options:

        -R      Outputs RFC-822 compliant date string
        -s      Sets time described by STRING
        -u      Prints or sets Coordinated Universal Time

Example:

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

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

=item dc

Usage: dc expression ...

This is a Tiny RPN calculator that understands the
following operations: +, -, /, *, and, or, not, eor.
If no arguments are given, dc will process input from STDIN.

The behaviour of BusyBox/dc deviates (just a little ;-) from
GNU/dc, but this will be remedied in the future.

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 dd

Usage: dd [if=name] [of=name] [bs=n] [count=n] [skip=n] [seek=n]

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

Numbers may be suffixed by w (x2), k (x1024), b (x512), or M (x1024^2)

Example:

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

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

=item deallocvt

Usage: deallocvt N

Deallocates unused virtual terminal /dev/ttyN

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

=item df

Usage: df [filesystem ...]

Prints the filesystem space used and space available.

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 dirname

Usage: dirname NAME

Strip non-directory suffix from file name

Example:

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

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

=item dmesg

Usage: dmesg [B<-c>] [B<-n> level] [B<-s> bufsize]

Print or controls the kernel ring buffer.

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

=item dos2unix

Usage: dos2unix < dosfile > unixfile

Converts a text file from dos format to unix format.

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

=item du

Usage: du [OPTION]... [FILE]...

Summarize disk space used for each FILE and/or directory.
Disk space is printed in units of 1k (i.e. 1024 bytes).

Options:

	-l      count sizes many times if hard linked
	-s      display only a total for each argument

Example:

	$ ./BusyBox 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 dumpkmap

Usage: dumpkmap

Prints out a binary keyboard translation table to standard output.

Example:

	$ dumpkmap > keymap

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

=item dutmp

Usage: dutmp [FILE]

Dump utmp file format (pipe delimited) from FILE
or stdin to stdout.

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 echo

Usage: echo [-neE] [ARG ...]

Prints the specified ARGs to stdout

Options:

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

Example:

	$ echo "Erik is cool"
	Erik is cool
	$  echo -e "Erik\nis\ncool"
	Erik
	is
	cool
	$ echo "Erik\nis\ncool"
	Erik\nis\ncool

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

=item expr


Usage: 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 false

Returns an exit code of FALSE (1)

Example:

	$ false
	$ echo $?
	1

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

=item fbset

Usage: fbset [options] [mode]

Show and modify frame buffer device settings

Options:

	-h
	-fb
	-db
	-a
	-i
	-g
	-t
	-accel
	-hsync
	-vsync
	-laced
	-double

Example:

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

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

=item fdflush

Usage: fdflush device

Force floppy disk drive to detect disk change

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

=item find

Usage: find [PATH...] [EXPRESSION]

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


EXPRESSION may consist of:

	-follow			Dereference symbolic links.
	-name PATTERN	File name (leading directories removed) matches PATTERN.
	-print			print the full file name followed by a newline to stdout.

Example:

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

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

=item free

Usage: 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 freeramdisk

Usage: freeramdisk DEVICE

Frees all memory used by the specified ramdisk.

Example:

	$ freeramdisk /dev/ram2

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

=item fsck.minix

Usage: 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 getopt

Usage: getopt [OPTIONS]...

Parse command options

Options:

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

Example:

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


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

=item grep

Usage: grep [OPTIONS]... PATTERN [FILE]...

Search for PATTERN in each FILE or standard input.

Options:

	-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

This version of grep matches full regular expressions.

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 gunzip

Usage: 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 gzip

Usage: 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 halt

Usage: halt

This command halts the system.

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

=item head

Usage: 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 hostid

Usage: hostid

Prints out a unique  32-bit  identifier  for  the  current
machine.   The  32-bit identifier is intended to be unique
among all UNIX systems in existence. 

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

=item hostname

Usage: 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 id

Print information for USERNAME or the current user

Options:

        -g      prints only the group ID
        -u      prints only the user ID
        -r      prints the real user ID instead of the effective ID (with -ug)

Example:

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

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

=item init

Usage: 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:

	# This is run first except when booting in single-user mode.
	#
	::sysinit:/etc/init.d/rcS

	# /bin/sh invocations on selected ttys
	#
	# Start an "askfirst" shell on the console (whatever that may be)
	::askfirst:-/bin/sh
	# Start an "askfirst" shell on /dev/tty2-4
	tty2::askfirst:-/bin/sh
	tty3::askfirst:-/bin/sh
	tty4::askfirst:-/bin/sh

	# /sbin/getty invocations for selected ttys
	#
	tty4::respawn:/sbin/getty 38400 tty5
	tty5::respawn:/sbin/getty 38400 tty6


	# Example of how to put a getty on a serial line (for a terminal)
	#
	#::respawn:/sbin/getty -L ttyS0 9600 vt100
	#::respawn:/sbin/getty -L ttyS1 9600 vt100
	#
	# Example how to put a getty on a modem line.
	#::respawn:/sbin/getty 57600 ttyS2

	# Stuff to do before rebooting
	::ctrlaltdel:/bin/umount -a -r
	::ctrlaltdel:/sbin/swapoff -a

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

=item insmod

Usage: 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
		-x      do not export externs

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

=item kill

Usage: 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 killall

Usage: 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 length

Usage: length STRING

Prints out the length of the specified STRING.

Example:

	$ length "Hello"
	5

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

=item ln

Usage: 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

Example:

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

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

=item loadacm

Usage: loadacm

Loads an acm from standard input.

Example:

	$ loadacm < /etc/i18n/acmname

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

=item loadfont

Usage: loadfont

Loads a console font from standard input.

Example:

	$ loadfont < /etc/i18n/fontname

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

=item loadkmap

Usage: loadkmap

Loads a binary keyboard translation table from standard input.

Example:

	$ loadkmap < /etc/i18n/lang-keymap

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

=item logger

Usage: 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 logname

Usage: logname

Print the name of the current user.

Example:

	$ logname
	root

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

=item ls

Usage: ls [B<-1acdelnpuxACFLR>] [filenames...]

Options:

	-a	do not hide entries starting with .
	-c	with  -l:  show ctime (the time of last
		modification of file status information)
	-d	list directory entries instead of contents
	-e	list both full date and full time
	-l	use a long listing format
	-n	list numeric UIDs and GIDs instead of names
	-p	append indicator (one of /=@|) to entries
	-u	with -l: show access time (the time of last
		access of the file)
	-x	list entries by lines instead of by columns
	-A	do not list implied . and ..
	-C	list entries by columns
	-F	append indicator (one of */=@|) to entries
	-R  list subdirectories recursively
	-L  list entries pointed to by symbolic links

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

=item lsmod

Usage: lsmod

Shows a list of all currently loaded kernel modules.

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

=item makedevs

Usage: 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.

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 md5sum

Usage: md5sum [OPTION] [file ...]

Print or check MD5 checksums.

Options:

	-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  busybox
	$ md5sum -c -
	6fd11e98b98a58f64ff3398d7b324003  busybox
	busybox: OK
	^D

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

=item mkdir

Usage: 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 directory exists, 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 mkfifo

Usage: 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 mkfs.minix

Usage: 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              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 mknod

Usage: 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 mkswap

Usage: 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 mktemp

Usage: 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 more

Usage: more [file ...]

More is a filter for paging through text one screenful at a time.

Example:

	$ dmesg | more

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

=item mount

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

Flags:

	-a:             Mount all file systems in fstab.
	-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 currently-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 mt

Usage: mt [B<-f> device] opcode value

Control magnetic tape drive operation

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

=item mv

Usage: mv SOURCE DEST

   or: mv SOURCE... DIRECTORY

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

Example:

	$ mv /tmp/foo /bin/bar

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

=item nc

Usage: nc [IP] [port]

Netcat opens a pipe to IP:port

Example:

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

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

=item nslookup

Usage: 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 ping

Usage: 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 poweroff

Shuts down the system, and requests that the kernel turn off power upon halting.

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

=item printf

Usage: printf format [argument...]

Formats and prints the given data in a manner similar to the C printf command.

Example:

	$ printf "Val=%d\n" 5
	Val=5

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

=item ps

Usage: 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 pwd

Prints the full filename of the current working directory.

Example:

	$ pwd
	/root

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

=item rdate

Usage: 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 reboot

Instructs the kernel to reboot the system.

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

=item renice

Usage: 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 -20 (almost nothing else ever gets to run).

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

=item reset

Usage: reset

Resets the screen.

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

=item rm

Usage: rm [OPTION]... FILE...

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

Options:

        -f              remove existing destinations, never prompt
        -r or -R        remove the contents of directories recursively

Example:

	$ rm -rf /tmp/foo

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

=item rmdir

Usage: rmdir [OPTION]... DIRECTORY...

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

Example:

	# rmdir /tmp/foo

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

=item rmmod

Usage: rmmod [OPTION]... [MODULE]...

Unloads the specified kernel modules from the kernel.

Options:

        -a      Try to remove all unused kernel modules.

Example:

	$ rmmod tulip

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

=item sed

Usage: sed [B<-n>] B<-e> script [file...]

Allowed sed scripts come in the following form:

	'ADDR [!] COMMAND'

	where address ADDR can be:
	  NUMBER    Match specified line number
	  $         Match last line
	  /REGEXP/  Match specified regexp
	  (! inverts the meaning of the match)

	and COMMAND can be:
	  s/regexp/replacement/[igp]
		 which attempt to match regexp against the pattern space
		 and if successful replaces the matched portion with replacement.

	  aTEXT
		 which appends TEXT after the pattern space

Options:

	-e      add the script to the commands to be executed
	-n      suppress automatic printing of pattern space

This version of sed matches full regular expressions.

Example:

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

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

=item setkeycodes

Usage: 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 sh

Usage: sh

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 (#!/bin/sh), 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 sleep

Usage: sleep N

Pause for N seconds.

Example:

	$ sleep 2
	[2 second delay results]

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

=item sort

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

Sorts lines of text in the specified files

Example:

	$ echo -e "e\nf\nb\nd\nc\na" | sort
	a
	b
	c
	d
	e
	f

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

=item swapoff

Usage: swapoff [OPTION] [device]

Stop swapping virtual memory pages on the given device.

Options:

        -a      Stop swapping on all swap devices

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

=item swapon

Usage: swapon [OPTION] [device]

Start swapping virtual memory pages on the given device.

Options:

        -a      Start swapping on all swap devices

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

=item sync

Usage: sync

Write all buffered filesystem blocks to disk.

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

=item syslogd

Usage: syslogd [OPTION]...

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

Options:

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

Example:

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

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

=item tail

Usage: 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:

        -n NUM          Print last NUM lines instead of first 10
        -f              Output data as the file grows.  This version
                        of 'tail -f' supports only one file at a time.

Example:

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

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

=item tar

Usage: tar -[cxtvO] [B<--exclude> File] [B<-f> tarFile] [FILE] ...

Create, extract, or list files from a tar file.  Note that
this version of tar treats hard links as separate files.

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

Informative output:

        v               verbosely list files processed

Example:

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

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

=item tee

Usage: 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 telnet

Usage: telnet host [port]

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

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

=item test, [

Usage: 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 touch

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

Update the last-modified date on (or create) the selected file[s].

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 tr

Usage: tr [-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 true

Returns an exit code of TRUE (0)

Example:

	$ true
	$ echo $?
	0

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

=item tty

Usage: 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 umount

Usage: umount [flags] filesystem|directory

Flags:

		-a:     Unmount all file systems
		-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 uname

Usage: uname [OPTION]...

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

Options:

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

Example:

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

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

=item uniq

Usage: uniq [OPTION]... [INPUT [OUTPUT]]

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

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

Example:

	$ echo -e "a\na\nb\nc\nc\na" | sort | uniq
	a
	b
	c

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

=item unix2dos

Usage: unix2dos < unixfile > dosfile

Converts a text file from unix format to dos format.

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

=item unrpm

Usage: unrpm < package.rpm | gzip B<-d> | cpio -idmuv

Extracts an rpm archive.

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

=item update

Usage: 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 uptime

Usage: uptime

Tells how long the system has been running since boot.

Example:

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

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

=item usleep

Usage: usleep N

Pauses for N microseconds.

Example:

	$ usleep 1000000
	[pauses for 1 second]

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

=item uuencode

Usage: uuencode [OPTION] [INFILE] REMOTEFILE

Uuencode a file.

Options:

	-m      use base64 encoding as of RFC1521

Example:

	$ uuencode busybox busybox
	begin 755 busybox
	M?T5,1@$!`0````````````(``P`!````L+@$"#0```!0N@,``````#0`(``&
	.....
	$ uudecode busybox busybox > busybox.uu
	$

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

=item uudecode

Usage: uudecode [OPTION] [FILE]

Uudecode a uuencoded file

Options:

	-o FILE  direct output to FILE

Example:

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

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

=item wc

Usage: 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 which

Usage: which [COMMAND ...]

Locates a COMMAND.

Example:

	$ which login
	/bin/login

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

=item whoami

Usage: whoami

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

Example:

	$ whoami
	andersen

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

=item xargs

Usage: xargs [OPTIONS] [COMMAND] [ARGS...]

Executes COMMAND on every item given by standard input.

Options:

		-t      Print the command just before it is run
 
Example:

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

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

=item yes

Usage: yes [OPTION]... [STRING]...

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

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

=item zcat

This is essentially an alias for invoking "gunzip B<-c>", where 
it decompresses the file in question and send the output 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.85 2001/01/02 22:54:12 kraai Exp $
