# 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, du, dutmp, echo, false, fbset,
fdflush, find, free, freeramdisk, fsck.minix, 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, reboot, rm, rmdir, rmmod, sed,
setkeycodes, sfdisk, sh, sleep, sort, swapoff, swapon, sync, syslogd, tail,
tar, tee, telnet, test, touch, tr, true, tty, umount, uname, uniq, update,
uptime, usleep, uudecode, uuencode, wc, which, 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
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 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 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 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 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 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 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

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

		Unrecognized 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 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 '-', 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 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 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 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 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 telnet

Usage: telnet host [port]

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

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

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

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 <proski@gnu.org>

=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.51 2000/06/21 22:53:24 andersen Exp $
