# 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 emdedded 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, clear, chvt, cp, cut, date, dd,
df, dirname, dmesg, du, dutmp, echo, false, fbset, fdflush, find, free,
freeramdisk, deallocvt, fsck.minix, grep, gunzip, gzip, halt, head, hostid,
hostname, id, init, kill, killall, length, ln, loadacm, loadfont, loadkmap,
logger, logname, ls, lsmod, makedevs, math, mkdir, mkfifo, mkfs.minix, mknod,
mkswap, mktemp, nc, more, mount, mt, mv, nslookup, ping, poweroff, printf, ps,
pwd, reboot, rm, rmdir, rmmod, sed, setkeycodes, sh, sfdisk, sleep, sort, sync,
syslogd, swapon, swapoff, tail, tar, test, tee, touch, tr, true, tty, umount,
uname, uniq, update, uptime, usleep, wc, whoami, 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
PERISSION 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	Stickey 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	Stickey 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 clear

Clears the screen.

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

=item chvt

Usage: chvt N

Changes the foreground virtual terminal to /dev/ttyN

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

=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 possable
        -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 DELIM        Use DELIM instead of tab as the field 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 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 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 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 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 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 deallocvt

Usage: deallocvt N

Deallocates unused virtual terminal /dev/ttyN

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

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

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

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 comand 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         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, it is completely ignored.  Also note that if
		BusyBox detects that a serial console is in use, then all entries
		containing non-empty id fields will _not_ 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.

		askfirst acts just like respawn, but 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.

		Unrecognised actions (like initdefault) will cause init to emit
		an error message, and then go along with its business.

	<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
	tty2::askfirst:/bin/sh

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


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

	# Stuff to do before rebooting
	::ctrlaltdel:/bin/umount -a -r > /dev/null 2>&1
	::ctrlaltdel:/sbin/swapoff -a > /dev/null 2>&1

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

=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
 
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 '-', 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<-1acdelnpuxACFR>] [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

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

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

Usage: math expression ...

This is a Tiny RPN calculator that understands the
following operations: +, -, /, *, and, or, not, eor.

Example:

	$ math 2 2 add
	4
	$ math 8 8 \* 2 2 + /
	16
	$ math 0 1 and
	0
	$ math 0 1 or
	1

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

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

Instructs the kernel to reboot the system.

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

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

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 sfdisk

Usage: sfdisk [options] device ...

device: something like /dev/hda or /dev/sda

useful options:

    -s [or --show-size]: list size of a partition
    -c [or --id]:        print or change partition Id
    -l [or --list]:      list partitions of each device
    -d [or --dump]:      idem, but in a format suitable for later input
    -i [or --increment]: number cylinders etc. from 1 instead of from 0
    -uS, -uB, -uC, -uM:  accept/report in units of sectors/blocks/cylinders/MB
    -T [or --list-types]:list the known partition types
    -D [or --DOS]:       for DOS-compatibility: waste a little space
    -R [or --re-read]:   make kernel reread partition table
    -N# :                change only the partition with number #
    -n :                 do not actually write to disk
    -O file :            save the sectors that will be overwritten to file
    -I file :            restore these sectors again
    -v [or --version]:   print version
    -? [or --help]:      print this message

dangerous options:

    -g [or --show-geometry]: print the kernel's idea of the geometry
    -x [or --show-extended]: also list extended partitions on output

                             or expect descriptors for them on input
    -L  [or --Linux]:      do not complain about things irrelevant for Linux
    -q  [or --quiet]:      suppress warning messages
    You can override the detected geometry using:
    -C# [or --cylinders #]:set the number of cylinders to use
    -H# [or --heads #]:    set the number of heads to use
    -S# [or --sectors #]:  set the number of sectors to use

You can disable all consistency checking with:

    -f  [or --force]:      do what I say, even if it is stupid

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

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

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

=item swapon

Usage: swapon [OPTION] [device]

Start swapping virtual memory pages on the given device.

Options:

        -a      Start swapping on all swap devices

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

=item swapoff

Usage: swapoff [OPTION] [device]

Stop swapping virtual memory pages on the given device.

Options:

        -a      Stop swapping on all swap devices

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

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

Example:

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

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

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

Usage: whoami

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

Example:

	$ whoami
	andersen

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

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

Erik Andersen <andersee@debian.org>

=for html <br>

John Beppu <beppu@lineo.com>

=for html <br>

Brian Candler <B.Candler@pobox.com>

=for html <br>

Randolph Chung <tausq@debian.org>

=for html <br>

Dave Cinege <dcinege@psychosis.com>	

=for html <br>

Karl M. Hegbloom <karlheg@debian.org>

=for html <br>

John Lombardo <john@deltanet.com>	

=for html <br>

Glenn McGrath <bug1@netconnect.com.au>

=for html <br>

Bruce Perens <bruce@perens.com>

=for html <br>

Pavel Roskin <pavel_roskin@geocities.com>

=for html <br>

Linus Torvalds <torvalds@transmeta.com>

=for html <br>

Charles P. Wright <cpwright@villagenet.com>

=for html <br>

Enrique Zanardi <ezanardi@ull.es>

=for html <br>

=cut

# $Id: busybox.pod,v 1.39 2000/06/07 21:19:49 proski Exp $
