# 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, 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 input.

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 echo


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

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-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)
	#
	#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
	::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 '-', 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 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 messages to HOST on PORT (default=514) over UDP.

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

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

Mark Whitley <markw@lineo.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.70 2000/09/21 02:06:35 andersen Exp $
