summaryrefslogtreecommitdiff
path: root/release/src/router/busybox/docs
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2015-01-03 12:04:58 +0100
committerAndreas Baumann <mail@andreasbaumann.cc>2015-01-03 12:04:58 +0100
commit008d0be72b2f160382c6e880765e96b64a050c65 (patch)
tree36f48a98a3815a408e2ce1693dd182af90f80305 /release/src/router/busybox/docs
parent611becfb8726c60cb060368541ad98191d4532f5 (diff)
downloadtomato-008d0be72b2f160382c6e880765e96b64a050c65.tar.gz
tomato-008d0be72b2f160382c6e880765e96b64a050c65.tar.bz2
imported original firmware WRT54GL_v4.30.11_11_US
Diffstat (limited to 'release/src/router/busybox/docs')
-rwxr-xr-xrelease/src/router/busybox/docs/autodocifier.pl287
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/busybox-growth.ps404
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/anim.written.in.vi.gifbin0 -> 5815 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/busybox.jpegbin0 -> 9023 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/busybox2.jpgbin0 -> 8204 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/fm.mini.jpgbin0 -> 1364 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/fm.mini.pngbin0 -> 7708 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/gfx_by_gimp.gifbin0 -> 3139 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/gfx_by_gimp.pngbin0 -> 3955 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/ltbutton2.jpgbin0 -> 620 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/ltbutton2.pngbin0 -> 6799 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/sdsmall.gifbin0 -> 1860 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/sdsmall.pngbin0 -> 1593 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/images/written.in.vi.pngbin0 -> 4394 bytes
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/index.html376
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/oldnews.html465
-rw-r--r--release/src/router/busybox/docs/busybox.lineo.com/screenshot.html54
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/.cvsignore2
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/busybox-growth.ps404
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/cvs_anon.html136
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/cvs_write.html117
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/back.pngbin0 -> 322 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/busybox.jpegbin0 -> 9023 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/busybox.pngbin0 -> 34015 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/busybox1.pngbin0 -> 10913 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/busybox2.jpgbin0 -> 8204 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/busybox3.jpgbin0 -> 3292 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/dir.pngbin0 -> 309 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/donate.pngbin0 -> 807 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/fm.mini.pngbin0 -> 7708 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/gfx_by_gimp.pngbin0 -> 3955 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/ltbutton2.pngbin0 -> 6799 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/sdsmall.pngbin0 -> 1593 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/text.pngbin0 -> 307 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/images/written.in.vi.pngbin0 -> 4394 bytes
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/index.html490
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/oldnews.html824
-rw-r--r--release/src/router/busybox/docs/busybox.net/robots.txt3
-rwxr-xr-xrelease/src/router/busybox/docs/busybox.net/screenshot.html71
-rw-r--r--release/src/router/busybox/docs/busybox.pod2651
-rw-r--r--release/src/router/busybox/docs/busybox.sgml3974
-rw-r--r--release/src/router/busybox/docs/busybox_footer.pod169
-rw-r--r--release/src/router/busybox/docs/busybox_header.pod73
-rw-r--r--release/src/router/busybox/docs/contributing.txt476
-rw-r--r--release/src/router/busybox/docs/new-applet-HOWTO.txt138
-rw-r--r--release/src/router/busybox/docs/style-guide.txt680
46 files changed, 11794 insertions, 0 deletions
diff --git a/release/src/router/busybox/docs/autodocifier.pl b/release/src/router/busybox/docs/autodocifier.pl
new file mode 100755
index 00000000..5f5ad792
--- /dev/null
+++ b/release/src/router/busybox/docs/autodocifier.pl
@@ -0,0 +1,287 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Getopt::Long;
+
+# collect lines continued with a '\' into an array
+sub continuation {
+ my $fh = shift;
+ my @line;
+
+ while (<$fh>) {
+ my $s = $_;
+ $s =~ s/\\\s*$//;
+ #$s =~ s/#.*$//;
+ push @line, $s;
+ last unless (/\\\s*$/);
+ }
+ return @line;
+}
+
+# regex && eval away unwanted strings from documentation
+sub beautify {
+ my $text = shift;
+ $text =~ s/USAGE_NOT\w+\(.*?"\s*\)//sxg;
+ $text =~ s/USAGE_\w+\(\s*?(.*?)"\s*\)/$1"/sxg;
+ $text =~ s/"\s*"//sg;
+ my @line = split("\n", $text);
+ $text = join('',
+ map {
+ s/^\s*"//;
+ s/"\s*$//;
+ s/%/%%/g;
+ s/\$/\\\$/g;
+ eval qq[ sprintf(qq{$_}) ]
+ } @line
+ );
+ return $text;
+}
+
+# generate POD for an applet
+sub pod_for_usage {
+ my $name = shift;
+ my $usage = shift;
+
+ # make options bold
+ my $trivial = $usage->{trivial};
+ $trivial =~ s/(?<!\w)(-\w+)/B<$1>/sxg;
+ my @f0 =
+ map { $_ !~ /^\s/ && s/(?<!\w)(-\w+)/B<$1>/g; $_ }
+ split("\n", $usage->{full});
+
+ # add "\n" prior to certain lines to make indented
+ # lines look right
+ my @f1;
+ my $len = @f0;
+ for (my $i = 0; $i < $len; $i++) {
+ push @f1, $f0[$i];
+ if (($i+1) != $len && $f0[$i] !~ /^\s/ && $f0[$i+1] =~ /^\s/) {
+ next if ($f0[$i] =~ /^$/);
+ push(@f1, "") unless ($f0[$i+1] =~ /^\s*$/s);
+ }
+ }
+ my $full = join("\n", @f1);
+
+ # prepare notes if they exist
+ my $notes = (defined $usage->{notes})
+ ? "$usage->{notes}\n\n"
+ : "";
+
+ # prepare examples if they exist
+ my $example = (defined $usage->{example})
+ ?
+ "Example:\n\n" .
+ join ("\n",
+ map { "\t$_" }
+ split("\n", $usage->{example})) . "\n\n"
+ : "";
+
+ return
+ "=item B<$name>".
+ "\n\n" .
+ "$name $trivial".
+ "\n\n" .
+ $full .
+ "\n\n" .
+ $notes .
+ $example.
+ "-------------------------------".
+ "\n\n"
+ ;
+}
+
+# FIXME | generate SGML for an applet
+sub sgml_for_usage {
+ my $name = shift;
+ my $usage = shift;
+ return
+ "<fixme>\n".
+ " $name\n".
+ "</fixme>\n"
+ ;
+}
+
+# the keys are applet names, and
+# the values will contain hashrefs of the form:
+#
+# {
+# trivial => "...",
+# full => "...",
+# notes => "...",
+# example => "...",
+# }
+my %docs;
+
+
+# get command-line options
+
+my %opt;
+
+GetOptions(
+ \%opt,
+ "help|h",
+ "sgml|s",
+ "pod|p",
+ "verbose|v",
+);
+
+if (defined $opt{help}) {
+ print
+ "$0 [OPTION]... [FILE]...\n",
+ "\t--help\n",
+ "\t--sgml\n",
+ "\t--pod\n",
+ "\t--verbose\n",
+ ;
+ exit 1;
+}
+
+
+# collect documenation into %docs
+
+foreach (@ARGV) {
+ open(USAGE, $_) || die("$0: $_: $!");
+ my $fh = *USAGE;
+ my ($applet, $type, @line);
+ while (<$fh>) {
+ if (/^#define (\w+)_(\w+)_usage/) {
+ $applet = $1;
+ $type = $2;
+ @line = continuation($fh);
+ my $doc = $docs{$applet} ||= { };
+ my $text = join("\n", @line);
+ $doc->{$type} = beautify($text);
+ }
+ }
+}
+
+
+# generate structured documentation
+
+my $generator = \&pod_for_usage;
+if (defined $opt{sgml}) {
+ $generator = \&sgml_for_usage;
+}
+
+foreach my $applet (sort keys %docs) {
+ print $generator->($applet, $docs{$applet});
+}
+
+exit 0;
+
+__END__
+
+=head1 NAME
+
+autodocifier.pl - generate docs for busybox based on usage.h
+
+=head1 SYNOPSIS
+
+autodocifier.pl [OPTION]... [FILE]...
+
+Example:
+
+ ( cat docs/busybox_header.pod; \
+ docs/autodocifier.pl usage.h; \
+ cat docs/busybox_footer.pod ) > docs/busybox.pod
+
+=head1 DESCRIPTION
+
+The purpose of this script is to automagically generate documentation
+for busybox using its usage.h as the original source for content.
+Currently, the same content has to be duplicated in 3 places in
+slightly different formats -- F<usage.h>, F<docs/busybox.pod>, and
+F<docs/busybox.sgml>. This is tedious, so Perl has come to the rescue.
+
+This script was based on a script by Erik Andersen <andersen@lineo.com>
+which was in turn based on a script by Mark Whitley <markw@lineo.com>
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--help>
+
+This displays the help message.
+
+=item B<--pod>
+
+Generate POD (this is the default)
+
+=item B<--sgml>
+
+Generate SGML
+
+=item B<--verbose>
+
+Be verbose (not implemented)
+
+=back
+
+=head1 FORMAT
+
+The following is an example of some data this script might parse.
+
+ #define length_trivial_usage \
+ "STRING"
+ #define length_full_usage \
+ "Prints out the length of the specified STRING."
+ #define length_example_usage \
+ "$ length Hello\n" \
+ "5\n"
+
+Each entry is a cpp macro that defines a string. The macros are
+named systematically in the form:
+
+ $name_$type_usage
+
+$name is the name of the applet. $type can be "trivial", "full", "notes",
+or "example". Every documentation macro must end with "_usage".
+
+The definition of the types is as follows:
+
+=over 4
+
+=item B<trivial>
+
+This should be a brief, one-line description of parameters that
+the command expects. This will be displayed when B<-h> is issued to
+a command. I<REQUIRED>
+
+=item B<full>
+
+This should contain descriptions of each option. This will also
+be displayed along with the trivial help if BB_FEATURE_TRIVIAL_HELP
+is disabled. I<REQUIRED>
+
+=item B<notes>
+
+This is documentation that is intended to go in the POD or SGML, but
+not be printed when a B<-h> is given to a command. To see an example
+of notes being used, see init_notes_usage. I<OPTIONAL>
+
+=item B<example>
+
+This should be an example of how the command is acutally used.
+This will not be printed when a B<-h> is given to a command -- it
+is inteded only for the POD or SGML documentation. I<OPTIONAL>
+
+=back
+
+=head1 FILES
+
+F<usage.h>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2001 John BEPPU. All rights reserved. This program is
+free software; you can redistribute it and/or modify it under the same
+terms as Perl itself.
+
+=head1 AUTHOR
+
+John BEPPU <beppu@lineo.com>
+
+=cut
+
+# $Id: autodocifier.pl,v 1.1.1.4 2003/10/14 08:09:39 sparq Exp $
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/busybox-growth.ps b/release/src/router/busybox/docs/busybox.lineo.com/busybox-growth.ps
new file mode 100644
index 00000000..123f3811
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/busybox-growth.ps
@@ -0,0 +1,404 @@
+%!PS-Adobe-2.0
+%%Title: busybox-growth.ps
+%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347
+%%CreationDate: Tue Apr 10 14:03:36 2001
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 40 554 770
+%%Orientation: Landscape
+%%Pages: (atend)
+%%EndComments
+/gnudict 120 dict def
+gnudict begin
+/Color true def
+/Solid true def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -46 def
+/dl {10 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/UL { gnulinewidth mul /userlinewidth exch def } def
+/PL { stroke userlinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+end
+%%EndProlog
+%%Page: 1 1
+gnudict begin
+gsave
+50 50 translate
+0.100 0.100 scale
+90 rotate
+0 -5040 translate
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+1.000 UL
+LTb
+560 420 M
+63 0 V
+6409 0 R
+-63 0 V
+476 420 M
+(0) Rshow
+560 1056 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(100) Rshow
+560 1692 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(200) Rshow
+560 2328 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(300) Rshow
+560 2964 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(400) Rshow
+560 3600 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(500) Rshow
+560 4236 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(600) Rshow
+560 4872 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(700) Rshow
+1531 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(400) Cshow
+2825 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(600) Cshow
+4120 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(800) Cshow
+5414 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(1000) Cshow
+6708 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(1200) Cshow
+1.000 UL
+LTb
+560 420 M
+6472 0 V
+0 4452 V
+-6472 0 V
+560 420 L
+0 2646 M
+currentpoint gsave translate 90 rotate 0 0 M
+(tar.gz size \(Kb\)) Cshow
+grestore
+3796 140 M
+(time \(days since Jan 1, 1998\)) Cshow
+1.000 UL
+LT0
+696 420 M
+0 593 V
+1255 0 V
+0 15 V
+214 0 V
+0 6 V
+958 0 V
+0 1 V
+-84 0 V
+0 37 V
+168 0 V
+0 262 V
+13 0 V
+0 56 V
+91 0 V
+0 33 V
+6 0 V
+0 1 V
+19 0 V
+0 11 V
+20 0 V
+0 13 V
+32 0 V
+0 104 V
+52 0 V
+0 27 V
+65 0 V
+0 15 V
+39 0 V
+0 126 V
+174 0 V
+0 103 V
+52 0 V
+0 49 V
+175 0 V
+0 56 V
+433 0 V
+0 661 V
+415 0 V
+0 857 V
+123 0 V
+0 -291 V
+498 0 V
+0 208 V
+505 0 V
+0 66 V
+291 0 V
+0 115 V
+311 0 V
+0 449 V
+162 0 V
+0 309 V
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
+%%Pages: 1
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/anim.written.in.vi.gif b/release/src/router/busybox/docs/busybox.lineo.com/images/anim.written.in.vi.gif
new file mode 100644
index 00000000..98289d7d
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/anim.written.in.vi.gif
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/busybox.jpeg b/release/src/router/busybox/docs/busybox.lineo.com/images/busybox.jpeg
new file mode 100644
index 00000000..37edc961
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/busybox.jpeg
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/busybox2.jpg b/release/src/router/busybox/docs/busybox.lineo.com/images/busybox2.jpg
new file mode 100644
index 00000000..abf8f061
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/busybox2.jpg
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/fm.mini.jpg b/release/src/router/busybox/docs/busybox.lineo.com/images/fm.mini.jpg
new file mode 100644
index 00000000..4984fa16
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/fm.mini.jpg
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/fm.mini.png b/release/src/router/busybox/docs/busybox.lineo.com/images/fm.mini.png
new file mode 100644
index 00000000..c0883cd3
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/fm.mini.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/gfx_by_gimp.gif b/release/src/router/busybox/docs/busybox.lineo.com/images/gfx_by_gimp.gif
new file mode 100644
index 00000000..3022f857
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/gfx_by_gimp.gif
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/gfx_by_gimp.png b/release/src/router/busybox/docs/busybox.lineo.com/images/gfx_by_gimp.png
new file mode 100644
index 00000000..d5831403
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/gfx_by_gimp.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/ltbutton2.jpg b/release/src/router/busybox/docs/busybox.lineo.com/images/ltbutton2.jpg
new file mode 100644
index 00000000..b2f6140a
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/ltbutton2.jpg
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/ltbutton2.png b/release/src/router/busybox/docs/busybox.lineo.com/images/ltbutton2.png
new file mode 100644
index 00000000..556f72a6
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/ltbutton2.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/sdsmall.gif b/release/src/router/busybox/docs/busybox.lineo.com/images/sdsmall.gif
new file mode 100644
index 00000000..ea40102e
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/sdsmall.gif
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/sdsmall.png b/release/src/router/busybox/docs/busybox.lineo.com/images/sdsmall.png
new file mode 100644
index 00000000..b1024501
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/sdsmall.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/images/written.in.vi.png b/release/src/router/busybox/docs/busybox.lineo.com/images/written.in.vi.png
new file mode 100644
index 00000000..84f59bc1
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/images/written.in.vi.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/index.html b/release/src/router/busybox/docs/busybox.lineo.com/index.html
new file mode 100644
index 00000000..753b2126
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/index.html
@@ -0,0 +1,376 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+
+<HTML>
+<HEAD>
+<TITLE>BusyBox</TITLE>
+</HEAD>
+
+<body text="#000000" alink="#660000" link="#660000" bgcolor="#dee2de" vlink="#660000">
+
+<basefont face="lucida, helvetica, arial" size="3">
+
+
+<CENTER>
+ <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2>
+ <TR>
+ <td bgcolor="#000000">
+ <FONT FACE="lucida, helvetica" COLOR="#ccccc0">
+ <B>B&nbsp;u&nbsp;s&nbsp;y&nbsp;B&nbsp;o&nbsp;x</B>
+ </FONT>
+ </TD>
+ </TR>
+ </TABLE>
+ <a href="/"><IMG SRC="images/busybox2.jpg" alt="BusyBox" border="0" width="360" height="230"></a><BR>
+
+
+<!-- Begin Introduction section -->
+
+
+<TABLE WIDTH="95%" CELLSPACING=1 CELLPADDING=4 BORDER=1>
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="intro"> <BIG><B>
+ The Swiss Army Knife of Embedded Linux
+ </B></BIG></A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+
+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.
+<p>
+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 /dev, /etc, and a kernel.
+<p>
+
+BusyBox is now maintained by
+<a href="http://codepoet.org/andersen/erik/erik.html">
+Erik Andersen</a>, and its ongoing development is being sponsored by
+<a href="http://www.lineo.com/">Lineo</a>.
+<p>
+BusyBox is licensed under the
+<a href="http://www.gnu.org/copyleft/gpl.html">GNU GENERAL PUBLIC LICENSE</a>.
+<p>
+
+
+<h3> Screenshot </h3>
+
+<p> Because everybody loves screenshots, a screenshot of BusyBox
+is now available <a href="screenshot.html">right here</a>.
+
+
+<H3>Mailing List Information</h3>
+BusyBox now has a <a href="http://opensource.lineo.com/lists/busybox/">mailing list</a>!
+To subscribe, go and visit <a href="http://opensource.lineo.com/mailman/listinfo/busybox">this page</a>.
+
+<!-- Begin Latest News section -->
+
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="news">
+ <BIG><B>
+ Latest News
+ </B></BIG>
+ </A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+
+<ul>
+
+ <li> <b>2 August 2001 -- BusyBox 0.60.0 released</b>
+ <br>
+ I am very pleased to announce the immediate availability of
+ BusyBox 0.60.0. I have personally tested this release with libc5, glibc,
+ and <a href="http://cvs.uclinux.org/uClibc.html">uClibc</a> on
+ x86, ARM, and powerpc using linux 2.2 and 2.4, and I know a number
+ of people using it on everything from ia64 to m68k with great success.
+ Everything seems to be working very nicely now, so getting a nice
+ stable bug-free(tm) release out seems to be in order. This releases fixes
+ a memory leak in syslogd, a number of bugs in the ash and msh shells, and
+ cleans up a number of things.
+
+ <p>
+
+ Those wanting an easy way to test the 0.60.0 release with uClibc can
+ use <a href="http://user-mode-linux.sourceforge.net/">User-Mode Linux</a>
+ to give it a try by downloading and compiling
+ <a href="ftp://oss.lineo.com/buildroot.tar.gz">buildroot.tar.gz</a>.
+ You don't have to be root or reboot your machine to run test this way.
+ Preconfigured User-Mode Linux kernel source is also on oss.lineo.com.
+ <p>
+ Another cool thing is the nifty <a href="ftp://oss.lineo.com/busybox/tutorial/index.html">
+ BusyBox Tutorial</a> contributed by K Computing. This requires
+ a ShockWave plugin (or standalone viewer), so you may want to grab the
+ the GPLed shockwave viewer from <a href="http://www.swift-tools.com/Flash/flash-0.4.10.tgz">here</a>
+ to view the tutorial.
+ <p>
+
+ Finally, In case you didn't notice anything odd about the
+ version number of this release, let me point out that this release
+ is <em>not</em> 0.53, because I bumped the version number up a
+ bit. This reflects the fact that this release is intended to form
+ a new stable BusyBox release series. If you need to rely on a
+ stable version of BusyBox, you should plan on using the stable
+ 0.60.x series. If bugs show up then I will release 0.60.1, then
+ 0.60.2, etc... This is also intended to deal with the fact that
+ the BusyBox build system will be getting a major overhaul for the
+ next release and I don't want that to break products that people
+ are shipping. To avoid that, the new build system will be
+ released as part of a new BusyBox development series that will
+ have some not-yet-decided-on odd version number. Once things
+ stabilize and the new build system is working for everyone, then
+ I will release that as a new stable release series.
+
+ <p>
+ The
+ <a href="ftp://oss.lineo.com/busybox/Changelog">changelog</a> has all
+ the details. As usual BusyBox 0.60.0 can be downloaded from
+ <a href="ftp://oss.lineo.com/busybox">ftp://oss.lineo.com/busybox</a>.
+ <p>Have Fun!
+ <p>
+
+
+ <li> <b>7 July 2001 -- BusyBox 0.52 released</b>
+ <br>
+
+ I am very pleased to announce the immediate availability of
+ BusyBox 0.52 (the "new-and-improved rock-solid release"). This
+ release is the result of <em>many</em> hours of work and has tons
+ of bugfixes, optimizations, and cleanups. This release adds
+ several new applets, including several new shells (such as hush, msh,
+ and ash).
+
+ <p>
+ The
+ <a href="ftp://oss.lineo.com/busybox/Changelog">changelog</a> covers
+ some of the more obvious details, but there are many many things that
+ are not mentioned, but have been improved in subtle ways. As usual,
+ BusyBox 0.52 can be downloaded from
+ <a href="ftp://oss.lineo.com/busybox">ftp://oss.lineo.com/busybox</a>.
+ <p>Have Fun!
+ <p>
+
+
+ <li> <b>10 April 2001 - Graph of Busybox Growth </b>
+ <br>
+ The illustrious Larry Doolittle has made a PostScript chart of the growth
+ of the Busybox tarball size over time. It is available for downloading /
+ viewing <a href= "busybox-growth.ps"> right here</a>.
+
+ <p> (Note that while the number of applets in Busybox has increased, you
+ can still configure Busybox to be as small as you want by selectively
+ turning off whichever applets you don't need.)
+ <p>
+
+
+
+ <li> <b>Old News</b>
+ <br>
+ For the old news, visit <a href="http://busybox.lineo.com/oldnews.html">the old news page</a>.
+</ul>
+
+
+<!-- Begin Download section -->
+
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="download"><BIG><B>
+ Download
+ </B></BIG></A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+<ul>
+
+ <li> Source for the latest release can always be downloaded from
+ <a href="ftp://oss.lineo.com/busybox">ftp://oss.lineo.com/busybox</a>.
+
+ <li> A new snapshot of the source is made daily and is available as a GNU
+ gzipped tarball <a href="busybox.tar.gz"> right here</a>.
+
+ <li> BusyBox now has its own publically browsable
+ <a href="http://opensource.lineo.com/cgi-bin/cvsweb/busybox/">CVS tree</a>,
+ anonymous
+ <a href="http://opensource.lineo.com/cvs_anon.html">CVS access</a>, and
+ for those that are actively contributing there is even
+ <a href="http://opensource.lineo.com/cvs_write.html">CVS write access</a>.
+
+</ul>
+
+
+<!-- Begin Docs section -->
+
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="docs"><BIG><B>
+ Documentation
+ </B></BIG></A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+Current documentation for BusyBox includes:
+<ul>
+ <li> <a href="ftp://oss.lineo.com/busybox/BusyBox.html">BusyBox.html</a>.
+ This is a list of the all the available commands in BusyBox with
+ complete usage information and examples of how to use each app. I
+ have spent a <em>lot</em> of time updating these docs and trying to
+ make them fairly comprehensive. If you find any errors (factual,
+ grammatical, whatever) please let me know.
+ <li> <a href="ftp://oss.lineo.com/busybox/README">README</a>.
+ This is the README file included in the busybox source release.
+ <li> <a href="http://bugs.lineo.com/db/pa/lbusybox.html">BusyBox Bugs</a>.
+ Need to report a bug? Need to check if a bug has been filed?
+ <li> If you need more help, the BusyBox
+ <a href="http://opensource.lineo.com/lists/busybox/">mailing list</a> is
+ a good place to start.
+</ul>
+
+
+<!-- Begin Links section -->
+
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="links">
+ <BIG><B>
+ Important Links
+ </B></BIG>
+ </A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+
+<ul>
+
+ <li> <A HREF="http://perens.com/FreeSoftware/">
+ Free Software from Bruce Perens</A><br>
+ The original idea for BusyBox, and all versions up to 0.26 were written
+ by <A HREF="mailto:bruce@perens.com">Bruce Perens</a>. This is his BusyBox website.
+ <p>
+
+ <li> <A HREF="http://freshmeat.net/projects/busybox/">
+ Freshmeat AppIndex record for BusyBox</A>
+ <p>
+ <li><a href="http://tinylogin.lineo.com/">TinyLogin</a>
+ is a nice embedded tool for handling authentication, changing passwords,
+ and similar tasks which nicely complements BusyBox.
+ <p>
+
+ <li><a href="http://cvs.uclinux.org/uClibc.html">uClibc</a>
+ is a C library for embedded systems. You can actually statically link
+ a "Hello World" application under x86 that only takes 4k (as opposed to
+ 200k under GNU libc). It can do dynamic linking too and works nicely with
+ BusyBox to create very small embedded systems.
+ <p>
+
+ <li> <a href="http://opensource.lineo.com/software.html">Other cool embedded software</a>.
+ <p>
+
+ <li> <a href="http://opensource.lineo.com/">opensource.lineo.com</a>.
+ <p>
+
+ <li> <A HREF="http://www.lineo.com/">Lineo</A> is sponsoring BusyBox development.
+ <p>
+
+</ul>
+
+
+<!-- Begin Projects section -->
+
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="projects"><BIG><B>
+ Products/Projects Using BusyBox
+ </B></BIG></A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+
+<p> I know of the following products and/or projects that use BusyBox --
+listed in the order I happen to add them to the web page:
+
+<ul>
+ <li> <a href="http://www.lineo.com/products/embedix_linux/">Lineo Embedix Linux</a>
+ <li> <a href="http://cvs.debian.org/boot-floppies/">Debian installer (boot floppies) project</a>
+ <li> <a href="http://www.linuxrouter.org/">Linux Router Project </a>
+ <li> <a href="http://linux-embedded.org/">LEM</a>
+ <li> <a href="http://www.toms.net/rb/">tomsrtbt</a>
+ <li> <a href="http://www.stormix.com/">Stormix Installer</a>
+ <li> <a href="http://www.emacinc.com/linux2_sbc.htm">EMAC Linux 2.0 SBC</a>
+ <li> <a href="http://www.trinux.org/">Trinux</a>
+ <li> <a href="http://oddas.sourceforge.net/">ODDAS project</a>
+ <li> <a href="http://www.kerbango.com/">The Kerbango Internet Radio</a>
+ <li> <a href="http://www.linuxmagic.com/vpn/">LinuxMagic VPN Firewall</a>
+ <li> <a href="http://byld.sourceforge.net/">Build Your Linux Disk</a>
+ <li> <a href="http://homepages.ihug.co.nz/~ichi/baslinux.html">BasicLinux</a>
+ <li> <a href="http://ibiblio.org/pub/Linux/system/recovery">Zdisk</a>
+ <li> <a href="http://www.adtran.com">AdTran - VPN/firewall VPN Linux Distribution</a>
+ <li> <a href="http://mkcdrec.ota.be/">mkCDrec - make CD-ROM recovery</a>
+ <li> <a href="http://recycle.lbl.gov/~ldoolitt/bse/">Linux on nanoEngine</a>
+ <li> <a href="http://www.zelow.no/floppyfw/"> Floppyfw</a>
+
+ <li> <a href="http://midori.transmeta.com/"> Midori Linux</a> - <a href=
+ "http://www.wired.com/news/technology/0,1282,42399,00.html"> Article on
+ Midori Linux</a> on <a href= "http://www.wired.com"> Wired</a>. Quote from
+ Erik at the top of <a href=
+ "http://www.wired.com/news/technology/0,1282,42399-2,00.html"> this
+ page</a>
+
+ <li> <a href="http://www.ltsp.org/">Linux Terminal Server Project</a>
+ <li> <a href="http://www.devil-linux.org/">Devil-Linux</a>
+
+</ul>
+
+<p> Do you use BusyBox? I'd love to know about it and I'd be happy to link to
+you.
+
+
+
+<!-- End of Table -->
+
+</TD></TR>
+</TABLE>
+
+
+
+<!-- Footer -->
+<HR>
+<TABLE WIDTH="100%">
+ <TR>
+ <TD>
+ <font size="-1" face="arial, helvetica, sans-serif">
+ Mail all comments, insults, suggestions and bribes to
+ <a href="mailto:andersen@lineo.com">Erik Andersen</a><BR>
+ The Busybox logo is copyright 1999,2000,2001, Erik Andersen.
+ </font>
+ </TD>
+
+ <TD>
+ <a href="http://www.vim.org"><img border=0 width=90 height=36
+ src="images/written.in.vi.png"
+ alt="This site created with the vi editor"></a>
+ </TD>
+
+ <TD>
+ <a href="http://www.gimp.org/"><img border=0 width=90 height=36
+ src="images/gfx_by_gimp.png" alt="Graphics by GIMP"></a>
+ </TD>
+
+ <TD>
+ <a href="http://www.linuxtoday.com"><img width=90 height=36
+ src="images/ltbutton2.png" alt="Linux Today"></a>
+ </TD>
+
+ <TD>
+ <p><a href="http://slashdot.org"><img width=90 height=36
+ src="images/sdsmall.png" alt="Slashdot"></a>
+ </TD>
+
+ <TD>
+ <a href="http://freshmeat.net"><img width=90 height=36
+ src="images/fm.mini.png" alt="Freshmeat"></a>
+ </TD>
+
+ </TR>
+</TABLE>
+
+
+</CENTER>
+</BODY>
+</HTML>
+
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/oldnews.html b/release/src/router/busybox/docs/busybox.lineo.com/oldnews.html
new file mode 100644
index 00000000..d97bb268
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/oldnews.html
@@ -0,0 +1,465 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+
+<HTML>
+<HEAD>
+<TITLE>BusyBox</TITLE>
+</HEAD>
+
+<body text="#000000" alink="#660000" link="#660000" bgcolor="#dee2de" vlink="#660000">
+
+<basefont face="lucida, helvetica, arial" size="3">
+
+
+<CENTER>
+ <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2>
+ <TR>
+ <td bgcolor="#000000">
+ <FONT FACE="lucida, helvetica" COLOR="#ccccc0">
+ <B>B&nbsp;u&nbsp;s&nbsp;y&nbsp;B&nbsp;o&nbsp;x</B>
+ </FONT>
+ </TD>
+ </TR>
+ </TABLE>
+ <a href="/"><IMG SRC="images/busybox2.jpg" alt="BusyBox" border="0" width="360" height="230"</a><BR>
+
+
+<TABLE WIDTH=95% CELLSPACING=1 CELLPADDING=4 BORDER=1>
+
+<!-- Begin Older News section -->
+
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="news">
+ <BIG><B>
+ Older BusyBox News</A>
+ </B></BIG>
+ </A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+
+<ul>
+
+ <p> <li> <b>Take me back to the <a href="http://busybox.lineo.com/">BusyBox</a> web site.</b>
+ <hr>
+
+ <li> <b>10 April 2001 -- BusyBox 0.51 released</b>
+ <br>
+
+ BusyBox 0.51 (the "rock-solid release") is now out there. This
+ release adds only 2 new applets: env and vi. The vi applet,
+ contributed by Sterling Huxley, is very functional, and is only
+ 22k. This release fixes 3 critical bugs in the 0.50 release.
+ There were 2 potential segfaults in lash (the busybox shell) in
+ the 0.50 release which are now fixed. Another critical bug in
+ 0.50 which is now fixed: syslogd from 0.50 could potentially
+ deadlock the init process and thereby break your entire system.
+ <p>
+
+ There are a number of improvements in this release as well. For
+ one thing, the wget applet is greatly improved. Dmitry Zakharov
+ added FTP support, and Laurence Anderson make wget fully RFC
+ compliant for HTTP 1.1. The mechanism for including utility
+ functions in previous releases was clumsy and error prone. Now
+ all utility functions are part of a new libbb library, which makes
+ maintaining utility functions much simpler. And BusyBox now
+ compiles on itanium systems (thanks to the Debian itanium porters
+ for letting me use their system!).
+ <p>
+ You can read the
+ <a href="ftp://oss.lineo.com/busybox/Changelog">changelog</a> for
+ complete details. BusyBox 0.51 can be downloaded from
+ <a href="ftp://oss.lineo.com/busybox">ftp://oss.lineo.com/busybox</a>.
+ <p>Have Fun!
+ <p>
+
+ <li> <b>Busybox Boot-Floppy Image</b>
+
+ <p>Because you asked for it, we have made available a <a href=
+ "ftp://opensource.lineo.com/busybox/busybox.floppy.img"> Busybox boot floppy
+ image</a>. Here's how you use it:
+
+ <ol>
+
+ <li> <a href= "ftp://opensource.lineo.com/busybox/busybox.floppy.img">
+ Download the image</a>
+
+ <li> dd it onto a floppy like so: <tt> dd if=busybox.floppy.img
+ of=/dev/fd0 ; sync </tt>
+
+ <li> Pop it in a machine and boot up.
+
+ </ol>
+
+ <p> If you want to look at the contents of the initrd image, do this:
+
+ <pre>
+ mount ./busybox.floppy.img /mnt -o loop -t msdos
+ cp /mnt/initrd.gz /tmp
+ umount /mnt
+ gunzip /tmp/initrd.gz
+ mount /tmp/initrd /mnt -o loop -t minix
+ </pre>
+
+
+ <li> <b>15 March 2001 -- BusyBox 0.50 released</b>
+ <br>
+
+ This release adds several new applets including ifconfig, route, pivot_root, stty,
+ and tftp, and also fixes tons of bugs. Tab completion in the
+ shell is now working very well, and the shell's environment variable
+ expansion was fixed. Tons of other things were fixed or made
+ smaller. For a fairly complete overview, see the
+ <a href="ftp://oss.lineo.com/busybox/Changelog">changelog</a>.
+ <p>
+ lash (the busybox shell) is still with us, fixed up a bit so it
+ now behaves itself quite nicely. It really is quite usable as
+ long as you don't expect it to provide Bourne shell grammer.
+ Standard things like pipes, redirects, command line editing, and
+ environment variable expansion work great. But we have found that
+ this shell, while very usable, does not provide an extensible
+ framework for adding in full Bourne shell behavior. So the first order of
+ business as we begin working on the next BusyBox release will be to merge in the new shell
+ currently in progress at
+ <a href="http://doolittle.faludi.com/~larry/parser.html">Larry Doolittle's website</a>.
+ <p>
+
+
+ <li> <b>27 January 2001 -- BusyBox 0.49 released</b>
+ <br>
+
+ Several new applets, lots of bug fixes, cleanups, and many smaller
+ things made nicer. Several cleanups and improvements to the shell.
+ For a list of the most interesting changes
+ you might want to look at the <a href="ftp://oss.lineo.com/busybox/Changelog">changelog</a>.
+ <p>
+ Special thanks go out to Matt Kraai and Larry Doolittle for all their
+ work on this release, and for keeping on top of things while I've been
+ out of town.
+ <p>
+ <em>Special Note</em><br>
+
+ BusyBox 0.49 was supposed to have replaced lash, the BusyBox
+ shell, with a new shell that understands full Bourne shell/Posix shell grammer.
+ Well, that simply didn't happen in time for this release. A new
+ shell that will eventually replace lash is already under
+ construction. This new shell is being developed by Larry
+ Doolittle, and could use all of our help. Please see the work in
+ progress on <a href="http://doolittle.faludi.com/~larry/parser.html">Larry's website</a>
+ and help out if you can. This shell will be included in the next
+ release of BusyBox.
+ <p>
+
+ <li> <b>13 December 2000 -- BusyBox 0.48 released</b>
+ <br>
+
+ This release fixes lots and lots of bugs. This has had some very
+ rigorous testing, and looks very, very clean. The usual tar
+ update of course: tar no longer breaks hardlinks, tar -xzf is
+ optionally supported, and the LRP folks will be pleased to know
+ that 'tar -X' and 'tar --exclude' are both now in. Applets are
+ now looked up using a binary search making lash (the busybox
+ shell) much faster. For the new debian-installer (for Debian
+ woody) a .udeb can now be generated.
+ <p>
+ The curious can get a list of some of the more interesting changes by reading
+ the <a href="ftp://oss.lineo.com/busybox/Changelog">changelog</a>.
+ <p>
+ Many thanks go out to the many many people that have contributed to
+ this release, especially Matt Kraai, Larry Doolittle, and Kent Robotti.
+ <p>
+ <p> <li> <b>26 September 2000 -- BusyBox 0.47 released</b>
+ <br>
+
+ This release fixes lots of bugs (including an ugly bug in 0.46
+ syslogd that could fork-bomb your system). Added several new
+ apps: rdate, wget, getopt, dos2unix, unix2dos, reset, unrpm,
+ renice, xargs, and expr. syslogd now supports network logging.
+ There are the usual tar updates. Most apps now use getopt for
+ more correct option parsing.
+ See the <a href="ftp://oss.lineo.com/busybox/Changelog">changelog</a>
+ for complete details.
+
+
+ <p> <li> <b>11 July 2000 -- BusyBox 0.46 released</b>
+ <br>
+
+ This release fixes several bugs (including a ugly bug in tar,
+ and fixes for NFSv3 mount support). Added a dumpkmap to allow
+ people to dump a binary keymaps for use with 'loadkmap', and a
+ completely reworked 'grep' and 'sed' which should behave better.
+ BusyBox shell can now also be used as a login shell.
+ See the <a href="ftp://oss.lineo.com/busybox/Changelog">changelog</a>
+ for complete details.
+
+
+ <p> <li> <b>21 June 2000 -- BusyBox 0.45 released</b>
+ <br>
+
+ This release has been slow in coming, but is very solid at this
+ point. BusyBox now supports libc5 as well as GNU libc. This
+ release provides the following new apps: cut, tr, insmod, ar,
+ mktemp, setkeycodes, md5sum, uuencode, uudecode, which, and
+ telnet. There are bug fixes for just about every app as well (see
+ the <a href="ftp://oss.lineo.com/busybox/Changelog">changelog</a> for
+ details).
+ <p>
+ Also, some exciting infrastructure news! Busybox now has its own
+ <a href="http://opensource.lineo.com/lists/busybox/">mailing list</a>,
+ publically browsable
+ <a href="http://opensource.lineo.com/cgi-bin/cvsweb/busybox/">CVS tree</a>,
+ anonymous
+ <a href="http://opensource.lineo.com/cvs_anon.html">CVS access</a>, and
+ for those that are actively contributing there is even
+ <a href="http://opensource.lineo.com/cvs_write.html">CVS write access</a>.
+ I think this will be a huge help to the ongoing development of BusyBox.
+ <p>
+ Also, for the curious, there is no 0.44 release. Somehow 0.44 got announced
+ a few weeks ago prior to its actually being released. To avoid any confusion
+ we are just skipping 0.44.
+ <p>
+ Many thanks go out to the many people that have contributed to this release
+ of BusyBox (esp. Pavel Roskin)!
+
+
+ <p> <li> <b>19 April 2000 -- syslogd bugfix</b>
+ <br>
+ Turns out that there was still a bug in busybox syslogd.
+ For example, with the following test app:
+<pre>
+ #include &lt;syslog.h&gt;
+
+ int do_log(char* msg, int delay)
+ {
+ openlog("testlog", LOG_PID, LOG_DAEMON);
+ while(1) {
+ syslog(LOG_ERR, "%s: testing one, two, three\n", msg);
+ sleep(delay);
+ }
+ closelog();
+ return(0);
+ };
+
+ int main(void)
+ {
+ if (fork()==0)
+ do_log("A", 2);
+ do_log("B", 3);
+ }
+</pre>
+ it should be logging stuff from both "A" and "B". As released in 0.43 only stuff
+ from "A" would have been logged. This means that if init tries to log something
+ while say ppp has the syslog open, init would block (which is bad, bad, bad).
+ <p>
+ Karl M. Hegbloom has created a
+ <a href="ftp://ftp.lineo.com/pub/busybox/busybox-0.43-syslog_patch">fix for the problem</a>.
+ Thanks Karl!
+
+
+ <p> <li> <b>18 April 2000 -- BusyBox 0.43 released (finally!)</b>
+ <br>
+ I have finally gotten everything into a state where I feel pretty
+ good about things. This is definitely the most stable, solid release
+ so far. A lot of bugs have been fixed, and the following new apps
+ have been added: sh, basename, dirname, killall, uptime,
+ freeramdisk, tr, echo, test, and usleep. Tar has been completely
+ rewritten from scratch. Bss size has also been greatly reduced.
+ More details are available in the
+ <a href="ftp://ftp.lineo.com/pub/busybox/Changelog">changelog</a>.
+ Oh, and as a special bonus, I wrote some fairly comprehensive
+ <em>documentation</em>, complete with examples and full usage information.
+
+ <p>
+ Many thanks go out to the fine people that have helped by submitting patches
+ and bug reports; particularly instrumental in helping for this release were
+ Karl Hegbloom, Pavel Roskin, Friedrich Vedder, Emanuele Caratti,
+ Bob Tinsley, Nicolas Pitre, Avery Pennarun, Arne Bernin, John Beppu, and Jim Gleason.
+ There were others so if I somehow forgot to mention you, I'm very sorry.
+ <p>
+
+ You can grab BusyBox 0.43 tarballs <a href="ftp://ftp.lineo.com/pub/busybox/">here</a>.
+
+ <p> <li> <b>9 April 2000 -- BusyBox 0.43 pre release</b>
+ <br>
+ Unfortunately, I have not yet finished all the things I want to
+ do for BusyBox 0.43, so I am posting this pre-release for people
+ to poke at. This contains my complete rewrite of tar, which now weighs in at
+ 5k (7k with all options turned on) and works for reading and writing
+ tarballs (which it does correctly for everything I have been able to throw
+ at it). Tar also (optionally) supports the "--exclude" option (mainly because
+ the Linux Router Project folks asked for it). This also has a pre-release
+ of the micro shell I have been writing. This pre-release should be stable
+ enough for production use -- it just isn't a release since I have some structural
+ changes I still want to make.
+ <p>
+ The pre-release can be found <a href="ftp://ftp.lineo.com/pub/busybox/">here</a>.
+ Please let me know ASAP if you find <em>any</em> bugs.
+
+ <p> <li> <b>28 March 2000 -- Andersen Baby Boy release</b>
+ <br>
+ I am pleased to announce that on Tuesday March 28th at 5:48pm, weighing in at 7
+ lbs. 12 oz, Micah Erik Andersen was born at LDS Hospital here in Salt Lake City.
+ He was born in the emergency room less then 5 minutes after we arrived -- and
+ it was such a relief that we even made it to the hospital at all. Despite the
+ fact that I was driving at an amazingly unlawful speed and honking at everybody
+ and thinking decidedly unkind thoughts about the people in our way, my wife
+ (inconsiderate of my feelings and complete lack of medical training) was lying
+ down in the back seat saying things like "I think I need to start pushing now"
+ (which she then proceeded to do despite my best encouraging statements to the
+ contrary).
+ <p>
+ Anyway, I'm glad to note that despite the much-faster-than-we-were-expecting
+ labor, both Shaunalei and our new baby boy are doing wonderfully.
+ <p>
+ So now that I am done with my excuse for the slow release cycle...
+ Progress on the next release of BusyBox has been slow but steady. I expect
+ to have a release sometime during the first week of April. This release will
+ include a number of important changes, including the addition of a shell, a
+ re-write of tar (to accommodate the Linux Router Project), and syslogd can now
+ accept multiple concurrent connections, fixing lots of unexpected blocking
+ problems.
+
+
+ <p> <li> <b>11 February 2000 -- BusyBox 0.42 released</b>
+ <br>
+
+ This is the most solid BusyBox release so far. Many, many
+ bugs have been fixed. See the
+<a href="ftp://ftp.lineo.com/pub/busybox/Changelog">changelog</a> for details.
+
+ Of particular interest, init will now cleanly unmount
+ filesystems on reboot, cp and mv have been rewritten and
+ behave much better, and mount and umount no longer leak
+ loop devices. Many thanks go out to Randolph Chung,
+ Karl M. Hegbloom, Taketoshi Sano, and Pavel Roskin for
+ their hard work on this release of BusyBox. Please pound
+ on it and let me know if you find any bugs.
+
+ <p> <li> <b>19 January 2000 -- BusyBox 0.41 released</b>
+ <br>
+
+ This release includes bugfixes to cp, mv, logger, true, false,
+ mkdir, syslogd, and init. New apps include wc, hostid,
+ logname, tty, whoami, and yes. New features include loop device
+ support in mount and umount, and better TERM handling by init.
+ The changelog can be found <a href="ftp://ftp.lineo.com/pub/busybox/Changelog">here</a>.
+
+ <p> <li> <b>7 January 2000 -- BusyBox 0.40 released</b>
+ <br>
+
+ This release includes bugfixes to init (now includes inittab support),
+ syslogd, head, logger, du, grep, cp, mv, sed, dmesg, ls, kill, gunzip, and mknod.
+ New apps include sort, uniq, lsmod, rmmod, fbset, and loadacm.
+ In particular, this release fixes an important bug in tar which
+ in some cases produced serious security problems.
+ As always, the changelog can be found <a href="ftp://ftp.lineo.com/pub/busybox/Changelog">here</a>.
+
+ <p> <li> <b>11 December 1999 -- BusyBox Website</b>
+ <br>
+ I have received permission from Bruce Perens (the original author of BusyBox)
+ to set up this site as the new primary website for BusyBox. This website
+ will always contain pointers to the latest and greatest, and will also
+ contain the latest documentation on how to use BusyBox, what it can do,
+ what arguments its apps support, etc.
+
+ <p> <li> <b>10 December 1999 -- BusyBox 0.39 released</b>
+ <br>
+ This release includes fixes to init, reboot, halt, kill, and ls, and contains
+ the new apps ping, hostname, mkfifo, free, tail, du, tee, and head. A full
+ changelog can be found <a href="ftp://ftp.lineo.com/pub/busybox/Changelog">here</a>.
+ <p> <li> <b>5 December 1999 -- BusyBox 0.38 released</b>
+ <br>
+ This release includes fixes to tar, cat, ls, dd, rm, umount, find, df,
+ and make install, and includes new apps syslogd/klogd and logger.
+</ul>
+
+
+<!-- Begin Links section -->
+
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="links">
+ <BIG><B>
+ Important Links</A>
+ </B></BIG>
+ </A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+
+<ul>
+
+ <li> <a href="http://busybox.lineo.com/">Take me back to http://busybox.lineo.com/</a>.
+ <p>
+
+ <li> <A HREF="http://perens.com/FreeSoftware/">
+ Free Software from Bruce Perens</A><br>
+ The original idea for BusyBox, and all versions up to 0.26 were written
+ by <A HREF="mailto:bruce@perens.com">Bruce Perens</a>. This is his BusyBox website.
+ <p>
+
+ <li> <A HREF="http://freshmeat.net/appindex/1999/04/11/923859921.html">
+ Freshmeat AppIndex record for BusyBox</A>
+ <p>
+
+ <li> <a href="http://opensource.lineo.com/software.html">Other cool embedded software</a>.
+ <p>
+
+ <li> <a href="http://opensource.lineo.com/">opensource.lineo.com</a>.
+ <p>
+
+ <li> <A HREF="http://www.lineo.com/">Lineo</A> is sponsoring BusyBox development.
+ <p>
+
+</ul>
+
+
+<!-- End of Table -->
+
+</TD></TR>
+</TABLE>
+</P>
+
+
+
+<!-- Footer -->
+<HR>
+<TABLE WIDTH="100%">
+ <TR>
+ <TD>
+ <font size="-1" face="arial, helvetica, sans-serif">
+ Mail all comments, insults, suggestions and bribes to
+ <a href="mailto:andersen@lineo.com">Erik Andersen</a><BR>
+ The Busybox logo is copyright 1999,2000, Erik Andersen.
+ </font>
+ </TD>
+
+ <TD>
+ <a href="http://www.vim.org"><img border=0 width=88 height=32
+ src="images/anim.written.in.vi.gif"
+ alt="This site created with the vi editor"></a>
+ </TD>
+
+ <TD>
+ <a href="http://www.gimp.org/"><img border=0 width=88 height=38
+ src="images/gfx_by_gimp.gif" alt="Graphics by GIMP"></a>
+ </TD>
+
+ <TD>
+ <a href="http://www.linuxtoday.com"><img width=90 height=36
+ src="images/ltbutton2.jpg" alt="Linux Today"></a>
+ </TD>
+
+ <TD>
+ <p><a href="http://slashdot.org"><img width=90 height=36
+ src="images/sdsmall.gif" alt="Slashdot"></a>
+ </TD>
+
+ <TD>
+ <a href="http://freshmeat.net"><img width=90 height=36
+ src="images/fm.mini.jpg" alt="Freshmeat"></a>
+ </TD>
+
+ </TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
+
diff --git a/release/src/router/busybox/docs/busybox.lineo.com/screenshot.html b/release/src/router/busybox/docs/busybox.lineo.com/screenshot.html
new file mode 100644
index 00000000..8424fcef
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.lineo.com/screenshot.html
@@ -0,0 +1,54 @@
+<html>
+
+<head>
+
+<title> Busybox Screenshot! </title>
+
+<meta name="Author" content="Mark Whitley">
+<meta name="Description" content="A screenshot of Busybox">
+
+</head>
+
+<body text="#000000" alink="#660000" link="#660000" bgcolor="#dee2de" vlink="#660000">
+
+<h1> Busybox Screenshot! </h1>
+
+<TABLE WIDTH="80%" CELLSPACING=1 CELLPADDING=4 BORDER=1>
+<TR><TD BGCOLOR="#000000">
+
+
+<pre style="background-color: black; color: lightgreen; padding: 5px;
+font-family: monospace; font-size: smaller;" width="80%">
+
+
+$ ./busybox
+BusyBox v0.49 (2001.01.30-17:35+0000) multi-call binary -- GPL2
+
+Usage: busybox [function] [arguments]...
+ or: [function] [arguments]...
+
+ BusyBox is a multi-call binary that combines many common Unix
+ utilities into a single executable. Most people will create a
+ link to busybox for each function they wish to use, and BusyBox
+ will act like whatever it was invoked as.
+
+Currently defined functions:
+ basename, busybox, cat, chgrp, chmod, chown, chroot, chvt, clear,
+ cp, cut, date, dd, df, dirname, dmesg, du, echo, false, find,
+ free, grep, gunzip, gzip, halt, head, id, init, kill, killall,
+ ln, logger, ls, lsmod, mkdir, mknod, mkswap, more, mount, mv,
+ poweroff, ps, pwd, reboot, reset, rm, rmdir, sed, sh, sleep, sort,
+ swapoff, swapon, sync, syslogd, tail, tar, touch, true, tty, umount,
+ uname, uniq, uptime, wc, which, whoami, xargs, yes, zcat
+
+$ <blink>_</blink>
+
+</pre>
+
+</TD></TR>
+</TABLE>
+
+</body>
+
+</html>
+
diff --git a/release/src/router/busybox/docs/busybox.net/.cvsignore b/release/src/router/busybox/docs/busybox.net/.cvsignore
new file mode 100755
index 00000000..393b0021
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/.cvsignore
@@ -0,0 +1,2 @@
+BusyBox.html
+busybox.tar.gz
diff --git a/release/src/router/busybox/docs/busybox.net/busybox-growth.ps b/release/src/router/busybox/docs/busybox.net/busybox-growth.ps
new file mode 100755
index 00000000..123f3811
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/busybox-growth.ps
@@ -0,0 +1,404 @@
+%!PS-Adobe-2.0
+%%Title: busybox-growth.ps
+%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347
+%%CreationDate: Tue Apr 10 14:03:36 2001
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 40 554 770
+%%Orientation: Landscape
+%%Pages: (atend)
+%%EndComments
+/gnudict 120 dict def
+gnudict begin
+/Color true def
+/Solid true def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -46 def
+/dl {10 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/UL { gnulinewidth mul /userlinewidth exch def } def
+/PL { stroke userlinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+end
+%%EndProlog
+%%Page: 1 1
+gnudict begin
+gsave
+50 50 translate
+0.100 0.100 scale
+90 rotate
+0 -5040 translate
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+1.000 UL
+LTb
+560 420 M
+63 0 V
+6409 0 R
+-63 0 V
+476 420 M
+(0) Rshow
+560 1056 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(100) Rshow
+560 1692 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(200) Rshow
+560 2328 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(300) Rshow
+560 2964 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(400) Rshow
+560 3600 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(500) Rshow
+560 4236 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(600) Rshow
+560 4872 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(700) Rshow
+1531 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(400) Cshow
+2825 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(600) Cshow
+4120 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(800) Cshow
+5414 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(1000) Cshow
+6708 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(1200) Cshow
+1.000 UL
+LTb
+560 420 M
+6472 0 V
+0 4452 V
+-6472 0 V
+560 420 L
+0 2646 M
+currentpoint gsave translate 90 rotate 0 0 M
+(tar.gz size \(Kb\)) Cshow
+grestore
+3796 140 M
+(time \(days since Jan 1, 1998\)) Cshow
+1.000 UL
+LT0
+696 420 M
+0 593 V
+1255 0 V
+0 15 V
+214 0 V
+0 6 V
+958 0 V
+0 1 V
+-84 0 V
+0 37 V
+168 0 V
+0 262 V
+13 0 V
+0 56 V
+91 0 V
+0 33 V
+6 0 V
+0 1 V
+19 0 V
+0 11 V
+20 0 V
+0 13 V
+32 0 V
+0 104 V
+52 0 V
+0 27 V
+65 0 V
+0 15 V
+39 0 V
+0 126 V
+174 0 V
+0 103 V
+52 0 V
+0 49 V
+175 0 V
+0 56 V
+433 0 V
+0 661 V
+415 0 V
+0 857 V
+123 0 V
+0 -291 V
+498 0 V
+0 208 V
+505 0 V
+0 66 V
+291 0 V
+0 115 V
+311 0 V
+0 449 V
+162 0 V
+0 309 V
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
+%%Pages: 1
diff --git a/release/src/router/busybox/docs/busybox.net/cvs_anon.html b/release/src/router/busybox/docs/busybox.net/cvs_anon.html
new file mode 100755
index 00000000..c1811d48
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/cvs_anon.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+
+<HTML>
+<HEAD>
+<title>BusyBox Anonymous CVS Instructions</title>
+</HEAD>
+
+<body text="#000000" alink="#660000" link="#660000" bgcolor="#dee2de" vlink="#660000">
+
+<basefont face="lucida, helvetica, arial" size="3">
+
+
+<H3>Accessing the Busybox CVS Repository</H3>
+
+<CENTER>
+ <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2>
+ <TR>
+ <td bgcolor="#000000">
+ <FONT FACE="lucida, helvetica" COLOR="#ccccc0">
+ <B>B&nbsp;u&nbsp;s&nbsp;y&nbsp;B&nbsp;o&nbsp;x</B>
+ </FONT>
+ </TD>
+ </TR>
+ </TABLE>
+ <a href="/"><IMG SRC="images/busybox2.jpg" alt="BusyBox" border="0" width="360" height="230"></a><BR>
+
+
+</CENTER>
+
+<TABLE WIDTH="95%" CELLSPACING=1 CELLPADDING=4 BORDER=1>
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="intro"> <BIG><B>
+ Anonymous CVS
+ </B></BIG></A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+
+We allow anonymous (read-only) CVS access to everyone. The first command you
+need to run for anonymous CVS access is:
+<pre>
+cvs -d:pserver:anonymous@busybox.net:/var/cvs login</pre>
+<p>
+CVS will prompt you for a password. Just press the Enter key (there is no
+password for anonymous access). This step only needs to be done once, the first
+time you attempt to access CVS.
+<p>
+Once the login is complete, you can then check the list of available
+CVS modules by running the following command (all on one line):
+<pre>
+cvs -z3 -d:pserver:anonymous@busybox.net:/var/cvs co -c </pre>
+
+<p>
+If you wish, you can then check out a local copy of any of the
+available modules. The following is an example of how to grab
+a copy of busybox and tinylogin:
+<pre>
+ cvs -z3 -d:pserver:anonymous@busybox.net:/var/cvs co -P busybox tinylogin</pre>
+This will create a directory called <b>busybox</b> and a directory called
+<b>tinylogin</b> in the current directory. These directories contain the
+latest and greatest source code for busybox and tinylogin.
+
+<p>
+I usually create a ~/.cvsrc file with the following things in it, and I
+recommend you should use the same:
+<pre>
+ -z3
+ update -dP
+ rdiff -u
+ diff -ubBwpN
+ checkout -P</pre>
+
+<p>
+Once you've checked out a copy of the source tree, you can update your
+source tree at any time so it is in sync with the latest and greatest by
+running the command:
+<pre>
+cvs update</pre>
+
+Because you've only been granted anonymous access to the tree, you won't be
+able to commit any changes. Changes can be submitted for inclusion by posting
+them to the appropriate <a href="http://busybox.net/mailman/listinfo">mailing list</a>.
+
+
+<!-- End of Table -->
+
+</TD></TR>
+</TABLE>
+
+
+
+<!-- Footer -->
+<HR>
+<TABLE WIDTH="100%">
+ <TR>
+ <TD>
+ <font size="-1" face="arial, helvetica, sans-serif">
+ Mail all comments, insults, suggestions and bribes to
+ <a href="mailto:andersen@codepoet.org">Erik Andersen</a><BR>
+ The Busybox logo is copyright 1999-2002, Erik Andersen.
+ </font>
+ </TD>
+
+ <TD>
+ <a href="http://www.vim.org"><img border=0 width=90 height=36
+ src="images/written.in.vi.png"
+ alt="This site created with the vi editor"></a>
+ </TD>
+
+ <TD>
+ <a href="http://www.gimp.org/"><img border=0 width=90 height=36
+ src="images/gfx_by_gimp.png" alt="Graphics by GIMP"></a>
+ </TD>
+
+ <TD>
+ <a href="http://www.linuxtoday.com"><img width=90 height=36
+ src="images/ltbutton2.png" alt="Linux Today"></a>
+ </TD>
+
+ <TD>
+ <p><a href="http://slashdot.org"><img width=90 height=36
+ src="images/sdsmall.png" alt="Slashdot"></a>
+ </TD>
+
+ <TD>
+ <a href="http://freshmeat.net"><img width=90 height=36
+ src="images/fm.mini.png" alt="Freshmeat"></a>
+ </TD>
+
+ </TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
+
+
diff --git a/release/src/router/busybox/docs/busybox.net/cvs_write.html b/release/src/router/busybox/docs/busybox.net/cvs_write.html
new file mode 100755
index 00000000..b4033233
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/cvs_write.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+
+<HTML>
+<HEAD>
+<title>BusyBox CVS Read/Write Instructions</title>
+</HEAD>
+
+<body text="#000000" alink="#660000" link="#660000" bgcolor="#dee2de" vlink="#660000">
+
+<basefont face="lucida, helvetica, arial" size="3">
+
+
+<H3>Accessing the Busybox CVS Repository</H3>
+
+<CENTER>
+ <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2>
+ <TR>
+ <td bgcolor="#000000">
+ <FONT FACE="lucida, helvetica" COLOR="#ccccc0">
+ <B>B&nbsp;u&nbsp;s&nbsp;y&nbsp;B&nbsp;o&nbsp;x</B>
+ </FONT>
+ </TD>
+ </TR>
+ </TABLE>
+ <a href="/"><IMG SRC="images/busybox2.jpg" alt="BusyBox" border="0" width="360" height="230"></a><BR>
+
+
+</CENTER>
+
+<TABLE WIDTH="95%" CELLSPACING=1 CELLPADDING=4 BORDER=1>
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="intro"> <BIG><B>
+ CVS Read/Write Access
+ </B></BIG></A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+
+
+If you want to be able to commit things to CVS, first contribute some
+stuff to show you are serious. Then, very nicely ask
+<a href="mailto:andersen@codepoet.org">Erik Andersen</a> if he will set you up with
+an account. To access CVS, you will want to add the following to set up your environment:
+<pre>
+$ export CVS_RSH=/usr/bin/ssh
+$ export CVSROOT='username@cvs.busybox.net:/var/cvs'</pre>
+<br>
+It goes without saying you must change <em>username</em> to your own
+username...
+<p>
+
+To obtain commit access, you will need to demonstrate you are
+serious by submitting a few good patches first. Then, you will need to
+select a user-name to use when committing stuff, and finally, you will
+need to send me the username you have selected, an ssh key, and the email
+address where you prefer email to be sent (I will forward any email sent
+to you, but not store it).
+
+<p>
+Note that if you would prefer to keep your communications with me
+private, you can encrypt your email using my
+<a href="http://www.codepoet.org/~andersen/erik/gpg.asc">public key</a>.
+
+
+<!-- End of Table -->
+
+</TD></TR>
+</TABLE>
+
+
+
+<!-- Footer -->
+<HR>
+<TABLE WIDTH="100%">
+ <TR>
+ <TD>
+ <font size="-1" face="arial, helvetica, sans-serif">
+ Mail all comments, insults, suggestions and bribes to
+ <a href="mailto:andersen@codepoet.org">Erik Andersen</a><BR>
+ The Busybox logo is copyright 1999-2002, Erik Andersen.
+ </font>
+ </TD>
+
+ <TD>
+ <a href="http://www.vim.org"><img border=0 width=90 height=36
+ src="images/written.in.vi.png"
+ alt="This site created with the vi editor"></a>
+ </TD>
+
+ <TD>
+ <a href="http://www.gimp.org/"><img border=0 width=90 height=36
+ src="images/gfx_by_gimp.png" alt="Graphics by GIMP"></a>
+ </TD>
+
+ <TD>
+ <a href="http://www.linuxtoday.com"><img width=90 height=36
+ src="images/ltbutton2.png" alt="Linux Today"></a>
+ </TD>
+
+ <TD>
+ <p><a href="http://slashdot.org"><img width=90 height=36
+ src="images/sdsmall.png" alt="Slashdot"></a>
+ </TD>
+
+ <TD>
+ <a href="http://freshmeat.net"><img width=90 height=36
+ src="images/fm.mini.png" alt="Freshmeat"></a>
+ </TD>
+
+ </TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
+
+
+
diff --git a/release/src/router/busybox/docs/busybox.net/images/back.png b/release/src/router/busybox/docs/busybox.net/images/back.png
new file mode 100755
index 00000000..79923869
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/back.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/busybox.jpeg b/release/src/router/busybox/docs/busybox.net/images/busybox.jpeg
new file mode 100755
index 00000000..37edc961
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/busybox.jpeg
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/busybox.png b/release/src/router/busybox/docs/busybox.net/images/busybox.png
new file mode 100755
index 00000000..5c4e82a8
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/busybox.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/busybox1.png b/release/src/router/busybox/docs/busybox.net/images/busybox1.png
new file mode 100755
index 00000000..4d3126a5
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/busybox1.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/busybox2.jpg b/release/src/router/busybox/docs/busybox.net/images/busybox2.jpg
new file mode 100755
index 00000000..abf8f061
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/busybox2.jpg
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/busybox3.jpg b/release/src/router/busybox/docs/busybox.net/images/busybox3.jpg
new file mode 100755
index 00000000..0fab84cf
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/busybox3.jpg
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/dir.png b/release/src/router/busybox/docs/busybox.net/images/dir.png
new file mode 100755
index 00000000..1d633ce4
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/dir.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/donate.png b/release/src/router/busybox/docs/busybox.net/images/donate.png
new file mode 100755
index 00000000..b55621bb
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/donate.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/fm.mini.png b/release/src/router/busybox/docs/busybox.net/images/fm.mini.png
new file mode 100755
index 00000000..c0883cd3
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/fm.mini.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/gfx_by_gimp.png b/release/src/router/busybox/docs/busybox.net/images/gfx_by_gimp.png
new file mode 100755
index 00000000..d5831403
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/gfx_by_gimp.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/ltbutton2.png b/release/src/router/busybox/docs/busybox.net/images/ltbutton2.png
new file mode 100755
index 00000000..556f72a6
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/ltbutton2.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/sdsmall.png b/release/src/router/busybox/docs/busybox.net/images/sdsmall.png
new file mode 100755
index 00000000..b1024501
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/sdsmall.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/text.png b/release/src/router/busybox/docs/busybox.net/images/text.png
new file mode 100755
index 00000000..6034f899
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/text.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/images/written.in.vi.png b/release/src/router/busybox/docs/busybox.net/images/written.in.vi.png
new file mode 100755
index 00000000..84f59bc1
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/images/written.in.vi.png
Binary files differ
diff --git a/release/src/router/busybox/docs/busybox.net/index.html b/release/src/router/busybox/docs/busybox.net/index.html
new file mode 100755
index 00000000..552d88bf
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/index.html
@@ -0,0 +1,490 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+"http://www.w3.org/TR/REC-html40/loose.dtd">
+
+<html>
+ <head>
+ <meta name="generator" content=
+ "HTML Tidy for Linux/x86 (vers 1st February 2002), see www.w3.org">
+
+ <title>BusyBox</title>
+<style type="text/css">
+ body {
+ background-color: #DEE2DE;
+ color: #000000;
+ }
+ :link { color: #660000 }
+ :visited { color: #660000 }
+ :active { color: #660000 }
+ div.c3 {text-align: center}
+ td.c2 {font-family: arial, helvetica, sans-serif; font-size: 80%}
+ td.c1 {font-family: lucida, helvetica; font-size: 248%}
+</style>
+ </head>
+
+ <body>
+ <basefont face="lucida, helvetica, arial" size="3">
+
+ <div class="c3">
+ <table border="0" cellspacing="1" cellpadding="2">
+ <tr>
+ <td class="c1">BUSYBOX</td>
+ </tr>
+ </table>
+ <a href="/"><img src="images/busybox1.png" alt="BusyBox"
+ border="0" width="164" height="116"></a><br>
+ <!-- Begin Introduction section -->
+
+
+ <table width="95%" cellspacing="1" cellpadding="4" border=
+ "1">
+ <tr>
+ <td bgcolor="#CCCCC0" align="center"><a name= "intro"><big>
+ <b>The Swiss Army Knife of Embedded Linux</b>
+ </big></a></td>
+ </tr>
+
+ <tr>
+ <td bgcolor="#EEEEE0">
+ 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 GNU
+ fileutils, shellutils, etc. 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 provides a fairly complete POSIX environment for any
+ small or embedded system.
+
+ <p>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 /dev, /etc, and a kernel.</p>
+
+ <p>BusyBox is maintained by <a href=
+ "http://codepoet.org/andersen/erik/erik.html">Erik
+ Andersen</a>, and licensed under the <a href=
+ "http://www.gnu.org/copyleft/gpl.html">GNU GENERAL
+ PUBLIC LICENSE</a>.</p>
+
+ <h3>Screenshot</h3>
+
+ <p>Because everybody loves screenshots, a screenshot of
+ BusyBox is now available <a href=
+ "screenshot.html">right here</a>.</p>
+
+ <h3>Mailing List Information</h3>
+ BusyBox has a <a href="/lists/busybox/">mailing list</a>.<br>
+ To subscribe, go and visit <a href="/mailman/listinfo/busybox">this page</a>.
+ <br>
+ Before asking questions on the mailing list
+ you should probably first search the mailing list archives...
+ <form method="GET" action="http://www.google.com/custom">
+ <input type="hidden" name="domains" value="busybox.net">
+ <input type="hidden" name="sitesearch" value="busybox.net">
+ <a href="http://www.google.com"><img src="http://www.google.com/logos/Logo_25wht.gif" border="0" alt="Google" height="32" width="75" align="middle"></a>&nbsp;<input type="text" name="q" size="31" maxlength="255" value="">&nbsp;<input type="submit" name="sa" value="search the mailing list archives">...
+ </form>
+
+
+
+ <!-- Begin Latest News section -->
+ </td>
+ </tr>
+
+ <tr>
+ <td bgcolor="#CCCCC0" align="center"><a name=
+ "news"><big><b>Latest News</b></big></a></td>
+ </tr>
+
+ <tr>
+ <td bgcolor="#EEEEE0">
+ <ul>
+
+ <p>
+ <li><b>30 July 2003 -- BusyBox 1.0.0-pre2 released</b><p>
+
+ Here goes another pre release for the new BusyBox stable
+ series. The last prerelease (pre1) was given quite a lot of
+ testing (thanks everyone!) which has helped turn up a number of
+ bugs, and these problems have now been fixed.
+
+ <p>
+
+ Highlights of -pre2 include updating the 'ash' shell to sync up
+ with the Debian 'dash' shell, a new 'hdparm' applet was added,
+ init again supports pivot_root, The 'reboot' 'halt' and
+ 'poweroff' applets can now be used without using busybox init.
+ an ifconfig buffer overflow was fixed, losetup now allows
+ read-write loop devices, uClinux daemon support was added, the
+ 'watchdog', 'fdisk', and 'kill' applets were rewritten, there were
+ tons of doc updates, and there were many other bugs fixed.
+ <p>
+
+ If you have submitted a patch and it is not included in this
+ release and Erik has not emailed you explaining why your patch
+ was rejected, it is safe to say that he has lost your patch.
+ That happens sometimes. Please re-submit your patch to the
+ BusyBox mailing list.
+ <p>
+
+ The point of the "-preX" versions is to get a larger group of
+ people and vendors testing, so any problems that turn up can be
+ fixed prior to the final 1.0.0 release. The main feature that
+ is still still on the TODO list before the final BusyBox 1.0.0
+ release is adding module support for the new 2.6.x kernels. If
+ necessary, a -pre3 BusyBox release will happen on August 6th.
+ Hopefully (i.e. unless some horrible catastrophic problem
+ turns up) the final BusyBox 1.0.0 release will be ready by
+ then...
+ <p>
+
+ As usual you can <a href="downloads">download busybox here</a>.
+ You don't really need to bother with the
+ <a href="downloads/Changelog">changelog</a>, as the changes
+ vs the stable version are way too extensive to easily enumerate.
+ But you can take a look if you really want too.
+
+ <p>Have Fun!
+ <p>
+
+
+
+ <p>
+ <li><b>Old News</b><br>
+ For the old news, visit <a href="oldnews.html">the
+ old news page</a>.</li>
+ </ul>
+ </td>
+ </tr>
+
+
+ <!-- Begin Sponsors section -->
+ <tr>
+ <td bgcolor="#CCCCC0" align="center"><a name=
+ "sponsors"><big><b>Sponsors</b></big></a></td>
+ </tr>
+
+ <tr>
+ <td bgcolor="#EEEEE0">
+ Please visit our sponsors and thank them for their
+ support! They have provided money for equipment and
+ bandwidth. Next time you need help with a project,
+ consider these fine companies!
+
+
+ <ul>
+ <li><a href="http://www.penguru.net">Penguru Consulting</a><br>
+ Custom development for embedded Linux systems and multimedia platforms
+ </li>
+
+ <li><a href="http://opensource.se/">opensource.se</a><br>
+ Embedded open source consulting in Europe.
+ </li>
+
+ <li><a href="http://www.codepoet-consulting.com">Codepoet Consulting</a><br>
+ Custom Linux, embedded Linux, BusyBox, and uClibc
+ development.
+ </li>
+
+ </ul>
+ Several individuals have also contributed. If you have
+ already contributed and would like your name added
+ here, just let me know. If you would like to be a
+ BusyBox sponsor, email <a href=
+ "mailto:andersen@codepoet.org">Erik</a>.
+ </td>
+ </tr>
+
+ <!-- Begin Download section -->
+ <p>
+ <tr>
+ <td bgcolor="#CCCCC0" align="center"><a name=
+ "download"><big><b>Download</b></big></a></td>
+ </tr>
+
+ <tr>
+ <td bgcolor="#EEEEE0">
+ Source for the latest release can always be
+ downloaded from <a href="downloads">http://www.busybox.net/downloads</a>.
+ <p>
+
+ BusyBox now has <b>two</b> CVS trees. The "busybox-stable" tree
+ contains the older 0.60.x stable series. The "busybox" tree contains
+ the latest 1.0.0-preX development version of busybox.<br>
+
+ <ul>
+ <li><a href= "downloads/snapshots/">Daily Snapshots of the the latest
+ stable, and the latest development CVS source trees can be found right here</a>.
+ <br>
+ </li><li><a href="/cgi-bin/cvsweb/busybox/">Click here to browse the CVS
+ tree for the 1.0.0-preX development version of BusyBox</a>
+ </li><li><a href="/cgi-bin/cvsweb/busybox.stable/">Click here to browse
+ the CVS tree for the stable 0.60.x version of BusyBox</a>.
+ </li><li>Anonymous <a href="cvs_anon.html">CVS
+ access</a> is available.
+ </li><li>For those that are actively contributing there is
+ even <a href="cvs_write.html">CVS write access</a>.</li>
+ </ul>
+ </td>
+ </tr>
+
+ <!-- Begin Docs section -->
+ <tr>
+ <td bgcolor="#CCCCC0" align="center"><a name=
+ "docs"><big><b>Documentation</b></big></a></td>
+ </tr>
+
+ <tr>
+ <td bgcolor="#EEEEE0">
+ Current documentation for BusyBox includes:
+
+ <ul>
+ <li><a href=
+ "downloads/BusyBox.html">BusyBox.html</a>. This is a
+ list of the all the available commands in BusyBox
+ with complete usage information and examples of how
+ to use each app. I have spent a <em>lot</em> of time
+ updating these docs and trying to make them fairly
+ comprehensive. If you find any errors (factual,
+ grammatical, whatever) please let me know.</li>
+
+ <li><a href="downloads/README">README</a>. This is
+ the README file included in the busybox source
+ release.</li>
+
+ <li>If you need more help, the BusyBox <a href=
+ "lists/busybox/">mailing list</a> is a good place to
+ start.</li>
+ </ul>
+ </td>
+ </tr>
+
+ <!-- Begin Links section -->
+ <tr>
+ <td bgcolor="#CCCCC0" align="center"><a name=
+ "links"><big><b>Important Links</b></big></a></td>
+ </tr>
+
+ <tr>
+ <td bgcolor="#EEEEE0">
+ <ul>
+ <li><a href="http://perens.com/FreeSoftware/">Free
+ Software from Bruce Perens</a><br>
+ The original idea for BusyBox, and all versions up
+ to 0.26 were written by <a href=
+ "mailto:bruce@perens.com">Bruce Perens</a>. This is
+ his BusyBox website.</li>
+
+ <li><a href=
+ "http://freshmeat.net/projects/busybox/">Freshmeat
+ AppIndex record for BusyBox</a></li>
+
+ <li><a href=
+ "http://tinylogin.busybox.net/">TinyLogin</a> is a
+ nice embedded tool for handling authentication,
+ changing passwords, and similar tasks which nicely
+ complements BusyBox.</li>
+
+ <li><a href="http://udhcp.busybox.net/">udhcp</a> is
+ a tiny dhcp client and/or server which is ideal for
+ embedded systems.</li>
+
+ <li><a href="http://www.uclibc.org/">uClibc</a> is a
+ C library for embedded systems. You can actually
+ statically link a "Hello World" application under x86
+ that only takes 4k (as opposed to 200k under GNU
+ libc). It can do dynamic linking too and works nicely
+ with BusyBox to create very small embedded Linux systems.
+ </li>
+ </ul>
+ </td>
+ </tr>
+
+ <!-- Begin Projects section -->
+ <tr>
+ <td bgcolor="#CCCCC0" align="center"><a name=
+ "projects"><big><b>Products/Projects Using BusyBox</b></big></a></td>
+ </tr>
+
+ <tr>
+ <td bgcolor="#EEEEE0">
+ <p>I know of the following products and/or projects
+ that use BusyBox -- listed in the order I happen to add
+ them to the web page:</p>
+
+ <ul>
+
+
+ <li><a href="/cgi-bin/cvsweb/buildroot/">buildroot</a> a configurable
+ means for building your own busybox/uClibc based system systems.
+
+ </li><li><a href=
+ "http://cvs.debian.org/boot-floppies/">
+ Debian installer (boot floppies) project</a>
+
+ </li><li><a href="http://redhat.com/">Red Hat 7.2
+ installer</a>
+
+ </li><li><a href=
+ "http://distro.ibiblio.org/pub/Linux/distributions/slackware/source/rootdsks/">
+ Slackware Installer</a>
+
+ </li><li><a href="http://www.gentoo.org/">Gentoo Linux install/boot CDs</a>
+ </li><li><a href="http://www.mandrake.com/">The Mandrake installer</a>
+
+ </li><li><a href="http://www.linuxrouter.org/">Linux
+ Router Project</a>
+
+ </li><li><a href="http://linux-embedded.org/">LEM</a>
+
+ </li><li><a href=
+ "http://www.toms.net/rb/">tomsrtbt</a>
+
+ </li><li><a href="http://www.stormix.com/">Stormix
+ Installer</a>
+
+ </li><li><a href=
+ "http://www.emacinc.com/linux2_sbc.htm">EMAC Linux
+ 2.0 SBC</a>
+
+ </li><li><a href="http://www.trinux.org/">Trinux</a>
+
+ </li><li><a href="http://oddas.sourceforge.net/">ODDAS
+ project</a>
+
+ </li><li><a href="http://byld.sourceforge.net/">Build Your
+ Linux Disk</a>
+
+ </li><li><a href=
+ "http://homepages.ihug.co.nz/~ichi/baslinux.html">BasicLinux</a>
+
+ </li><li><a href=
+ "http://ibiblio.org/pub/Linux/system/recovery">Zdisk</a>
+
+ </li><li><a href="http://www.adtran.com">AdTran -
+ VPN/firewall VPN Linux Distribution</a>
+
+ </li><li><a href="http://mkcdrec.ota.be/">mkCDrec - make
+ CD-ROM recovery</a>
+
+ </li><li><a href=
+ "http://recycle.lbl.gov/~ldoolitt/bse/">Linux on
+ nanoEngine</a>
+
+ </li><li><a href=
+ "http://www.zelow.no/floppyfw/">Floppyfw</a>
+
+ </li><li><a href="http://midori.transmeta.com/">Midori
+ Linux</a> - <a href=
+ "http://www.wired.com/news/technology/0,1282,42399,00.html">
+ Article on Midori Linux</a> on <a href=
+ "http://www.wired.com">Wired</a>. Quote from Erik at
+ the top of <a href=
+ "http://www.wired.com/news/technology/0,1282,42399-2,00.html">
+ this page</a>
+
+ </li><li><a href="http://www.ltsp.org/">Linux Terminal
+ Server Project</a>
+
+ </li><li><a href=
+ "http://www.devil-linux.org/">Devil-Linux</a>
+
+ </li><li><a href=
+ "http://dutnux.sourceforge.net/">DutNux</a>
+
+ </li><li><a href=
+ "http://www.microwerks.net/~hugo/mindi/">Mindi</a>
+
+ </li><li><a href=
+ "http://www.tzi.de/~pharao90/ttylinux">ttylinux</a>
+
+ </li><li><a href="http://www.coyotelinux.com/">Coyote Linux</a>
+
+ </li><li><a href="http://www.partimage.org/">Partition
+ Image</a>
+
+ </li><li><a href="http://www.fli4l.de/">fli4l the on(e)-disk-router</a>
+
+ </li><li><a href="http://tinfoilhat.cultists.net/">Tinfoil
+ Hat Linux</a>
+
+ </li><li><a href="http://familiar.handhelds.org/">Familiar Linux</a> - a linux distribution for handheld computers
+ </li><li><a href="http://rescuecd.sourceforge.net/">Timo's Rescue CD Set</a>
+ </li><li><a href="http://sf.net/projects/netstation/">Netstation</a>
+ </li><li><a href="http://www.fiwix.org/">GNU/Fiwix Operating System</a>
+ </li><li><a href="http://www.softcraft.com/">Generations Linux</a>
+ </li><li><a href="http://systemimager.org/relatedprojects/">SystemImager / System Installation Suite</a>
+ </li><li><a href="http://www.bablokb.de/gendist/">GENDIST distribution generator</a>
+ </li><li><a href="http://diet-pc.sourceforge.net/">DIET-PC embedded Linux thin client distribution</a>
+ </li><li><a href="http://byzgl.sourceforge.net/">BYZantine Gnu/Linux</a>
+ </li><li><a href="http://dban.sourceforge.net/">Darik's Boot and Nuke</a>
+ </li><li><a href="http://www.timesys.com/">TimeSys real-time Linux</a>
+ </li><li><a href="http://movix.sf.net/">MoviX</a> -- boots from CD and automatically plays every video file on the CD
+ </li><li><a href="http://katamaran.sourceforge.net">katamaran</a>Linux, X11, xfce windowmanager, based on BusyBox
+ </li><li><a href="http://www.sourceforge.net/projects/simplygnustep">Prometheus SimplyGNUstep</a>
+ </li><li><a href="http://www.renyi.hu/~ekho/lowlife/">lowlife</a>A documentation project on how to make your own uClibc-based systems and floppy.
+ </li><li><a href="http://metadistros.hispalinux.es/">Metadistros</a>a project to allow you easily make Live-CD distributions.
+ </li><li><a href="http://salvare.sourceforge.net/">Salvare</a>More Linux than tomsrtbt but less than Knoppix, aims to provide a useful workstation as well as a rescue disk.
+ </li><li><a href="http://www.stresslinux.org/">stresslinux</a>minimal linux distribution running from a bootable cdrom or via PXE.
+ </li><li><a href="http://thinstation.sourceforge.net/">thinstation</a>convert standard PCs into full-featured diskless thinclients.
+ </li><li><a href="http://www.uhulinux.hu/">UHU-Linux Hungary</a>
+
+ </li><li><a href="http://tuxscreen.net">Tuxscreen Linux Phone</a>
+ </li><li><a href="http://www.kerbango.com/">The Kerbango Internet Radio</a>
+ </li><li><a href="http://www.linuxmagic.com/vpn/">LinuxMagic VPN Firewall</a>
+ </li><li><a href="http://www.isilver-inc.com/">I-Silver Linux appliance servers</a>
+ </li><li><a href="http://zaurus.sourceforge.net/">Sharp Zaurus PDA</a>
+ </li><li><a href="http://www.cyclades.com/">Cyclades-TS and other Cyclades products</a>
+ </li><li><a href="http://www.buffalo-technology.com/products/wireless/wbr-g54.htm">Buffalo WBR-G54 wireless router</a>
+ </li><li><a href="http://catalog.belkin.com/IWCatProductPage.process?Merchant_Id=&Section_Id=201522&pcount=&Product_Id=136493">Belkin 54g Wireless DSL/Cable Gateway Router</a>
+ </li><li><a href="http://www.linksys.com/products/product.asp?prid=508">Linksys WRT54G - Wireless-G Broadband Router</a>
+ </li><li><a href="http://www.dell.com/us/en/biz/topics/sbtopic_005_truemobile.htm">Dell TrueMobile 1184</a>
+
+
+ </ul>
+
+ <p>Do you use BusyBox? I'd love to know about it and
+ I'd be happy to link to you. <!-- End of Table -->
+ </p>
+ </td>
+ </tr>
+ </table>
+
+ <!-- Footer -->
+ <hr>
+ <table width="100%">
+ <tr>
+ <td class="c2">Mail all comments, insults, suggestions
+ and bribes to <a href="mailto:andersen@codepoet.org">Erik
+ Andersen</a><br>
+ The Busybox logo is copyright 1999-2002, Erik
+ Andersen.</td>
+
+ <td><a href="http://www.vim.org"><img border="0" width=
+ "90" height="36" src="images/written.in.vi.png" alt=
+ "This site created with the vi editor"></a></td>
+
+ <td><a href="http://www.gimp.org/"><img border="0" width=
+ "90" height="36" src="images/gfx_by_gimp.png" alt=
+ "Graphics by GIMP"></a></td>
+
+ <td><a href="http://www.linuxtoday.com"><img width="90"
+ height="36" src="images/ltbutton2.png" alt="Linux Today">
+ </a></td>
+
+ <td>
+ <p><a href="http://slashdot.org"><img width="90"
+ height="36" src="images/sdsmall.png" alt="Slashdot">
+ </a></p>
+ </td>
+
+ <td><a href="http://freshmeat.net"><img width="90"
+ height="36" src="images/fm.mini.png" alt="Freshmeat">
+ </a></td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>
+
diff --git a/release/src/router/busybox/docs/busybox.net/oldnews.html b/release/src/router/busybox/docs/busybox.net/oldnews.html
new file mode 100755
index 00000000..0dbf993a
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/oldnews.html
@@ -0,0 +1,824 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+
+<HTML>
+<HEAD>
+<TITLE>BusyBox</TITLE>
+</HEAD>
+
+<body text="#000000" alink="#660000" link="#660000" bgcolor="#dee2de" vlink="#660000">
+
+<basefont face="lucida, helvetica, arial" size="3">
+
+
+<CENTER>
+ <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2>
+ <TR>
+ <td bgcolor="#000000">
+ <FONT FACE="lucida, helvetica" COLOR="#ccccc0">
+ <B>B&nbsp;u&nbsp;s&nbsp;y&nbsp;B&nbsp;o&nbsp;x</B>
+ </FONT>
+ </TD>
+ </TR>
+ </TABLE>
+ <a href="/"><IMG SRC="images/busybox2.jpg" alt="BusyBox" border="0" width="360" height="230"</a><BR>
+
+
+<TABLE WIDTH=95% CELLSPACING=1 CELLPADDING=4 BORDER=1>
+
+<!-- Begin Older News section -->
+
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="news">
+ <BIG><B>
+ Older BusyBox News</A>
+ </B></BIG>
+ </A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+
+<ul>
+
+ <p> <li> <b>Take me back to the <a href="/">BusyBox</a> web site.</b>
+ <hr>
+
+
+ <p>
+ <li><b>15 July 2003 -- BusyBox 1.0.0-pre1 released</b><p>
+
+ The busybox development series has been under construction for
+ nearly two years now. Which is just entirely too long... So
+ it is with great pleasure that I announce the imminent release
+ of a new stable series. Due to the huge number of changes
+ since the last stable release (and the usual mindless version
+ number inflation) I am branding this new stable series verison
+ 1.0.x...
+ <p>
+
+ The point of "-preX" versions is to get a larger group of
+ people and vendors testing, so any problems that turn up can be
+ fixed prior to the magic 1.0.0 release (which should happen
+ later this month)... I plan to release BusyBox 1.0.0-pre2 next
+ Monday (July 21st), and, if necessary, -pre3 on July 28th.
+ Hopefully (i.e. unless some horrible catastrophic problem turns
+ up) the final BusyBox 1.0.0 release should be ready by the end
+ of July.
+ <p>
+
+ If you have submitted patches, and they are not in this release
+ and I have not emailed you explaining why your patch was
+ rejected, it is safe to say that I have lost your patch. That
+ happens sometimes. Please do <B>NOT</b> send all your patches,
+ support questions, etc, directly to Erik. I get hundreds of
+ emails every day (which is why I end up losing patches
+ sometimes in the flood)... The busybox mailing list is the
+ right place to send your patches, support questions, etc.
+ <p>
+
+ I would like to especially thank Vladimir Oleynik (vodz), Glenn
+ McGrath (bug1), Robert Griebl (sandman), and Manuel Novoa III
+ (mjn3) for their significant efforts and contributions that
+ have made this release possible.
+ <p>
+
+ As usual you can <a href="downloads">download busybox here</a>.
+ You don't really need to bother with the
+ <a href="downloads/Changelog">changelog</a>, as the changes
+ vs the stable version are way too extensive to easily enumerate.
+ But you can take a look if you really want too.
+
+ <p>Have Fun!
+ <p>
+
+
+
+ <p>
+ <li><b>26 October 2002 -- BusyBox 0.60.5 released</b><p>
+
+ I am very pleased to announce that the BusyBox 0.60.5 (stable)
+ is now available for download. This is a bugfix release for
+ the stable series to address all the problems that have turned
+ up since the last release. Unfortunately, the previous release
+ had a few nasty bugs (i.e. init could deadlock, gunzip -c tried
+ to delete source files, cp -a wouldn't copy symlinks, and init
+ was not always providing controlling ttys when it should have).
+ I know I said that the previous release would be the end of the
+ 0.60.x series. Well, it turns out I'm a liar. But this time I
+ mean it (just like last time ;-). This will be the last
+ release for the 0.60.x series -- all further development work
+ will be done for the development busybox tree. Expect the development
+ version to have its first real release very very soon now...
+
+ <p>
+ The <a href="downloads/Changelog.full">changelog</a> has all
+ the details. As usual you can <a href="downloads">download busybox here</a>.
+ <p>Have Fun!
+ <p>
+
+ <p>
+ <li><b>18 September 2002 -- BusyBox 0.60.4 released</b><p>
+
+ I am very pleased to announce that the BusyBox 0.60.4
+ (stable) is now available for download. This is primarily
+ a bugfix release for the stable series to address all
+ the problems that have turned up since the last
+ release. This will be the last release for the 0.60.x series.
+ I mean it this time -- all further development work will be done
+ on the development busybox tree, which is quite solid now and
+ should soon be getting its first real release.
+
+ <p>
+ The <a href="downloads/Changelog.full">changelog</a> has all
+ the details. As usual you can <a href="downloads">download busybox here</a>.
+ <p>Have Fun!
+ <p>
+
+
+ <p>
+ <li><b>27 April 2002 -- BusyBox 0.60.3 released</b><p>
+
+ I am very pleased to announce that the BusyBox 0.60.3 (stable) is
+ now available for download. This is primarily a bugfix release
+ for the stable series. A number of problems have turned up since
+ the last release, and this should address most of those problems.
+ This should be the last release for the 0.60.x series. The
+ development busybox tree has been progressing nicely, and will
+ hopefully be ready to become the next stable release.
+
+ <p>
+ The <a href="downloads/Changelog">changelog</a> has all
+ the details. As usual you can <a href="downloads">download busybox here</a>.
+ <p>Have Fun!
+ <p>
+
+
+ <p>
+ <li><b>6 March 2002 -- busybox.net now has mirrors!</b><p>
+
+ Busybox.net is now much more available, thanks to
+ the fine folks at <a href= "http://i-netinnovations.com/">http://i-netinnovations.com/</a>
+ who are providing hosting for busybox.net and
+ uclibc.org. In addition, we now have two mirrors:
+ <a href= "http://busybox.linuxmagic.com/">http://busybox.linuxmagic.com/</a>
+ in Canada and
+ <a href= "http://busybox.csservers.de/">http://busybox.csservers.de/</a>
+ in Germany. I hope this makes things much more
+ accessible for everyone!
+
+
+ <li>
+ <b>3 January 2002 -- Welcome to busybox.net!</b>
+
+ <p>Thanks to the generosity of a number of busybox
+ users, we have been able to purchase busybox.net
+ (which is where you are probably reading this).
+ Right now, busybox.net and uclibc.org are both
+ living on my home system (at the end of my DSL
+ line). I apologize for the abrupt move off of
+ busybox.lineo.com. Unfortunately, I no longer have
+ the access needed to keep that system updated (for
+ example, you might notice the daily snapshots there
+ stopped some time ago).</p>
+
+ <p>Busybox.net is currently hosted on my home
+ server, at the end of a DSL line. Unfortunately,
+ the load on them is quite heavy. To address this,
+ I'm trying to make arrangements to get busybox.net
+ co-located directly at an ISP. To assist in the
+ co-location effort, <a href=
+ "http://www.codepoet.org/~markw">Mark Whitley</a>
+ (author of busybox sed, cut, and grep) has donated
+ his <a href=
+ "http://www.netwinder.org/">NetWinder</a> computer
+ for hosting busybox.net and uclibc.org. Once this
+ system is co-located, the current speed problems
+ should be completely eliminated. Hopefully, too,
+ some of you will volunteer to set up some mirror
+ sites, to help to distribute the load a bit.</p>
+
+ <p><!--
+ <center>
+ Click here to help support busybox.net!
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
+ <input type="hidden" name="cmd" value="_xclick">
+ <input type="hidden" name="business" value="andersen@codepoet.org">
+ <input type="hidden" name="item_name" value="Support Busybox">
+ <input type="hidden" name="image_url" value="https://codepoet-consulting.com/images/busybox2.jpg">
+ <input type="hidden" name="no_shipping" value="1">
+ <input type="image" src="images/donate.png" border="0" name="submit" alt="Make donation using PayPal">
+ </form>
+ </center>
+ -->
+ Since some people expressed concern over BusyBox
+ donations, let me assure you that no one is getting
+ rich here. All BusyBox and uClibc donations will be
+ spent paying for bandwidth and needed hardware
+ upgrades. For example, Mark's NetWinder currently
+ has just 64Meg of memory. As demonstrated when
+ google spidered the site the other day, 64 Megs in
+ not enough, so I'm going to be ordering 256Megs of
+ ram and a larger hard drive for the box today. So
+ far, donations received have been sufficient to
+ cover almost all expenses. In the future, we may
+ have co-location fees to worry about, but for now
+ we are ok. A <b>HUGE thank-you</b> goes out to
+ everyone that has contributed!<br>
+ -Erik</p>
+ </li>
+
+ <li>
+ <b>20 November 2001 -- BusyBox 0.60.2 released</b>
+
+ <p>We am very pleased to announce that the BusyBox
+ 0.60.2 (stable) is now released to the world. This
+ one is primarily a bugfix release for the stable
+ series, and it should take care of most everyone's
+ needs till we can get the nice new stuff we have
+ been working on in CVS ready to release (with the
+ wonderful new buildsystem). The biggest change in
+ this release (beyond bugfixes) is the fact that msh
+ (the minix shell) has been re-worked by Vladimir N.
+ Oleynik (vodz) and so it no longer crashes when
+ told to do complex things with backticks.</p>
+
+ <p>This release has been tested on x86, ARM, and
+ powerpc using glibc 2.2.4, libc5, and uClibc, so it
+ should work with just about any Linux system you
+ throw it at. See the <a href=
+ "downloads/Changelog">changelog</a> for <small>most
+ of</small> the details. The last release was
+ <em>very</em> solid for people, and this one should
+ be even better.</p>
+
+ <p>As usual BusyBox 0.60.2 can be downloaded from
+ <a href=
+ "downloads">http://www.busybox.net/downloads</a>.</p>
+
+ <p>Have Fun.<br>
+ -Erik</p>
+ </li>
+
+ <li> <b>18 November 2001 -- Help us buy busybox.net!</b>
+
+ <!-- Begin PayPal Logo -->
+ <center>
+ Click here to help buy busybox.net!
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
+ <input type="hidden" name="cmd" value="_xclick">
+ <input type="hidden" name="business" value="andersen@codepoet.org">
+ <input type="hidden" name="item_name" value="Support Busybox">
+ <input type="hidden" name="image_url" value="https://busybox.net/images/busybox2.jpg">
+ <input type="hidden" name="no_shipping" value="1">
+ <input type="image" src="images/donate.png" border="0" name="submit" alt="Make donation using PayPal">
+ </form>
+ </center>
+ <!-- End PayPal Logo -->
+
+ I've contacted the current owner of busybox.net and he is willing
+ to sell the domain name -- for $250. He also owns busybox.org but
+ will not part with it... I will then need to pay the registry fee
+ for a couple of years and start paying for bandwidth, so this will
+ initially cost about $300. I would like to host busybox.net on my
+ home machine (codepoet.org) so I have full control over the system,
+ but to do that would require that I increase the level of bandwidth
+ I am paying for. Did you know that so far this month, there
+ have been over 1.4 Gigabytes of busybox ftp downloads? I don't
+ even <em>know</em> how much CVS bandwidth it requires. For the
+ time being, Lineo has continued to graciously provide this
+ bandwidth, despite the fact that I no longer work for them. If I
+ start running this all on my home machine, paying for the needed bandwidth
+ will start costing some money.
+ <p>
+
+ I was going to pay it all myself, but my wife didn't like that
+ idea at all (big surprise). It turns out &lt;insert argument
+ where she wins and I don't&gt; she has better ideas
+ about what we should spend our money on that don't involve
+ busybox. She suggested I should ask for contributions on the
+ mailing list and web page. So...
+ <p>
+
+ I am hoping that if everyone could contribute a bit, we could pick
+ up the busybox.net domain name and cover the bandwidth costs. I
+ know that busybox is being used by a lot of companies as well as
+ individuals -- hopefully people and companies that are willing to
+ contribute back a bit. So if everyone could please help out, that
+ would be wonderful!
+ <p>
+
+
+ <li> <b>23 August 2001 -- BusyBox 0.60.1 released</b>
+ <br>
+
+ This is a relatively minor bug fixing release that fixes
+ up the bugs that have shown up in the stable release in
+ the last few weeks. Fortunately, nothing <em>too</em>
+ serious has shown up. This release only fixes bugs -- no
+ new features, no new applets. So without further ado,
+ here it is. Come and get it.
+ <p>
+ The
+ <a href="downloads/Changelog">changelog</a> has all
+ the details. As usual BusyBox 0.60.1 can be downloaded from
+ <a href="downloads">http://busybox.net/downloads</a>.
+ <p>Have Fun!
+ <p>
+
+
+ <li> <b>2 August 2001 -- BusyBox 0.60.0 released</b>
+ <br>
+ I am very pleased to announce the immediate availability of
+ BusyBox 0.60.0. I have personally tested this release with libc5, glibc,
+ and <a href="http://uclibc.org/">uClibc</a> on
+ x86, ARM, and powerpc using linux 2.2 and 2.4, and I know a number
+ of people using it on everything from ia64 to m68k with great success.
+ Everything seems to be working very nicely now, so getting a nice
+ stable bug-free(tm) release out seems to be in order. This releases fixes
+ a memory leak in syslogd, a number of bugs in the ash and msh shells, and
+ cleans up a number of things.
+
+ <p>
+
+ Those wanting an easy way to test the 0.60.0 release with uClibc can
+ use <a href="http://user-mode-linux.sourceforge.net/">User-Mode Linux</a>
+ to give it a try by downloading and compiling
+ <a href="ftp://busybox.net/buildroot.tar.gz">buildroot.tar.gz</a>.
+ You don't have to be root or reboot your machine to run test this way.
+ Preconfigured User-Mode Linux kernel source is also on busybox.net.
+ <p>
+ Another cool thing is the nifty <a href="downloads/tutorial/index.html">
+ BusyBox Tutorial</a> contributed by K Computing. This requires
+ a ShockWave plugin (or standalone viewer), so you may want to grab the
+ the GPLed shockwave viewer from <a href="http://www.swift-tools.com/Flash/flash-0.4.10.tgz">here</a>
+ to view the tutorial.
+ <p>
+
+ Finally, In case you didn't notice anything odd about the
+ version number of this release, let me point out that this release
+ is <em>not</em> 0.53, because I bumped the version number up a
+ bit. This reflects the fact that this release is intended to form
+ a new stable BusyBox release series. If you need to rely on a
+ stable version of BusyBox, you should plan on using the stable
+ 0.60.x series. If bugs show up then I will release 0.60.1, then
+ 0.60.2, etc... This is also intended to deal with the fact that
+ the BusyBox build system will be getting a major overhaul for the
+ next release and I don't want that to break products that people
+ are shipping. To avoid that, the new build system will be
+ released as part of a new BusyBox development series that will
+ have some not-yet-decided-on odd version number. Once things
+ stabilize and the new build system is working for everyone, then
+ I will release that as a new stable release series.
+
+ <p>
+ The
+ <a href="downloads/Changelog">changelog</a> has all
+ the details. As usual BusyBox 0.60.0 can be downloaded from
+ <a href="downloads">http://busybox.net/downloads</a>.
+ <p>Have Fun!
+ <p>
+
+
+ <li> <b>7 July 2001 -- BusyBox 0.52 released</b>
+ <br>
+
+ I am very pleased to announce the immediate availability of
+ BusyBox 0.52 (the "new-and-improved rock-solid release"). This
+ release is the result of <em>many</em> hours of work and has tons
+ of bugfixes, optimizations, and cleanups. This release adds
+ several new applets, including several new shells (such as hush, msh,
+ and ash).
+
+ <p>
+ The
+ <a href="downloads/Changelog">changelog</a> covers
+ some of the more obvious details, but there are many many things that
+ are not mentioned, but have been improved in subtle ways. As usual,
+ BusyBox 0.52 can be downloaded from
+ <a href="downloads">http://busybox.net/downloads</a>.
+ <p>Have Fun!
+ <p>
+
+
+ <li> <b>10 April 2001 - Graph of Busybox Growth </b>
+ <br>
+ The illustrious Larry Doolittle has made a PostScript chart of the growth
+ of the Busybox tarball size over time. It is available for downloading /
+ viewing <a href= "busybox-growth.ps"> right here</a>.
+
+ <p> (Note that while the number of applets in Busybox has increased, you
+ can still configure Busybox to be as small as you want by selectively
+ turning off whichever applets you don't need.)
+ <p>
+
+
+ <li> <b>10 April 2001 -- BusyBox 0.51 released</b>
+ <br>
+
+ BusyBox 0.51 (the "rock-solid release") is now out there. This
+ release adds only 2 new applets: env and vi. The vi applet,
+ contributed by Sterling Huxley, is very functional, and is only
+ 22k. This release fixes 3 critical bugs in the 0.50 release.
+ There were 2 potential segfaults in lash (the busybox shell) in
+ the 0.50 release which are now fixed. Another critical bug in
+ 0.50 which is now fixed: syslogd from 0.50 could potentially
+ deadlock the init process and thereby break your entire system.
+ <p>
+
+ There are a number of improvements in this release as well. For
+ one thing, the wget applet is greatly improved. Dmitry Zakharov
+ added FTP support, and Laurence Anderson make wget fully RFC
+ compliant for HTTP 1.1. The mechanism for including utility
+ functions in previous releases was clumsy and error prone. Now
+ all utility functions are part of a new libbb library, which makes
+ maintaining utility functions much simpler. And BusyBox now
+ compiles on itanium systems (thanks to the Debian itanium porters
+ for letting me use their system!).
+ <p>
+ You can read the
+ <a href="downloads/Changelog">changelog</a> for
+ complete details. BusyBox 0.51 can be downloaded from
+ <a href="downloads">http://busybox.net/downloads</a>.
+ <p>Have Fun!
+ <p>
+
+ <li> <b>Busybox Boot-Floppy Image</b>
+
+ <p>Because you asked for it, we have made available a <a href=
+ "downloads/busybox.floppy.img"> Busybox boot floppy
+ image</a>. Here's how you use it:
+
+ <ol>
+
+ <li> <a href= "downloads/busybox.floppy.img">
+ Download the image</a>
+
+ <li> dd it onto a floppy like so: <tt> dd if=busybox.floppy.img
+ of=/dev/fd0 ; sync </tt>
+
+ <li> Pop it in a machine and boot up.
+
+ </ol>
+
+ <p> If you want to look at the contents of the initrd image, do this:
+
+ <pre>
+ mount ./busybox.floppy.img /mnt -o loop -t msdos
+ cp /mnt/initrd.gz /tmp
+ umount /mnt
+ gunzip /tmp/initrd.gz
+ mount /tmp/initrd /mnt -o loop -t minix
+ </pre>
+
+
+ <li> <b>15 March 2001 -- BusyBox 0.50 released</b>
+ <br>
+
+ This release adds several new applets including ifconfig, route, pivot_root, stty,
+ and tftp, and also fixes tons of bugs. Tab completion in the
+ shell is now working very well, and the shell's environment variable
+ expansion was fixed. Tons of other things were fixed or made
+ smaller. For a fairly complete overview, see the
+ <a href="downloads/Changelog">changelog</a>.
+ <p>
+ lash (the busybox shell) is still with us, fixed up a bit so it
+ now behaves itself quite nicely. It really is quite usable as
+ long as you don't expect it to provide Bourne shell grammer.
+ Standard things like pipes, redirects, command line editing, and
+ environment variable expansion work great. But we have found that
+ this shell, while very usable, does not provide an extensible
+ framework for adding in full Bourne shell behavior. So the first order of
+ business as we begin working on the next BusyBox release will be to merge in the new shell
+ currently in progress at
+ <a href="http://doolittle.faludi.com/~larry/parser.html">Larry Doolittle's website</a>.
+ <p>
+
+
+ <li> <b>27 January 2001 -- BusyBox 0.49 released</b>
+ <br>
+
+ Several new applets, lots of bug fixes, cleanups, and many smaller
+ things made nicer. Several cleanups and improvements to the shell.
+ For a list of the most interesting changes
+ you might want to look at the <a href="downloads/Changelog">changelog</a>.
+ <p>
+ Special thanks go out to Matt Kraai and Larry Doolittle for all their
+ work on this release, and for keeping on top of things while I've been
+ out of town.
+ <p>
+ <em>Special Note</em><br>
+
+ BusyBox 0.49 was supposed to have replaced lash, the BusyBox
+ shell, with a new shell that understands full Bourne shell/Posix shell grammer.
+ Well, that simply didn't happen in time for this release. A new
+ shell that will eventually replace lash is already under
+ construction. This new shell is being developed by Larry
+ Doolittle, and could use all of our help. Please see the work in
+ progress on <a href="http://doolittle.faludi.com/~larry/parser.html">Larry's website</a>
+ and help out if you can. This shell will be included in the next
+ release of BusyBox.
+ <p>
+
+ <li> <b>13 December 2000 -- BusyBox 0.48 released</b>
+ <br>
+
+ This release fixes lots and lots of bugs. This has had some very
+ rigorous testing, and looks very, very clean. The usual tar
+ update of course: tar no longer breaks hardlinks, tar -xzf is
+ optionally supported, and the LRP folks will be pleased to know
+ that 'tar -X' and 'tar --exclude' are both now in. Applets are
+ now looked up using a binary search making lash (the busybox
+ shell) much faster. For the new debian-installer (for Debian
+ woody) a .udeb can now be generated.
+ <p>
+ The curious can get a list of some of the more interesting changes by reading
+ the <a href="downloads/Changelog">changelog</a>.
+ <p>
+ Many thanks go out to the many many people that have contributed to
+ this release, especially Matt Kraai, Larry Doolittle, and Kent Robotti.
+ <p>
+ <p> <li> <b>26 September 2000 -- BusyBox 0.47 released</b>
+ <br>
+
+ This release fixes lots of bugs (including an ugly bug in 0.46
+ syslogd that could fork-bomb your system). Added several new
+ apps: rdate, wget, getopt, dos2unix, unix2dos, reset, unrpm,
+ renice, xargs, and expr. syslogd now supports network logging.
+ There are the usual tar updates. Most apps now use getopt for
+ more correct option parsing.
+ See the <a href="downloads/Changelog">changelog</a>
+ for complete details.
+
+
+ <p> <li> <b>11 July 2000 -- BusyBox 0.46 released</b>
+ <br>
+
+ This release fixes several bugs (including a ugly bug in tar,
+ and fixes for NFSv3 mount support). Added a dumpkmap to allow
+ people to dump a binary keymaps for use with 'loadkmap', and a
+ completely reworked 'grep' and 'sed' which should behave better.
+ BusyBox shell can now also be used as a login shell.
+ See the <a href="downloads/Changelog">changelog</a>
+ for complete details.
+
+
+ <p> <li> <b>21 June 2000 -- BusyBox 0.45 released</b>
+ <br>
+
+ This release has been slow in coming, but is very solid at this
+ point. BusyBox now supports libc5 as well as GNU libc. This
+ release provides the following new apps: cut, tr, insmod, ar,
+ mktemp, setkeycodes, md5sum, uuencode, uudecode, which, and
+ telnet. There are bug fixes for just about every app as well (see
+ the <a href="downloads/Changelog">changelog</a> for
+ details).
+ <p>
+ Also, some exciting infrastructure news! Busybox now has its own
+ <a href="lists/busybox/">mailing list</a>,
+ publically browsable
+ <a href="/cgi-bin/cvsweb/busybox/">CVS tree</a>,
+ anonymous
+ <a href="cvs_anon.html">CVS access</a>, and
+ for those that are actively contributing there is even
+ <a href="cvs_write.html">CVS write access</a>.
+ I think this will be a huge help to the ongoing development of BusyBox.
+ <p>
+ Also, for the curious, there is no 0.44 release. Somehow 0.44 got announced
+ a few weeks ago prior to its actually being released. To avoid any confusion
+ we are just skipping 0.44.
+ <p>
+ Many thanks go out to the many people that have contributed to this release
+ of BusyBox (esp. Pavel Roskin)!
+
+
+ <p> <li> <b>19 April 2000 -- syslogd bugfix</b>
+ <br>
+ Turns out that there was still a bug in busybox syslogd.
+ For example, with the following test app:
+<pre>
+ #include &lt;syslog.h&gt;
+
+ int do_log(char* msg, int delay)
+ {
+ openlog("testlog", LOG_PID, LOG_DAEMON);
+ while(1) {
+ syslog(LOG_ERR, "%s: testing one, two, three\n", msg);
+ sleep(delay);
+ }
+ closelog();
+ return(0);
+ };
+
+ int main(void)
+ {
+ if (fork()==0)
+ do_log("A", 2);
+ do_log("B", 3);
+ }
+</pre>
+ it should be logging stuff from both "A" and "B". As released in 0.43 only stuff
+ from "A" would have been logged. This means that if init tries to log something
+ while say ppp has the syslog open, init would block (which is bad, bad, bad).
+ <p>
+ Karl M. Hegbloom has created a fix for the problem.
+ Thanks Karl!
+
+
+ <p> <li> <b>18 April 2000 -- BusyBox 0.43 released (finally!)</b>
+ <br>
+ I have finally gotten everything into a state where I feel pretty
+ good about things. This is definitely the most stable, solid release
+ so far. A lot of bugs have been fixed, and the following new apps
+ have been added: sh, basename, dirname, killall, uptime,
+ freeramdisk, tr, echo, test, and usleep. Tar has been completely
+ rewritten from scratch. Bss size has also been greatly reduced.
+ More details are available in the
+ <a href="downloads/Changelog">changelog</a>.
+ Oh, and as a special bonus, I wrote some fairly comprehensive
+ <em>documentation</em>, complete with examples and full usage information.
+
+ <p>
+ Many thanks go out to the fine people that have helped by submitting patches
+ and bug reports; particularly instrumental in helping for this release were
+ Karl Hegbloom, Pavel Roskin, Friedrich Vedder, Emanuele Caratti,
+ Bob Tinsley, Nicolas Pitre, Avery Pennarun, Arne Bernin, John Beppu, and Jim Gleason.
+ There were others so if I somehow forgot to mention you, I'm very sorry.
+ <p>
+
+ You can grab BusyBox 0.43 tarballs <a href="downloads">here</a>.
+
+ <p> <li> <b>9 April 2000 -- BusyBox 0.43 pre release</b>
+ <br>
+ Unfortunately, I have not yet finished all the things I want to
+ do for BusyBox 0.43, so I am posting this pre-release for people
+ to poke at. This contains my complete rewrite of tar, which now weighs in at
+ 5k (7k with all options turned on) and works for reading and writing
+ tarballs (which it does correctly for everything I have been able to throw
+ at it). Tar also (optionally) supports the "--exclude" option (mainly because
+ the Linux Router Project folks asked for it). This also has a pre-release
+ of the micro shell I have been writing. This pre-release should be stable
+ enough for production use -- it just isn't a release since I have some structural
+ changes I still want to make.
+ <p>
+ The pre-release can be found <a href="downloads">here</a>.
+ Please let me know ASAP if you find <em>any</em> bugs.
+
+ <p> <li> <b>28 March 2000 -- Andersen Baby Boy release</b>
+ <br>
+ I am pleased to announce that on Tuesday March 28th at 5:48pm, weighing in at 7
+ lbs. 12 oz, Micah Erik Andersen was born at LDS Hospital here in Salt Lake City.
+ He was born in the emergency room less then 5 minutes after we arrived -- and
+ it was such a relief that we even made it to the hospital at all. Despite the
+ fact that I was driving at an amazingly unlawful speed and honking at everybody
+ and thinking decidedly unkind thoughts about the people in our way, my wife
+ (inconsiderate of my feelings and complete lack of medical training) was lying
+ down in the back seat saying things like "I think I need to start pushing now"
+ (which she then proceeded to do despite my best encouraging statements to the
+ contrary).
+ <p>
+ Anyway, I'm glad to note that despite the much-faster-than-we-were-expecting
+ labor, both Shaunalei and our new baby boy are doing wonderfully.
+ <p>
+ So now that I am done with my excuse for the slow release cycle...
+ Progress on the next release of BusyBox has been slow but steady. I expect
+ to have a release sometime during the first week of April. This release will
+ include a number of important changes, including the addition of a shell, a
+ re-write of tar (to accommodate the Linux Router Project), and syslogd can now
+ accept multiple concurrent connections, fixing lots of unexpected blocking
+ problems.
+
+
+ <p> <li> <b>11 February 2000 -- BusyBox 0.42 released</b>
+ <br>
+
+ This is the most solid BusyBox release so far. Many, many
+ bugs have been fixed. See the
+ <a href="downloads/Changelog">changelog</a> for details.
+
+ Of particular interest, init will now cleanly unmount
+ filesystems on reboot, cp and mv have been rewritten and
+ behave much better, and mount and umount no longer leak
+ loop devices. Many thanks go out to Randolph Chung,
+ Karl M. Hegbloom, Taketoshi Sano, and Pavel Roskin for
+ their hard work on this release of BusyBox. Please pound
+ on it and let me know if you find any bugs.
+
+ <p> <li> <b>19 January 2000 -- BusyBox 0.41 released</b>
+ <br>
+
+ This release includes bugfixes to cp, mv, logger, true, false,
+ mkdir, syslogd, and init. New apps include wc, hostid,
+ logname, tty, whoami, and yes. New features include loop device
+ support in mount and umount, and better TERM handling by init.
+ The changelog can be found <a href="downloads/Changelog">here</a>.
+
+ <p> <li> <b>7 January 2000 -- BusyBox 0.40 released</b>
+ <br>
+
+ This release includes bugfixes to init (now includes inittab support),
+ syslogd, head, logger, du, grep, cp, mv, sed, dmesg, ls, kill, gunzip, and mknod.
+ New apps include sort, uniq, lsmod, rmmod, fbset, and loadacm.
+ In particular, this release fixes an important bug in tar which
+ in some cases produced serious security problems.
+ As always, the changelog can be found <a href="downloads/Changelog">here</a>.
+
+ <p> <li> <b>11 December 1999 -- BusyBox Website</b>
+ <br>
+ I have received permission from Bruce Perens (the original author of BusyBox)
+ to set up this site as the new primary website for BusyBox. This website
+ will always contain pointers to the latest and greatest, and will also
+ contain the latest documentation on how to use BusyBox, what it can do,
+ what arguments its apps support, etc.
+
+ <p> <li> <b>10 December 1999 -- BusyBox 0.39 released</b>
+ <br>
+ This release includes fixes to init, reboot, halt, kill, and ls, and contains
+ the new apps ping, hostname, mkfifo, free, tail, du, tee, and head. A full
+ changelog can be found <a href="downloads/Changelog">here</a>.
+ <p> <li> <b>5 December 1999 -- BusyBox 0.38 released</b>
+ <br>
+ This release includes fixes to tar, cat, ls, dd, rm, umount, find, df,
+ and make install, and includes new apps syslogd/klogd and logger.
+</ul>
+
+
+<!-- Begin Links section -->
+
+<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
+ <A NAME="links">
+ <BIG><B>
+ Important Links</A>
+ </B></BIG>
+ </A>
+</TD></TR>
+<TR><TD BGCOLOR="#eeeee0">
+
+<ul>
+
+ <li> <a href="/">Take me back to http://busybox.net/</a>.
+ <p>
+
+ <li> <A HREF="http://perens.com/FreeSoftware/">
+ Free Software from Bruce Perens</A><br>
+ The original idea for BusyBox, and all versions up to 0.26 were written
+ by <A HREF="mailto:bruce@perens.com">Bruce Perens</a>. This is his BusyBox website.
+ <p>
+
+ <li> <A HREF="http://freshmeat.net/appindex/1999/04/11/923859921.html">
+ Freshmeat AppIndex record for BusyBox</A>
+ <p>
+
+</ul>
+
+
+<!-- End of Table -->
+
+</TD></TR>
+</TABLE>
+</P>
+
+
+
+<!-- Footer -->
+<HR>
+<TABLE WIDTH="100%">
+ <TR>
+ <TD>
+ <font size="-1" face="arial, helvetica, sans-serif">
+ Mail all comments, insults, suggestions and bribes to
+ <a href="mailto:andersen@codepoet.org">Erik Andersen</a><BR>
+ The Busybox logo is copyright 1999-2002, Erik Andersen.
+ </font>
+ </TD>
+
+ <TD>
+ <a href="http://www.vim.org"><img border=0 width=88 height=32
+ src="images/anim.written.in.vi.gif"
+ alt="This site created with the vi editor"></a>
+ </TD>
+
+ <TD>
+ <a href="http://www.gimp.org/"><img border=0 width=88 height=38
+ src="images/gfx_by_gimp.gif" alt="Graphics by GIMP"></a>
+ </TD>
+
+ <TD>
+ <a href="http://www.linuxtoday.com"><img width=90 height=36
+ src="images/ltbutton2.jpg" alt="Linux Today"></a>
+ </TD>
+
+ <TD>
+ <p><a href="http://slashdot.org"><img width=90 height=36
+ src="images/sdsmall.gif" alt="Slashdot"></a>
+ </TD>
+
+ <TD>
+ <a href="http://freshmeat.net"><img width=90 height=36
+ src="images/fm.mini.jpg" alt="Freshmeat"></a>
+ </TD>
+
+ </TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
+
diff --git a/release/src/router/busybox/docs/busybox.net/robots.txt b/release/src/router/busybox/docs/busybox.net/robots.txt
new file mode 100644
index 00000000..086578d0
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/robots.txt
@@ -0,0 +1,3 @@
+# go away
+User-agent: *
+Disallow: /cgi-bin
diff --git a/release/src/router/busybox/docs/busybox.net/screenshot.html b/release/src/router/busybox/docs/busybox.net/screenshot.html
new file mode 100755
index 00000000..5a8020c0
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.net/screenshot.html
@@ -0,0 +1,71 @@
+<html>
+
+<head>
+
+<title> Busybox Screenshot! </title>
+
+<meta name="Author" content="Mark Whitley">
+<meta name="Description" content="A screenshot of Busybox">
+
+</head>
+
+<body text="#000000" alink="#660000" link="#660000" bgcolor="#dee2de" vlink="#660000">
+
+<h1> Busybox Screenshot! </h1>
+
+<TABLE WIDTH="80%" CELLSPACING=1 CELLPADDING=4 BORDER=1>
+<TR><TD BGCOLOR="#000000">
+
+
+<pre style="background-color: black; color: lightgreen; padding: 5px;
+font-family: monospace; font-size: smaller;" width="80%">
+
+
+$ ./busybox
+BusyBox v1.00-pre1 (2003.07.15-06:37+0000) multi-call binary
+
+Usage: busybox [function] [arguments]...
+ or: [function] [arguments]...
+
+ BusyBox is a multi-call binary that combines many common Unix
+ utilities into a single executable. Most people will create a
+ link to busybox for each function they wish to use, and BusyBox
+ will act like whatever it was invoked as.
+
+Currently defined functions:
+ [, addgroup, adduser, adjtimex, ar, arping, ash, awk, basename,
+ bunzip2, busybox, bzcat, cal, cat, chgrp, chmod, chown, chroot,
+ chvt, clear, cmp, cp, cpio, crond, crontab, cut, date, dc, dd,
+ deallocvt, delgroup, deluser, df, dirname, dmesg, dos2unix, dpkg,
+ dpkg-deb, du, dumpkmap, dumpleases, dutmp, echo, egrep, env, expr,
+ false, fbset, fdflush, fdformat, fgrep, find, fold, free, freeramdisk,
+ fsck.minix, ftpget, ftpput, getopt, getty, grep, gunzip, gzip,
+ halt, head, hexdump, hostid, hostname, httpd, hush, hwclock, id,
+ ifconfig, ifdown, ifup, inetd, init, insmod, ip, ipcalc, iplink,
+ iproute, iptunnel, kill, killall, klogd, lash, length, linuxrc,
+ ln, loadacm, loadfont, loadkmap, logger, login, logname, logread,
+ losetup, ls, lsmod, makedevs, md5sum, mesg, minit, mkdir, mkfifo,
+ mkfs.minix, mknod, mkswap, mktemp, modprobe, more, mount, msh,
+ msvc, mt, mv, nameif, nc, netstat, nslookup, od, openvt, passwd,
+ patch, pidfilehack, pidof, ping, ping6, pivot_root, poweroff,
+ printf, ps, pwd, rdate, readlink, realpath, reboot, renice, reset,
+ rm, rmdir, rmmod, route, rpm, rpm2cpio, run-parts, sed, setkeycodes,
+ sha1sum, sleep, sort, start-stop-daemon, strings, stty, su, sulogin,
+ swapoff, swapon, sync, syslogd, tail, tar, tee, telnet, telnetd,
+ test, tftp, time, top, touch, tr, traceroute, true, tty, udhcpc,
+ udhcpd, umount, uname, uncompress, uniq, unix2dos, unzip, update,
+ uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, watch,
+ watchdog, wc, wget, which, who, whoami, xargs, yes, zcat
+
+
+$ <blink>_</blink>
+
+</pre>
+
+</TD></TR>
+</TABLE>
+
+</body>
+
+</html>
+
diff --git a/release/src/router/busybox/docs/busybox.pod b/release/src/router/busybox/docs/busybox.pod
new file mode 100644
index 00000000..f6d3e6fc
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.pod
@@ -0,0 +1,2651 @@
+# 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<-h> option to provide a
+terse runtime description of their behavior.
+
+=head1 COMMANDS
+
+Currently defined functions include:
+
+adjtimex, ar, basename, busybox, cat, chgrp, chmod, chown, chroot, chvt, clear,
+cmp, cp, cpio, cut, date, dc, dd, deallocvt, df, dirname, dmesg, dos2unix, dpkg,
+dpkg-deb, du, dumpkmap, dutmp, echo, expr, false, fbset, fdflush, find, free,
+freeramdisk, fsck.minix, getopt, grep, gunzip, gzip, halt, head, hostid,
+hostname, id, ifconfig, init, insmod, kill, killall, klogd, length, ln,
+loadacm, loadfont, loadkmap, logger, logname, ls, lsmod, makedevs, md5sum,
+mkdir, mkfifo, mkfs.minix, mknod, mkswap, mktemp, more, mount, mt, mv, nc,
+nslookup, ping, pivot_root, poweroff, printf, ps, pwd, rdate, readlink, reboot,
+renice, reset, rm, rmdir, rmmod, route, rpm2cpio, rpmunpack, sed, setkeycodes,
+sh, sleep, sort, stty, swapoff, swapon, sync, syslogd, tail, tar, tee, telnet,
+test, tftp, touch, tr, true, tty, umount, uname, uniq, unix2dos, update, uptime,
+usleep, uudecode, uuencode, watchdog, wc, wget, which, whoami, xargs, yes, zcat,
+[
+
+=over 4
+
+=item B<adjtimex>
+
+adjtimex [B<-q>] [B<-o> offset] [B<-f> frequency] [B<-p> timeconstant] [B<-t> tick]
+
+Reads and optionally sets system timebase parameters.
+See adjtimex(2).
+
+Options:
+
+ -q quiet mode - do not print
+ -o offset time offset, microseconds
+ -f frequency frequency adjust, integer kernel units (65536 is 1ppm)
+ (positive values make the system clock run fast)
+ -t tick microseconds per tick, usually 10000
+ -p timeconstant
+
+-------------------------------
+
+=item B<ar>
+
+ar -[ov][ptx] ARCHIVE FILES
+
+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 B<basename>
+
+basename FILE [SUFFIX]
+
+Strips directory path and suffixes from FILE.
+If specified, also removes any trailing SUFFIX.
+
+Example:
+
+ $ basename /usr/local/bin/foo
+ foo
+ $ basename /usr/local/bin/
+ bin
+ $ basename /foo/bar.txt .txt
+ bar
+
+-------------------------------
+
+=item B<cat>
+
+cat [FILE]...
+
+Concatenates FILE(s) and prints them to stdout.
+
+Example:
+
+ $ cat /proc/uptime
+ 110716.72 17.67
+
+-------------------------------
+
+=item B<chgrp>
+
+chgrp [OPTION]... GROUP FILE...
+
+Change the group membership of each FILE to GROUP.
+
+Options:
+
+ -R Changes files and directories recursively.
+
+Example:
+
+ $ ls -l /tmp/foo
+ -r--r--r-- 1 andersen andersen 0 Apr 12 18:25 /tmp/foo
+ $ chgrp root /tmp/foo
+ $ ls -l /tmp/foo
+ -r--r--r-- 1 andersen root 0 Apr 12 18:25 /tmp/foo
+
+-------------------------------
+
+=item B<chmod>
+
+chmod [B<-R>] MODE[,MODE]... FILE...
+
+Each MODE is one or more of the letters ugoa, one of the
+symbols +-= and one or more of the letters rwxst.
+
+Options:
+
+ -R Changes files and directories recursively.
+
+Example:
+
+ $ ls -l /tmp/foo
+ -rw-rw-r-- 1 root root 0 Apr 12 18:25 /tmp/foo
+ $ chmod u+x /tmp/foo
+ $ ls -l /tmp/foo
+ -rwxrw-r-- 1 root root 0 Apr 12 18:25 /tmp/foo*
+ $ chmod 444 /tmp/foo
+ $ ls -l /tmp/foo
+ -r--r--r-- 1 root root 0 Apr 12 18:25 /tmp/foo
+
+-------------------------------
+
+=item B<chown>
+
+chown [ B<-Rh> ]... OWNER[<.|:>[GROUP]] FILE...
+
+Change the owner and/or group of each FILE to OWNER and/or GROUP.
+
+Options:
+
+ -R Changes files and directories recursively.
+ -h Do not dereference symbolic links.
+
+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 B<chroot>
+
+chroot NEWROOT [COMMAND...]
+
+Run COMMAND with root directory set to NEWROOT.
+
+Example:
+
+ $ ls -l /bin/ls
+ lrwxrwxrwx 1 root root 12 Apr 13 00:46 /bin/ls -> /BusyBox
+ $ mount /dev/hdc1 /mnt -t minix
+ $ chroot /mnt
+ $ ls -l /bin/ls
+ -rwxr-xr-x 1 root root 40816 Feb 5 07:45 /bin/ls*
+
+-------------------------------
+
+=item B<chvt>
+
+chvt N
+
+Changes the foreground virtual terminal to /dev/ttyN
+
+-------------------------------
+
+=item B<clear>
+
+clear
+
+Clear screen.
+
+-------------------------------
+
+=item B<cmp>
+
+cmp FILE1 [FILE2]
+
+ -s quiet mode - do not print
+Compare files.
+
+-------------------------------
+
+=item B<cp>
+
+cp [OPTION]... SOURCE DEST
+
+Copies SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
+
+ -a Same as -dpR
+ -d Preserves links
+ -p Preserves file attributes if possible
+ -f force (implied; ignored) - always set
+ -R Copies directories recursively
+
+-------------------------------
+
+=item B<cpio>
+
+cpio -[dimtuv][F cpiofile]
+
+Extract or list files from a cpio archive
+Main operation mode:
+
+ d make leading directories
+ i extract
+ m preserve mtime
+ t list
+ u unconditional overwrite F input from file
+
+-------------------------------
+
+=item B<cut>
+
+cut [OPTION]... [FILE]...
+
+Prints selected fields from each input FILE to standard output.
+
+Options:
+
+ -b LIST Output only bytes from LIST
+ -c LIST Output only characters from LIST
+ -d CHAR Use CHAR instead of tab as the field delimiter
+ -s Output only the lines containing delimiter
+ -f N Print only these fields
+ -n Ignored
+
+Example:
+
+ $ echo "Hello world" | cut -f 1 -d ' '
+ Hello
+ $ echo "Hello world" | cut -f 2 -d ' '
+ world
+
+-------------------------------
+
+=item B<date>
+
+date [OPTION]... [+FORMAT]
+
+Displays the current time in the given FORMAT, or sets the system date.
+
+Options:
+
+ -R Outputs RFC-822 compliant date string
+ -d STRING display time described by STRING, not `now'
+ -s Sets time described by STRING
+ -u Prints or sets Coordinated Universal Time
+
+Example:
+
+ $ date
+ Wed Apr 12 18:52:41 MDT 2000
+
+-------------------------------
+
+=item B<dc>
+
+dc expression ...
+
+This is a Tiny RPN calculator that understands the
+following operations: +, -, /, *, and, or, not, eor.
+i.e., 'dc 2 2 add' -> 4, and 'dc 8 8 \* 2 2 + /' -> 16
+
+Example:
+
+ $ dc 2 2 +
+ 4
+ $ dc 8 8 * 2 2 + /
+ 16
+ $ dc 0 1 and
+ 0
+ $ dc 0 1 or
+ 1
+ $ echo 72 9 div 8 mul | dc
+ 64
+
+-------------------------------
+
+=item B<dd>
+
+dd [if=FILE] [of=FILE] [bs=N] [count=N] [skip=N]
+ [seek=N] [conv=notrunc|sync]
+
+Copy a file, converting and formatting according to options
+
+ if=FILE read from FILE instead of stdin
+ of=FILE write to FILE instead of stdout
+ bs=N read and write N bytes at a time
+ count=N copy only N input blocks
+ skip=N skip N input blocks
+ seek=N skip N output blocks
+ conv=notrunc don't truncate output file
+ conv=sync pad blocks with zeros
+
+Numbers may be suffixed by c (x1), w (x2), b (x512), kD (x1000), k (x1024),
+MD (x1000000), M (x1048576), GD (x1000000000) or G (x1073741824).
+
+Example:
+
+ $ dd if=/dev/zero of=/dev/ram1 bs=1M count=4
+ 4+0 records in
+ 4+0 records out
+
+-------------------------------
+
+=item B<deallocvt>
+
+deallocvt N
+
+Deallocate unused virtual terminal /dev/ttyN
+
+-------------------------------
+
+=item B<df>
+
+df [B<-hmk>] [FILESYSTEM ...]
+
+Print the filesystem space used and space available.
+
+Options:
+
+ -h print sizes in human readable format (e.g., 1K 243M 2G )
+ -m print sizes in megabytes
+ -k print sizes in kilobytes(default)
+
+Example:
+
+ $ df
+ Filesystem 1k-blocks Used Available Use% Mounted on
+ /dev/sda3 8690864 8553540 137324 98% /
+ /dev/sda1 64216 36364 27852 57% /boot
+ $ df /dev/sda3
+ Filesystem 1k-blocks Used Available Use% Mounted on
+ /dev/sda3 8690864 8553540 137324 98% /
+
+-------------------------------
+
+=item B<dirname>
+
+dirname [FILENAME ...]
+
+Strips non-directory suffix from FILENAME
+
+Example:
+
+ $ dirname /tmp/foo
+ /tmp
+ $ dirname /tmp/foo/
+ /tmp
+
+-------------------------------
+
+=item B<dmesg>
+
+dmesg [B<-c>] [B<-n> LEVEL] [B<-s> SIZE]
+
+Prints or controls the kernel ring buffer
+
+Options:
+
+ -c Clears the ring buffer's contents after printing
+ -n LEVEL Sets console logging level
+ -s SIZE Use a buffer of size SIZE
+
+-------------------------------
+
+=item B<dos2unix>
+
+dos2unix [option] [FILE]
+
+Converts FILE from dos format to unix format. When no option
+is given, the input is converted to the opposite output format.
+When no file is given, uses stdin for input and stdout for output.
+
+Options:
+
+ -u output will be in UNIX format
+ -d output will be in DOS format
+
+-------------------------------
+
+=item B<dpkg>
+
+dpkg B<-i> package_file
+
+
+ -i Install the package
+ -C Configure an unpackaged package
+ -P Purge all files of a package
+ -r Remove all but the configuration files for a package
+ -u Unpack a package, but dont configure it
+
+-------------------------------
+
+=item B<dpkg_deb>
+
+dpkg_deb [B<-cefItxX>] FILE [argument]
+
+Perform actions on debian packages (.debs)
+
+Options:
+
+ -c List contents of filesystem tree
+ -e Extract control files to [argument] directory
+ -f Display control field name starting with [argument]
+ -I Display the control filenamed [argument]
+ -t Extract filesystem tree to stdout in tar format
+ -x Extract packages filesystem tree to directory
+ -X Verbose extract
+
+Example:
+
+ $ dpkg-deb -X ./busybox_0.48-1_i386.deb /tmp
+
+-------------------------------
+
+=item B<du>
+
+du [B<-lshmk>] [FILE]...
+
+Summarizes disk space used for each FILE and/or directory.
+Disk space is printed in units of 1024 bytes.
+
+Options:
+
+ -l count sizes many times if hard linked
+ -s display only a total for each argument
+ -h print sizes in human readable format (e.g., 1K 243M 2G )
+ -m print sizes in megabytes
+ -k print sizes in kilobytes(default)
+
+Example:
+
+ $ du
+ 16 ./CVS
+ 12 ./kernel-patches/CVS
+ 80 ./kernel-patches
+ 12 ./tests/CVS
+ 36 ./tests
+ 12 ./scripts/CVS
+ 16 ./scripts
+ 12 ./docs/CVS
+ 104 ./docs
+ 2417 .
+
+-------------------------------
+
+=item B<dumpkmap>
+
+dumpkmap > keymap
+
+Prints out a binary keyboard translation table to standard output.
+
+Example:
+
+ $ dumpkmap > keymap
+
+-------------------------------
+
+=item B<dutmp>
+
+dutmp [FILE]
+
+Dump utmp file format (pipe delimited) from FILE
+or stdin to stdout. (i.e., 'dutmp /var/run/utmp')
+
+Example:
+
+ $ dutmp /var/run/utmp
+ 8|7||si|||0|0|0|955637625|760097|0
+ 2|0|~|~~|reboot||0|0|0|955637625|782235|0
+ 1|20020|~|~~|runlevel||0|0|0|955637625|800089|0
+ 8|125||l4|||0|0|0|955637629|998367|0
+ 6|245|tty1|1|LOGIN||0|0|0|955637630|998974|0
+ 6|246|tty2|2|LOGIN||0|0|0|955637630|999498|0
+ 7|336|pts/0|vt00andersen|andersen|:0.0|0|0|0|955637763|0|0
+
+-------------------------------
+
+=item B<echo>
+
+echo [B<-neE>] [ARG ...]
+
+Prints the specified ARGs to stdout
+
+Options:
+
+ -n suppress trailing newline
+ -e interpret backslash-escaped characters (i.e., \t=tab)
+ -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 B<env>
+
+env [B<-iu>] [-] [name=value]... [command]
+
+Prints the current environment or runs a program after setting
+up the specified environment.
+
+Options:
+
+ -, -i start with an empty environment
+ -u remove variable from the environment
+
+-------------------------------
+
+=item B<expr>
+
+expr EXPRESSION
+
+Prints the value of EXPRESSION to standard output.
+
+EXPRESSION may be:
+
+ ARG1 | ARG2 ARG1 if it is neither null nor 0, otherwise ARG2
+ ARG1 & ARG2 ARG1 if neither argument is null or 0, otherwise 0
+ ARG1 < ARG2 ARG1 is less than ARG2
+ ARG1 <= ARG2 ARG1 is less than or equal to ARG2
+ ARG1 = ARG2 ARG1 is equal to ARG2
+ ARG1 != ARG2 ARG1 is unequal to ARG2
+ ARG1 >= ARG2 ARG1 is greater than or equal to ARG2
+ ARG1 > ARG2 ARG1 is greater than ARG2
+ ARG1 + ARG2 arithmetic sum of ARG1 and ARG2
+ ARG1 - ARG2 arithmetic difference of ARG1 and ARG2
+ ARG1 * ARG2 arithmetic product of ARG1 and ARG2
+ ARG1 / ARG2 arithmetic quotient of ARG1 divided by ARG2
+ ARG1 % ARG2 arithmetic remainder of ARG1 divided by ARG2
+ STRING : REGEXP anchored pattern match of REGEXP in STRING
+ match STRING REGEXP same as STRING : REGEXP
+ substr STRING POS LENGTH substring of STRING, POS counted from 1
+ index STRING CHARS index in STRING where any CHARS is found,
+ or 0
+ length STRING length of STRING
+ quote TOKEN interpret TOKEN as a string, even if
+ it is a keyword like `match' or an
+ operator like `/'
+ ( EXPRESSION ) value of EXPRESSION
+
+Beware that many operators need to be escaped or quoted for shells.
+Comparisons are arithmetic if both ARGs are numbers, else
+lexicographical. Pattern matches return the string matched between
+\( and \) or null; if \( and \) are not used, they return the number
+of characters matched or 0.
+
+-------------------------------
+
+=item B<false>
+
+false
+
+Return an exit code of FALSE (1).
+
+Example:
+
+ $ false
+ $ echo $?
+ 1
+
+-------------------------------
+
+=item B<fbset>
+
+fbset [options] [mode]
+
+Show and modify frame buffer settings
+
+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 B<fdflush>
+
+fdflush DEVICE
+
+Forces floppy disk drive to detect disk change
+
+-------------------------------
+
+=item B<find>
+
+find [PATH...] [EXPRESSION]
+
+Search for files in a directory hierarchy. The default PATH is
+the current directory; default EXPRESSION is 'B<-print>'
+
+EXPRESSION may consist of:
+
+ -follow Dereference symbolic links.
+ -name PATTERN File name (leading directories removed) matches PATTERN.
+ -print Print (default and assumed).
+
+ -type X Filetype matches X (where X is one of: f,d,l,b,c,...)
+ -perm PERMS Permissions match any of (+NNN); all of (-NNN);
+ or exactly (NNN)
+ -mtime TIME Modified time is greater than (+N); less than (-N);
+ or exactly (N) days
+
+Example:
+
+ $ find / -name /etc/passwd
+ /etc/passwd
+
+-------------------------------
+
+=item B<free>
+
+free
+
+Displays the amount of free and used system memory
+
+Example:
+
+ $ free
+ total used free shared buffers
+ Mem: 257628 248724 8904 59644 93124
+ Swap: 128516 8404 120112
+ Total: 386144 257128 129016
+
+-------------------------------
+
+=item B<freeramdisk>
+
+freeramdisk DEVICE
+
+Frees all memory used by the specified ramdisk.
+
+Example:
+
+ $ freeramdisk /dev/ram2
+
+-------------------------------
+
+=item B<fsck_minix>
+
+fsck_minix [B<-larvsmf>] /dev/name
+
+Performs a consistency check for MINIX filesystems.
+
+Options:
+
+ -l Lists all filenames
+ -r Perform interactive repairs
+ -a Perform automatic repairs
+ -v verbose
+ -s Outputs super-block information
+ -m Activates MINIX-like "mode not cleared" warnings
+ -f Force file system check.
+
+-------------------------------
+
+=item B<getopt>
+
+getopt [OPTIONS]...
+
+Parse command options
+
+ -a, --alternative Allow long options starting with single -
+ -l, --longoptions=longopts Long options to be recognized
+ -n, --name=progname The name under which errors are reported
+ -o, --options=optstring Short options to be recognized
+ -q, --quiet Disable error reporting by getopt(3)
+ -Q, --quiet-output No normal output
+ -s, --shell=shell Set shell quoting conventions
+ -T, --test Test for getopt(1) version
+ -u, --unqote Do not quote the output
+
+Example:
+
+ $ cat getopt.test
+ #!/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 B<grep>
+
+grep [B<-ihHnqvs>] PATTERN [FILEs...]
+
+Search for PATTERN in each FILE or standard input.
+
+Options:
+
+ -H prefix output lines with filename where match was found
+ -h suppress the prefixing filename on output
+ -i ignore case distinctions
+ -l list names of files that match
+ -n print line number with output lines
+ -q be quiet. Returns 0 if result was found, 1 otherwise
+ -v select non-matching lines
+ -s suppress file open/read error messages
+
+Example:
+
+ $ grep root /etc/passwd
+ root:x:0:0:root:/root:/bin/bash
+ $ grep ^[rR]oo. /etc/passwd
+ root:x:0:0:root:/root:/bin/bash
+
+-------------------------------
+
+=item B<gunzip>
+
+gunzip [OPTION]... FILE
+
+Uncompress FILE (or standard input if FILE is '-').
+
+Options:
+
+ -c Write output to standard output
+ -t Test compressed file integrity
+
+Example:
+
+ $ ls -la /tmp/BusyBox*
+ -rw-rw-r-- 1 andersen andersen 557009 Apr 11 10:55 /tmp/BusyBox-0.43.tar.gz
+ $ gunzip /tmp/BusyBox-0.43.tar.gz
+ $ ls -la /tmp/BusyBox*
+ -rw-rw-r-- 1 andersen andersen 1761280 Apr 14 17:47 /tmp/BusyBox-0.43.tar
+
+-------------------------------
+
+=item B<gzip>
+
+gzip [OPTION]... FILE
+
+Compress FILE with maximum compression.
+When FILE is '-', reads standard input. Implies B<-c>.
+
+Options:
+
+ -c Write output to standard output instead of FILE.gz
+ -d decompress
+
+Example:
+
+ $ ls -la /tmp/busybox*
+ -rw-rw-r-- 1 andersen andersen 1761280 Apr 14 17:47 /tmp/busybox.tar
+ $ gzip /tmp/busybox.tar
+ $ ls -la /tmp/busybox*
+ -rw-rw-r-- 1 andersen andersen 554058 Apr 14 17:49 /tmp/busybox.tar.gz
+
+-------------------------------
+
+=item B<halt>
+
+halt
+
+Halt the system.
+
+-------------------------------
+
+=item B<head>
+
+head [OPTION] [FILE]...
+
+Print first 10 lines of each FILE to standard output.
+With more than one FILE, precede each with a header giving the
+file name. With no FILE, or when FILE is -, read standard input.
+
+Options:
+
+ -n NUM Print first NUM lines instead of first 10
+
+Example:
+
+ $ head -n 2 /etc/passwd
+ root:x:0:0:root:/root:/bin/bash
+ daemon:x:1:1:daemon:/usr/sbin:/bin/sh
+
+-------------------------------
+
+=item B<hostid>
+
+hostid
+
+Print out a unique 32-bit identifier for the machine.
+
+-------------------------------
+
+=item B<hostname>
+
+hostname [OPTION] {hostname | B<-F> FILE}
+
+Get or set the hostname or DNS domain name. If a hostname is given
+(or FILE with the B<-F> parameter), the host name will be set.
+
+Options:
+
+ -s Short
+ -i Addresses for the hostname
+ -d DNS domain name
+ -F, --file FILE Use the contents of FILE to specify the hostname
+
+Example:
+
+ $ hostname
+ sage
+
+-------------------------------
+
+=item B<id>
+
+id [OPTIONS]... [USERNAME]
+
+Print information for USERNAME or the current user
+
+Options:
+
+ -g prints only the group ID
+ -u prints only the user ID
+ -n print a name instead of a number (with for -ug)
+ -r prints the real user ID instead of the effective ID (with -ug)
+
+Example:
+
+ $ id
+ uid=1000(andersen) gid=1000(andersen)
+
+-------------------------------
+
+=item B<ifconfig>
+
+ifconfig [B<-a>] <interface> [<address>]
+
+configure a network interface
+
+Options:
+
+ [[-]broadcast [<address>]] [[-]pointopoint [<address>]]
+ [netmask <address>] [dstaddr <address>]
+ [outfill <NN>] [keepalive <NN>]
+ [hw ether <address>] [metric <NN>] [mtu <NN>]
+ [[-]trailers] [[-]arp] [[-]allmulti]
+ [multicast] [[-]promisc] [txqueuelen <NN>] [[-]dynamic]
+ [mem_start <NN>] [io_addr <NN>] [irq <NN>]
+ [up|down] ...
+
+-------------------------------
+
+=item B<init>
+
+init
+
+Init is the parent of all processes.
+
+This version of init is designed to be run only by the kernel.
+
+BusyBox init doesn't support multiple runlevels. The runlevels field of
+the /etc/inittab file is completely ignored by BusyBox init. If you want
+runlevels, use sysvinit.
+
+BusyBox init works just fine without an inittab. If no inittab is found,
+it has the following default behavior:
+
+ ::sysinit:/etc/init.d/rcS
+ ::askfirst:/bin/sh
+ ::ctrlaltdel:/sbin/reboot
+ ::shutdown:/sbin/swapoff -a
+ ::shutdown:/bin/umount -a -r
+
+if it detects that /dev/console is _not_ a serial console, it will also run:
+
+ tty2::askfirst:/bin/sh
+ tty3::askfirst:/bin/sh
+ tty4::askfirst:/bin/sh
+
+If you choose to use an /etc/inittab file, the inittab entry format is as follows:
+
+ <id>:<runlevels>:<action>:<process>
+
+ <id>:
+
+ WARNING: This field has a non-traditional meaning for BusyBox init!
+ The id field is used by BusyBox init to specify the controlling tty for
+ the specified process to run on. The contents of this field are
+ appended to "/dev/" and used as-is. There is no need for this field to
+ be unique, although if it isn't you may have strange results. If this
+ field is left blank, the controlling tty is set to the console. Also
+ note that if BusyBox detects that a serial console is in use, then only
+ entries whose controlling tty is either the serial console or /dev/null
+ will be run. BusyBox init does nothing with utmp. We don't need no
+ stinkin' utmp.
+
+ <runlevels>:
+
+ The runlevels field is completely ignored.
+
+ <action>:
+
+ Valid actions include: sysinit, respawn, askfirst, wait,
+ once, ctrlaltdel, and shutdown.
+
+ The available actions can be classified into two groups: actions
+ that are run only once, and actions that are re-run when the specified
+ process exits.
+
+ Run only-once actions:
+
+ 'sysinit' is the first item run on boot. init waits until all
+ sysinit actions are completed before continuing. Following the
+ completion of all sysinit actions, all 'wait' actions are run.
+ 'wait' actions, like 'sysinit' actions, cause init to wait until
+ the specified task completes. 'once' actions are asynchronous,
+ therefore, init does not wait for them to complete. 'ctrlaltdel'
+ actions are run when the system detects that someone on the system
+ console has pressed the CTRL-ALT-DEL key combination. Typically one
+ wants to run 'reboot' at this point to cause the system to reboot.
+ Finally the 'shutdown' action specifies the actions to taken when
+ init is told to reboot. Unmounting filesystems and disabling swap
+ is a very good here
+
+ Run repeatedly actions:
+
+ 'respawn' actions are run after the 'once' actions. When a process
+ started with a 'respawn' action exits, init automatically restarts
+ it. Unlike sysvinit, BusyBox init does not stop processes from
+ respawning out of control. The 'askfirst' actions acts just like
+ respawn, except that before running the specified process it
+ displays the line "Please press Enter to activate this console."
+ and then waits for the user to press enter before starting the
+ specified process.
+
+ Unrecognized actions (like initdefault) will cause init to emit an
+ error message, and then go along with its business. All actions are
+ run in the reverse order from how they appear in /etc/inittab.
+
+ <process>:
+
+ Specifies the process to be executed and it's command line.
+
+Example /etc/inittab file:
+
+ # This is run first except when booting in single-user mode.
+ #
+ ::sysinit:/etc/init.d/rcS
+
+ # /bin/sh invocations on selected ttys
+ #
+ # Start an "askfirst" shell on the console (whatever that may be)
+ ::askfirst:-/bin/sh
+ # Start an "askfirst" shell on /dev/tty2-4
+ tty2::askfirst:-/bin/sh
+ tty3::askfirst:-/bin/sh
+ tty4::askfirst:-/bin/sh
+
+ # /sbin/getty invocations for selected ttys
+ #
+ tty4::respawn:/sbin/getty 38400 tty5
+ tty5::respawn:/sbin/getty 38400 tty6
+
+
+ # Example of how to put a getty on a serial line (for a terminal)
+ #
+ #::respawn:/sbin/getty -L ttyS0 9600 vt100
+ #::respawn:/sbin/getty -L ttyS1 9600 vt100
+ #
+ # Example how to put a getty on a modem line.
+ #::respawn:/sbin/getty 57600 ttyS2
+
+ # Stuff to do before rebooting
+ ::ctrlaltdel:/sbin/reboot
+ ::shutdown:/bin/umount -a -r
+ ::shutdown:/sbin/swapoff -a
+
+
+-------------------------------
+
+=item B<insmod>
+
+insmod [OPTION]... MODULE [symbol=value]...
+
+Loads the specified kernel modules into the kernel.
+
+Options:
+
+ -f Force module to load into the wrong kernel version.
+ -k Make module autoclean-able.
+ -v verbose output
+ -L Lock to prevent simultaneous loads of a module
+ -x do not export externs
+
+-------------------------------
+
+=item B<kill>
+
+kill [B<-signal>] process-id [process-id ...]
+
+Send a signal (default is SIGTERM) to the specified process(es).
+
+Options:
+
+ -l List all signal names and numbers.
+
+Example:
+
+ $ ps | grep apache
+ 252 root root S [apache]
+ 263 www-data www-data S [apache]
+ 264 www-data www-data S [apache]
+ 265 www-data www-data S [apache]
+ 266 www-data www-data S [apache]
+ 267 www-data www-data S [apache]
+ $ kill 252
+
+-------------------------------
+
+=item B<killall>
+
+killall [B<-signal>] process-name [process-name ...]
+
+Send a signal (default is SIGTERM) to the specified process(es).
+
+Options:
+
+ -l List all signal names and numbers.
+
+Example:
+
+ $ killall apache
+
+-------------------------------
+
+=item B<klogd>
+
+klogd B<-n>
+
+Kernel logger.
+Options:
+
+ -n Run as a foreground process.
+
+-------------------------------
+
+=item B<ktab>
+
+ktab [B<-fpr> FILE]
+
+Run a specified program every X amount of seconds
+Options:
+
+ -f Script for KTAB
+ -p File to run (takes defaults)
+ -r Review Script, report all errors
+
+-------------------------------
+
+=item B<lash>
+
+lash [FILE]...
+or: sh B<-c> command [args]...
+
+lash: The BusyBox LAme SHell (command interpreter)
+
+This command does not yet have proper documentation.
+
+Use lash just as you would use any other shell. It properly handles pipes,
+redirects, job control, can be used as the shell for scripts, and has a
+sufficient set of builtins to do what is needed. It does not (yet) support
+Bourne Shell syntax. If you need things like "if-then-else", "while", and such
+use ash or bash. If you just need a very simple and extremely small shell,
+this will do the job.
+
+-------------------------------
+
+=item B<length>
+
+length STRING
+
+Prints out the length of the specified STRING.
+
+Example:
+
+ $ length Hello
+ 5
+
+-------------------------------
+
+=item B<ln>
+
+ln [OPTION] TARGET... LINK_NAME|DIRECTORY
+
+Create a link named LINK_NAME or DIRECTORY to the specified TARGET
+
+You may use '--' to indicate that all following arguments are non-options.
+
+Options:
+
+ -s make symbolic links instead of hard links
+ -f remove existing destination files
+ -n no dereference symlinks - treat like normal file
+
+Example:
+
+ $ ln -s BusyBox /tmp/ls
+ $ ls -l /tmp/ls
+ lrwxrwxrwx 1 root root 7 Apr 12 18:39 ls -> BusyBox*
+
+-------------------------------
+
+=item B<loadacm>
+
+loadacm < mapfile
+
+Loads an acm from standard input.
+
+Example:
+
+ $ loadacm < /etc/i18n/acmname
+
+-------------------------------
+
+=item B<loadfont>
+
+loadfont < font
+
+Loads a console font from standard input.
+
+Example:
+
+ $ loadfont < /etc/i18n/fontname
+
+-------------------------------
+
+=item B<loadkmap>
+
+loadkmap < keymap
+
+Loads a binary keyboard translation table from standard input.
+
+Example:
+
+ $ loadkmap < /etc/i18n/lang-keymap
+
+-------------------------------
+
+=item B<logger>
+
+logger [OPTION]... [MESSAGE]
+
+Write MESSAGE to the system log. If MESSAGE is omitted, log stdin.
+
+Options:
+
+ -s Log to stderr as well as the system log.
+ -t Log using the specified tag (defaults to user name).
+ -p Enter the message with the specified priority.
+ This may be numerical or a ``facility.level'' pair.
+
+Example:
+
+ $ logger "hello"
+
+-------------------------------
+
+=item B<logname>
+
+logname
+
+Print the name of the current user.
+
+Example:
+
+ $ logname
+ root
+
+-------------------------------
+
+=item B<logread>
+
+logread
+
+Shows the messages from syslogd (using circular buffer).
+
+-------------------------------
+
+=item B<ls>
+
+ls [B<-1AacCdeFilnpLRrSsTtuvwxXhk>] [filenames...]
+
+List directory contents
+
+Options:
+
+ -1 list files in a single column
+ -A do not list implied . and ..
+ -a do not hide entries starting with .
+ -C list entries by columns
+ -c with -l: show ctime
+ -d list directory entries instead of contents
+ -e list both full date and full time
+ -F append indicator (one of */=@|) to entries
+ -i list the i-node for each file
+ -l use a long listing format
+ -n list numeric UIDs and GIDs instead of names
+ -p append indicator (one of /=@|) to entries
+ -L list entries pointed to by symbolic links
+ -R list subdirectories recursively
+ -r sort the listing in reverse order
+ -S sort the listing by file size
+ -s list the size of each file, in blocks
+ -T NUM assume Tabstop every NUM columns
+ -t with -l: show modification time
+ -u with -l: show access time
+ -v sort the listing by version
+ -w NUM assume the terminal is NUM columns wide
+ -x list entries by lines instead of by columns
+ -X sort the listing by extension
+ -h print sizes in human readable format (e.g., 1K 243M 2G )
+ -k print sizes in kilobytes(default)
+
+-------------------------------
+
+=item B<lsmod>
+
+lsmod
+
+List the currently loaded kernel modules.
+
+-------------------------------
+
+=item B<makedevs>
+
+makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]
+
+Creates a range of block or character special files
+
+TYPEs include:
+
+ b: Make a block (buffered) device.
+ c or u: Make a character (un-buffered) device.
+ p: Make a named pipe. MAJOR and MINOR are ignored for named pipes.
+
+FIRST specifies the number appended to NAME to create the first device.
+LAST specifies the number of the last item that should be created.
+If 's' is the last argument, the base device is created as well.
+
+For example:
+
+ makedevs /dev/ttyS c 4 66 2 63 -> ttyS2-ttyS63
+ makedevs /dev/hda b 3 0 0 8 s -> hda,hda1-hda8
+
+Example:
+
+ $ makedevs /dev/ttyS c 4 66 2 63
+ [creates ttyS2-ttyS63]
+ $ makedevs /dev/hda b 3 0 0 8 s
+ [creates hda,hda1-hda8]
+
+-------------------------------
+
+=item B<md5sum>
+
+md5sum [OPTION] [FILE]...
+or: md5sum [OPTION] B<-c> [FILE]
+
+Print or check MD5 checksums.
+
+Options:
+With no FILE, or when FILE is -, read standard input.
+
+ -b read files in binary mode
+ -c check MD5 sums against given list
+ -t read files in text mode (default)
+ -g read a string
+
+The following two options are useful only when verifying checksums:
+
+ -s don't output anything, status code shows success
+ -w warn about improperly formated MD5 checksum lines
+
+Example:
+
+ $ md5sum < busybox
+ 6fd11e98b98a58f64ff3398d7b324003
+ $ md5sum busybox
+ 6fd11e98b98a58f64ff3398d7b324003 busybox
+ $ md5sum -c -
+ 6fd11e98b98a58f64ff3398d7b324003 busybox
+ busybox: OK
+ ^D
+
+-------------------------------
+
+=item B<mkdir>
+
+mkdir [OPTION] DIRECTORY...
+
+Create the DIRECTORY(ies) if they do not already exist
+
+Options:
+
+ -m set permission mode (as in chmod), not rwxrwxrwx - umask
+ -p no error if existing, make parent directories as needed
+
+Example:
+
+ $ mkdir /tmp/foo
+ $ mkdir /tmp/foo
+ /tmp/foo: File exists
+ $ mkdir /tmp/foo/bar/baz
+ /tmp/foo/bar/baz: No such file or directory
+ $ mkdir -p /tmp/foo/bar/baz
+
+-------------------------------
+
+=item B<mkfifo>
+
+mkfifo [OPTIONS] name
+
+Creates a named pipe (identical to 'mknod name p')
+
+Options:
+
+ -m create the pipe using the specified mode (default a=rw)
+
+-------------------------------
+
+=item B<mkfs_minix>
+
+mkfs_minix [B<-c> | B<-l> filename] [B<-nXX>] [B<-iXX>] /dev/name [blocks]
+
+Make a MINIX filesystem.
+
+Options:
+
+ -c Check the device for bad blocks
+ -n [14|30] Specify the maximum length of filenames
+ -i INODES Specify the number of inodes for the filesystem
+ -l FILENAME Read the bad blocks list from FILENAME
+ -v Make a Minix version 2 filesystem
+
+-------------------------------
+
+=item B<mknod>
+
+mknod [OPTIONS] NAME TYPE MAJOR MINOR
+
+Create a special file (block, character, or pipe).
+
+Options:
+
+ -m create the special file using the specified mode (default a=rw)
+
+TYPEs include:
+
+ b: Make a block (buffered) device.
+ c or u: Make a character (un-buffered) device.
+ p: Make a named pipe. MAJOR and MINOR are ignored for named pipes.
+
+Example:
+
+ $ mknod /dev/fd0 b 2 0
+ $ mknod -m 644 /tmp/pipe p
+
+-------------------------------
+
+=item B<mkswap>
+
+mkswap [B<-c>] [B<-v0>|B<-v1>] device [block-count]
+
+Prepare a disk partition to be used as a swap partition.
+
+Options:
+
+ -c Check for read-ability.
+ -v0 Make version 0 swap [max 128 Megs].
+ -v1 Make version 1 swap [big!] (default for kernels >
+ 2.1.117).
+ block-count Number of block to use (default is entire partition).
+
+-------------------------------
+
+=item B<mktemp>
+
+mktemp [B<-q>] TEMPLATE
+
+Creates a temporary file with its name based on TEMPLATE.
+TEMPLATE is any name with six `Xs' (i.e., /tmp/temp.XXXXXX).
+
+Example:
+
+ $ mktemp /tmp/temp.XXXXXX
+ /tmp/temp.mWiLjM
+ $ ls -la /tmp/temp.mWiLjM
+ -rw------- 1 andersen andersen 0 Apr 25 17:10 /tmp/temp.mWiLjM
+
+-------------------------------
+
+=item B<modprobe>
+
+modprobe [FILE ...]
+
+Used for hight level module loading and unloading.
+
+Example:
+
+ $ modprobe cdrom
+
+-------------------------------
+
+=item B<more>
+
+more [FILE ...]
+
+More is a filter for viewing FILE one screenful at a time.
+
+Example:
+
+ $ dmesg | more
+
+-------------------------------
+
+=item B<mount>
+
+mount [flags] DEVICE NODE [B<-o> options,more-options]
+
+Mount a filesystem
+
+Flags:
+
+ -a: Mount all filesystems in fstab.
+ -f: "Fake" Add entry to mount table but don't mount it.
+ -n: Don't write a mount table entry.
+ -o option: One of many filesystem options, listed below.
+ -r: Mount the filesystem read-only.
+ -t fs-type: Specify the filesystem type.
+ -w: Mount for reading and writing (default).
+
+Options for use with the "B<-o>" flag:
+
+ async/sync: Writes are asynchronous / synchronous.
+ atime/noatime: Enable / disable updates to inode access times.
+ dev/nodev: Allow use of special device files / disallow them.
+ exec/noexec: Allow use of executable files / disallow them.
+ loop: Mounts a file via loop device.
+ suid/nosuid: Allow set-user-id-root programs / disallow them.
+ remount: Re-mount a mounted filesystem, changing its flags.
+ ro/rw: Mount for read-only / read-write.
+ bind: Use the linux 2.4.x "bind" feature.
+
+There are EVEN MORE flags that are specific to each filesystem.
+You'll have to see the written documentation for those filesystems.
+
+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 B<mt>
+
+mt [B<-f> device] opcode value
+
+Control magnetic tape drive operation
+
+Available Opcodes:
+
+bsf bsfm bsr bss datacompression drvbuffer eof eom erase
+fsf fsfm fsr fss load lock mkpart nop offline ras1 ras2
+ras3 reset retension rew rewoffline seek setblk setdensity
+setpart tell unload unlock weof wset
+
+-------------------------------
+
+=item B<mv>
+
+mv SOURCE DEST
+or: mv SOURCE... DIRECTORY
+
+Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
+
+Example:
+
+ $ mv /tmp/foo /bin/bar
+
+-------------------------------
+
+=item B<nc>
+
+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 B<nslookup>
+
+nslookup [HOST] [SERVER]
+
+Queries the nameserver for the IP address of the given HOST
+optionally using a specified DNS server
+
+Example:
+
+ $ nslookup localhost
+ Server: default
+ Address: default
+
+ Name: debian
+ Address: 127.0.0.1
+
+-------------------------------
+
+=item B<pgrep>
+
+pgrep [B<-f>] PATTERN
+
+
+
+-------------------------------
+
+=item B<pidof>
+
+pidof process-name [process-name ...]
+
+Lists the PIDs of all processes with names that match the names on the command line
+
+Example:
+
+ $ pidof init
+ 1
+
+-------------------------------
+
+=item B<ping>
+
+ping [OPTION]... host
+
+Send ICMP ECHO_REQUEST packets to network hosts.
+
+Options:
+
+ -c COUNT Send only COUNT pings.
+ -s SIZE Send SIZE data bytes in packets (default=56).
+ -q Quiet mode, only displays output at start
+ and when finished.
+
+Example:
+
+ $ ping localhost
+ PING slag (127.0.0.1): 56 data bytes
+ 64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=20.1 ms
+
+ --- debian ping statistics ---
+ 1 packets transmitted, 1 packets received, 0% packet loss
+ round-trip min/avg/max = 20.1/20.1/20.1 ms
+
+-------------------------------
+
+=item B<pivot_root>
+
+pivot_root NEW_ROOT PUT_OLD
+
+Move the current root file system to PUT_OLD and make NEW_ROOT
+the new root file system.
+
+-------------------------------
+
+=item B<poweroff>
+
+poweroff
+
+Halt the system and request that the kernel shut off the power.
+
+-------------------------------
+
+=item B<printf>
+
+printf FORMAT [ARGUMENT...]
+
+Formats and prints ARGUMENT(s) according to FORMAT,
+Where FORMAT controls the output exactly as in C printf.
+
+Example:
+
+ $ printf "Val=%d\n" 5
+ Val=5
+
+-------------------------------
+
+=item B<ps>
+
+ps
+
+Report process status
+
+This version of ps accepts no options.
+
+Example:
+
+ $ ps
+ PID Uid Gid State Command
+ 1 root root S init
+ 2 root root S [kflushd]
+ 3 root root S [kupdate]
+ 4 root root S [kpiod]
+ 5 root root S [kswapd]
+ 742 andersen andersen S [bash]
+ 743 andersen andersen S -bash
+ 745 root root S [getty]
+ 2990 andersen andersen R ps
+
+-------------------------------
+
+=item B<pwd>
+
+pwd
+
+Print the full filename of the current working directory.
+
+Example:
+
+ $ pwd
+ /root
+
+-------------------------------
+
+=item B<rdate>
+
+rdate [OPTION] HOST
+
+Get and possibly set the system date and time from a remote HOST.
+
+Options:
+
+ -s Set the system date and time (default).
+ -p Print the date and time.
+
+-------------------------------
+
+=item B<readlink>
+
+readlink
+
+Read a symbolic link.
+
+-------------------------------
+
+=item B<reboot>
+
+reboot
+
+Reboot the system.
+
+-------------------------------
+
+=item B<renice>
+
+renice priority pid [pid ...]
+
+Changes priority of running processes. Allowed priorities range
+from 20 (the process runs only when nothing else is running) to 0
+(default priority) to B<-20> (almost nothing else ever gets to run).
+
+-------------------------------
+
+=item B<reset>
+
+reset
+
+Resets the screen.
+
+-------------------------------
+
+=item B<rm>
+
+rm [OPTION]... FILE...
+
+Remove (unlink) the FILE(s). You may use '--' to
+indicate that all following arguments are non-options.
+
+Options:
+
+ -i always prompt before removing each destination -f remove existing destinations, never prompt
+ -r or -R remove the contents of directories recursively
+
+Example:
+
+ $ rm -rf /tmp/foo
+
+-------------------------------
+
+=item B<rmdir>
+
+rmdir [OPTION]... DIRECTORY...
+
+Remove the DIRECTORY(ies), if they are empty.
+
+Example:
+
+ # rmdir /tmp/foo
+
+-------------------------------
+
+=item B<rmmod>
+
+rmmod [OPTION]... [MODULE]...
+
+Unloads the specified kernel modules from the kernel.
+
+Options:
+
+ -a Try to remove all unused kernel modules.
+
+Example:
+
+ $ rmmod tulip
+
+-------------------------------
+
+=item B<route>
+
+route [{add|del|flush}]
+
+Edit the kernel's routing tables
+
+-------------------------------
+
+=item B<rpm2cpio>
+
+rpm2cpio package.rpm
+
+Outputs a cpio archive of the rpm file.
+
+-------------------------------
+
+=item B<rpmunpack>
+
+rpmunpack < package.rpm | gunzip | cpio B<-idmuv>
+
+Extracts an rpm archive.
+
+-------------------------------
+
+=item B<sed>
+
+sed [B<-nef>] pattern [files...]
+
+Options:
+
+ -n suppress automatic printing of pattern space
+ -e script add the script to the commands to be executed
+ -f scriptfile add the contents of script-file to the commands to be executed
+
+If no B<-e> or B<-f> is given, the first non-option argument is taken as the
+sed script to interpret. All remaining arguments are names of input
+files; if no input files are specified, then the standard input is read.
+
+Example:
+
+ $ echo "foo" | sed -e 's/f[a-zA-Z]o/bar/g'
+ bar
+
+-------------------------------
+
+=item B<setkeycodes>
+
+setkeycodes SCANCODE KEYCODE ...
+
+Set entries into the kernel's scancode-to-keycode map,
+allowing unusual keyboards to generate usable keycodes.
+
+SCANCODE may be either xx or e0xx (hexadecimal),
+and KEYCODE is given in decimal
+
+Example:
+
+ $ setkeycodes e030 127
+
+-------------------------------
+
+=item B<sleep>
+
+sleep N
+
+Pause for N seconds.
+
+Example:
+
+ $ sleep 2
+ [2 second delay results]
+
+-------------------------------
+
+=item B<sort>
+
+sort [B<-nru>] [FILE]...
+
+Sorts lines of text in the specified files
+
+Options:
+
+ -u suppress duplicate lines
+ -r sort in reverse order
+ -n sort numerics
+
+Example:
+
+ $ echo -e "e\nf\nb\nd\nc\na" | sort
+ a
+ b
+ c
+ d
+ e
+ f
+
+-------------------------------
+
+=item B<stty>
+
+stty [B<-a>|g] [B<-F> DEVICE] [SETTING]...
+
+Without arguments, prints baud rate, line discipline,
+and deviations from stty sane.
+
+Options:
+
+ -F DEVICE open device instead of stdin
+ -a print all current settings in human-readable form
+ -g print in stty-readable form
+ [SETTING] see manpage
+
+-------------------------------
+
+=item B<swapoff>
+
+swapoff [OPTION] [DEVICE]
+
+Stop swapping virtual memory pages on DEVICE.
+
+Options:
+
+ -a Stop swapping on all swap devices
+
+-------------------------------
+
+=item B<swapon>
+
+swapon [OPTION] [DEVICE]
+
+Start swapping virtual memory pages on DEVICE.
+
+Options:
+
+ -a Start swapping on all swap devices
+
+-------------------------------
+
+=item B<sync>
+
+sync
+
+Write all buffered filesystem blocks to disk.
+
+-------------------------------
+
+=item B<syslogd>
+
+syslogd [OPTION]...
+
+Linux system and kernel logging utility.
+Note that this version of syslogd ignores /etc/syslog.conf.
+
+Options:
+
+ -m NUM Interval between MARK lines (default=20min, 0=off)
+ -n Run as a foreground process
+ -O FILE Use an alternate log file (default=/var/log/messages)
+ -R HOST[:PORT] Log to IP or hostname on PORT (default PORT=514/UDP)
+
+ -F f Use facility LOCAL<f> (0-7) when sending to remote host. -R must be specified also.
+ -L Log locally and via network logging (default is network only)
+
+Example:
+
+ $ syslogd -R masterlog:514
+ $ syslogd -R 192.168.1.1:601
+
+-------------------------------
+
+=item B<tail>
+
+tail [OPTION]... [FILE]...
+
+Print last 10 lines of each FILE to standard output.
+With more than one FILE, precede each with a header giving the
+file name. With no FILE, or when FILE is -, read standard input.
+
+Options:
+
+ -c N[kbm] output the last N bytes
+ -n N[kbm] print last N lines instead of last 10
+ -f output data as the file grows
+ -q never output headers giving file names
+ -s SEC wait SEC seconds between reads with -f
+ -v always output headers giving file names
+
+If the first character of N (bytes or lines) is a '+', output begins with
+the Nth item from the start of each file, otherwise, print the last N items
+in the file. N bytes may be suffixed by k (x1024), b (x512), or m (1024^2).
+
+Example:
+
+ $ tail -n 1 /etc/resolv.conf
+ nameserver 10.0.0.1
+
+-------------------------------
+
+=item B<tar>
+
+tar -[cxtvO] [-B<-exclude> FILE] [B<-X> FILE][B<-f> TARFILE] [B<-C> DIR] [FILE(s)] ...
+
+Create, extract, or list files from a tar file.
+
+Options:
+
+ c create
+ x extract
+ t list
+
+File selection:
+
+ f name of TARFILE or "-" for stdin
+ O extract to stdout
+ exclude file to exclude
+ X file with names to exclude
+ C change to directory DIR before operation
+ v verbosely list files processed
+
+Example:
+
+ $ zcat /tmp/tarball.tar.gz | tar -xf -
+ $ tar -cf /tmp/tarball.tar /usr/local
+
+-------------------------------
+
+=item B<tee>
+
+tee [OPTION]... [FILE]...
+
+Copy standard input to each FILE, and also to standard output.
+
+Options:
+
+ -a append to the given FILEs, do not overwrite
+
+Example:
+
+ $ echo "Hello" | tee /tmp/foo
+ $ cat /tmp/foo
+ Hello
+
+-------------------------------
+
+=item B<telnet>
+
+telnet HOST [PORT]
+
+Telnet is used to establish interactive communication with another
+computer over a network using the TELNET protocol.
+
+-------------------------------
+
+=item B<test>
+
+test EXPRESSION
+ or [ EXPRESSION ]
+
+Checks file types and compares values returning an exit
+code determined by the value of EXPRESSION.
+
+Example:
+
+ $ test 1 -eq 2
+ $ echo $?
+ 1
+ $ test 1 -eq 1
+ $ echo $?
+ 0
+ $ [ -d /etc ]
+ $ echo $?
+ 0
+ $ [ -d /junk ]
+ $ echo $?
+ 1
+
+-------------------------------
+
+=item B<tftp>
+
+tftp command SOURCE DEST
+
+Transfers a file from/to a tftp server using "octet" mode.
+
+Commands:
+
+ get Get file from server SOURCE and store to local DEST.
+ put Put local file SOURCE to server DEST.
+
+When naming a server, use the syntax "server:file".
+
+-------------------------------
+
+=item B<touch>
+
+touch [B<-c>] FILE [FILE ...]
+
+Update the last-modified date on the given FILE[s].
+
+Options:
+
+ -c Do not create any files
+
+Example:
+
+ $ ls -l /tmp/foo
+ /bin/ls: /tmp/foo: No such file or directory
+ $ touch /tmp/foo
+ $ ls -l /tmp/foo
+ -rw-rw-r-- 1 andersen andersen 0 Apr 15 01:11 /tmp/foo
+
+-------------------------------
+
+=item B<tr>
+
+tr [B<-cds>] STRING1 [STRING2]
+
+Translate, squeeze, and/or delete characters from
+standard input, writing to standard output.
+
+Options:
+
+ -c take complement of STRING1
+ -d delete input characters coded STRING1
+ -s squeeze multiple output characters of STRING2 into one character
+
+Example:
+
+ $ echo "gdkkn vnqkc" | tr [a-y] [b-z]
+ hello world
+
+-------------------------------
+
+=item B<traceroute>
+
+traceroute [B<-dnrv>] [B<-m> max_ttl] [B<-p> port#] [B<-q> nqueries]
+ [B<-s> src_addr] [B<-t> tos] [B<-w> wait] host [data size]
+
+trace the route ip packets follow going to "host"
+Options:
+
+ -d set SO_DEBUG options to socket
+ -n Print hop addresses numerically rather than symbolically
+ -r Bypass the normal routing tables and send directly to a host
+ -v Verbose output
+ -m max_ttl Set the max time-to-live (max number of hops)
+ -p port# Set the base UDP port number used in probes
+ (default is 33434)
+ -q nqueries Set the number of probes per ``ttl'' to nqueries
+ (default is 3)
+ -s src_addr Use the following IP address as the source address
+ -t tos Set the type-of-service in probe packets to the following value
+ (default 0)
+ -w wait Set the time (in seconds) to wait for a response to a probe
+ (default 3 sec.).
+
+-------------------------------
+
+=item B<true>
+
+true
+
+Return an exit code of TRUE (0).
+
+Example:
+
+ $ true
+ $ echo $?
+ 0
+
+-------------------------------
+
+=item B<tty>
+
+tty
+
+Print the file name of the terminal connected to standard input.
+
+Options:
+
+ -s print nothing, only return an exit status
+
+Example:
+
+ $ tty
+ /dev/tty2
+
+-------------------------------
+
+=item B<umount>
+
+umount [flags] FILESYSTEM|DIRECTORY
+
+Unmount file systems
+
+Flags:
+
+ -a Unmount all file systems in /etc/mtab
+ -n Don't erase /etc/mtab entries
+ -r Try to remount devices as read-only if mount is busy
+ -f Force umount (i.e., unreachable NFS server)
+ -l Do not free loop device (if a loop device has been used)
+
+Example:
+
+ $ umount /dev/hdc1
+
+-------------------------------
+
+=item B<uname>
+
+uname [OPTION]...
+
+Print certain system information. With no OPTION, same as B<-s>.
+
+Options:
+
+ -a print all information
+ -m the machine (hardware) type
+ -n print the machine's network node hostname
+ -r print the operating system release
+ -s print the operating system name
+ -p print the host processor type
+ -v print the operating system version
+
+Example:
+
+ $ uname -a
+ Linux debian 2.2.15pre13 #5 Tue Mar 14 16:03:50 MST 2000 i686 unknown
+
+-------------------------------
+
+=item B<uniq>
+
+uniq [OPTION]... [INPUT [OUTPUT]]
+
+Discard all but one of successive identical lines from INPUT
+(or standard input), writing to OUTPUT (or standard output).
+
+Options:
+
+ -c prefix lines by the number of occurrences
+ -d only print duplicate lines
+ -u only print unique lines
+
+Example:
+
+ $ echo -e "a\na\nb\nc\nc\na" | sort | uniq
+ a
+ b
+ c
+
+-------------------------------
+
+=item B<unix2dos>
+
+unix2dos [option] [FILE]
+
+Converts FILE from unix format to dos format. When no option
+is given, the input is converted to the opposite output format.
+When no file is given, uses stdin for input and stdout for output.
+Options:
+
+ -u output will be in UNIX format
+ -d output will be in DOS format
+
+-------------------------------
+
+=item B<update>
+
+update [options]
+
+Periodically flushes filesystem buffers.
+
+Options:
+
+ -S force use of sync(2) instead of flushing
+ -s SECS call sync this often (default 30)
+ -f SECS flush some buffers this often (default 5)
+
+-------------------------------
+
+=item B<uptime>
+
+uptime
+
+Display the time since the last boot.
+
+Example:
+
+ $ uptime
+ 1:55pm up 2:30, load average: 0.09, 0.04, 0.00
+
+-------------------------------
+
+=item B<usleep>
+
+usleep N
+
+Pause for N microseconds.
+
+Example:
+
+ $ usleep 1000000
+ [pauses for 1 second]
+
+-------------------------------
+
+=item B<uudecode>
+
+uudecode [FILE]...
+
+Uudecode a file that is uuencoded.
+
+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 B<uuencode>
+
+uuencode [OPTION] [INFILE] REMOTEFILE
+
+Uuencode a file.
+
+Options:
+
+ -m use base64 encoding per RFC1521
+
+Example:
+
+ $ uuencode busybox busybox
+ begin 755 busybox
+ <encoded file snipped>
+ $ uudecode busybox busybox > busybox.uu
+ $
+
+-------------------------------
+
+=item B<vi>
+
+vi [OPTION] [FILE]...
+
+edit FILE.
+
+Options:
+
+ -R Read-only- do not write to the file.
+
+-------------------------------
+
+=item B<watchdog>
+
+watchdog DEV
+
+Periodically write to watchdog device DEV
+
+-------------------------------
+
+=item B<wc>
+
+wc [OPTION]... [FILE]...
+
+Print line, word, and byte counts for each FILE, and a total line if
+more than one FILE is specified. With no FILE, read standard input.
+
+Options:
+
+ -c print the byte counts
+ -l print the newline counts
+ -L print the length of the longest line
+ -w print the word counts
+
+Example:
+
+ $ wc /etc/passwd
+ 31 46 1365 /etc/passwd
+
+-------------------------------
+
+=item B<wget>
+
+wget [B<-c>|-B<-continue>] [B<-q>|-B<-quiet>] [B<-O>|-B<-output>-document file]
+ [-B<-header> 'header: value'] [B<-P> DIR] url
+
+wget retrieves files via HTTP or FTP
+
+Options:
+
+ -c continue retrieval of aborted transfers
+ -q quiet mode - do not print
+ -P Set directory prefix to DIR
+ -O save to filename ('-' for stdout)
+
+-------------------------------
+
+=item B<which>
+
+which [COMMAND ...]
+
+Locates a COMMAND.
+
+Example:
+
+ $ which login
+ /bin/login
+
+-------------------------------
+
+=item B<whoami>
+
+whoami
+
+Prints the user name associated with the current effective user id.
+
+-------------------------------
+
+=item B<xargs>
+
+xargs [COMMAND] [ARGS...]
+
+Executes COMMAND on every item given by standard input.
+
+Example:
+
+ $ ls | xargs gzip
+ $ find . -name '*.c' -print | xargs rm
+
+-------------------------------
+
+=item B<yes>
+
+yes [OPTION]... [STRING]...
+
+Repeatedly outputs a line with all specified STRING(s), or 'y'.
+
+-------------------------------
+
+=item B<zcat>
+
+zcat FILE
+
+Uncompress to stdout.
+
+-------------------------------
+
+=back
+
+=head1 LIBC NSS
+
+GNU Libc uses the Name Service Switch (NSS) to configure the behavior of the C
+library for the local environment, and to configure how it reads system data,
+such as passwords and group information. BusyBox has made it Policy that it
+will never use NSS, and will never use and libc calls that make use of NSS.
+This allows you to run an embedded system without the need for installing an
+/etc/nsswitch.conf file and without and /lib/libnss_* libraries installed.
+
+If you are using a system that is using a remote LDAP server for authentication
+via GNU libc NSS, and you want to use BusyBox, then you will need to adjust the
+BusyBox source. Chances are though, that if you have enough space to install
+of that stuff on your system, then you probably want the full GNU utilities.
+
+=head1 SEE ALSO
+
+textutils(1), shellutils(1), etc...
+
+=head1 MAINTAINER
+
+Erik Andersen <andersee@debian.org> <andersen@lineo.com>
+
+=head1 AUTHORS
+
+The following people have contributed code to BusyBox whether
+they know it or not.
+
+
+=for html <br>
+
+Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
+
+ Tons of new stuff, major rewrite of most of the
+ core apps, tons of new apps as noted in header files.
+
+=for html <br>
+
+John Beppu <beppu@lineo.com>
+
+ du, head, nslookup, sort, tee, uniq (so Kraai could rewrite them ;-),
+ documentation
+
+=for html <br>
+
+Edward Betts <edward@debian.org>
+
+ expr, hostid, logname, tty, wc, whoami, yes
+
+=for html <br>
+
+Brian Candler <B.Candler@pobox.com>
+
+ tiny-ls(ls)
+
+=for html <br>
+
+Randolph Chung <tausq@debian.org>
+
+ fbset, ping, hostname, and mkfifo
+
+=for html <br>
+
+Dave Cinege <dcinege@psychosis.com>
+
+ more(v2), makedevs, dutmp, modularization, auto links file,
+ various fixes, Linux Router Project maintenance
+
+=for html <br>
+
+Larry Doolittle <ldoolitt@recycle.lbl.gov>
+
+ various fixes, shell rewrite
+
+=for html <br>
+
+Karl M. Hegbloom <karlheg@debian.org>
+
+ cp_mv.c, the test suite, various fixes to utility.c, &c.
+
+=for html <br>
+
+Sterling Huxley <sterling@europa.com>
+
+ vi (!!!)
+
+=for html <br>
+
+Daniel Jacobowitz <dan@debian.org>
+
+ mktemp.c
+
+=for html <br>
+
+Matt Kraai <kraai@alumni.carnegiemellon.edu>
+
+ documentation, bugfixes
+
+=for html <br>
+
+John Lombardo <john@deltanet.com>
+
+ dirname, tr
+
+=for html <br>
+
+Glenn McGrath <bug1@netconnect.com.au>
+
+ ar.c
+
+=for html <br>
+
+Vladimir Oleynik <dzo@simtreas.ru>
+
+ cmdedit, stty-port, locale, various fixes
+ and irreconcilable critic of everything not perfect.
+
+=for html <br>
+
+Bruce Perens <bruce@pixar.com>
+
+ Original author of BusyBox. His code is still in many apps.
+
+=for html <br>
+
+Chip Rosenthal <chip@unicom.com>, <crosenth@covad.com>
+
+ wget - Contributed by permission of Covad Communications
+
+=for html <br>
+
+Pavel Roskin <proski@gnu.org>
+
+ Lots of bugs fixes and patches.
+
+=for html <br>
+
+Gyepi Sam <gyepi@praxis-sw.com>
+
+ Remote logging feature for syslogd
+
+=for html <br>
+
+Linus Torvalds <torvalds@transmeta.com>
+
+ mkswap, fsck.minix, mkfs.minix
+
+=for html <br>
+
+Mark Whitley <markw@lineo.com>
+
+ sed remix, bug fixes, style-guide, etc.
+
+=for html <br>
+
+Charles P. Wright <cpwright@villagenet.com>
+
+ gzip, mini-netcat(nc)
+
+=for html <br>
+
+Enrique Zanardi <ezanardi@ull.es>
+
+ tarcat (since removed), loadkmap, various fixes, Debian maintenance
+
+=cut
+
+# $Id: busybox_footer.pod,v 1.1.1.4 2003/10/14 08:09:39 sparq Exp $
diff --git a/release/src/router/busybox/docs/busybox.sgml b/release/src/router/busybox/docs/busybox.sgml
new file mode 100644
index 00000000..2d372506
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox.sgml
@@ -0,0 +1,3974 @@
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [ ]>
+<book id="BusyBoxDocumentation">
+ <bookinfo>
+ <title>BusyBox - The Swiss Army Knife of Embedded Linux</title>
+
+ <legalnotice>
+ <para>
+ This documentation is free software; you can redistribute
+ it and/or modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later
+ version.
+ </para>
+
+ <para>
+ This program is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+ </para>
+
+ <para>
+ You should have received a copy of the GNU General Public
+ License along with this program; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ MA 02111-1307 USA
+ </para>
+
+ <para>
+ For more details see the file COPYING in the source
+ distribution of Linux.
+ </para>
+ </legalnotice>
+ </bookinfo>
+
+<toc></toc>
+ <chapter id="Introduction">
+ <title>Introduction</title>
+
+ <para>
+ 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.
+ </para>
+
+ <para>
+ 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).
+ </para>
+ </chapter>
+
+ <chapter id="Syntax">
+ <title>How to use BusyBox</title>
+ <sect1 id="How-to-use-BusyBox">
+ <title>Syntax</title>
+
+ <para>
+ <screen>
+ BusyBox &lt;function&gt; [arguments...] # or
+ </screen>
+ </para>
+
+ <para>
+ <screen>
+ &lt;function&gt; [arguments...] # if symlinked
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="Invoking-BusyBox">
+ <title>Invoking BusyBox</title>
+
+ <para>
+ 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.
+ </para>
+
+ <para>
+ For example, entering
+ </para>
+
+ <para>
+ <screen>
+ ln -s ./BusyBox ls
+ ./ls
+ </screen>
+ </para>
+
+ <para>
+ will cause BusyBox to behave as 'ls' (if the 'ls' command has been compiled
+ into BusyBox).
+ </para>
+
+ <para>
+ You can also invoke BusyBox by issuing the command as an argument on the
+ command line. For example, entering
+ </para>
+
+ <para>
+ <screen>
+ ./BusyBox ls
+ </screen>
+ </para>
+
+ <para>
+ will also cause BusyBox to behave as 'ls'.
+ </para>
+
+ </sect1>
+
+ <sect1 id="Common-options">
+ <title>Common options</title>
+
+ <para>
+ Most BusyBox commands support the <emphasis>--help</emphasis> option to provide
+ a terse runtime description of their behavior.
+ </para>
+ </sect1>
+ </chapter>
+
+ <chapter id="Commands">
+ <title>BusyBox Commands</title>
+ <sect1 id="Available-BusyBox-Commands">
+ <title>Available BusyBox Commands</title>
+ <para>
+ Currently defined functions include:
+ </para>
+
+ <para>
+ ar, basename, cat, chgrp, chmod, chown, chroot, chvt, clear,
+ cp, cut, date, dc, dd, deallocvt, df, dirname, dmesg, dpkg-deb,
+ du, dumpkmap, 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, 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, update,
+ uptime, usleep, uudecode, uuencode, wc, which, whoami, yes,
+ zcat, [
+ </para>
+ </sect1>
+
+ <sect1 id="ar">
+ <title>ar</title>
+
+ <para>
+ Usage: ar [OPTION] archive [FILENAME]...
+ </para>
+
+ <para>
+ Extract or list files from an ar archive.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ o Preserve original dates
+ p Extract to stdout
+ t List
+ x Extract
+ v Verbosely list files processed
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="basename">
+ <title>basename</title>
+ <para>
+ Usage: basename FILE [SUFFIX]
+ </para>
+
+ <para>
+ Strip directory path and suffixes from FILE. If specified, also removes
+ any trailing SUFFIX.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ basename /usr/local/bin/foo
+ foo
+ $ basename /usr/local/bin/
+ bin
+ $ basename /foo/bar.txt .txt
+ bar
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="cat">
+ <title>cat</title>
+
+ <para>
+ Usage: cat [FILE]...
+ </para>
+
+ <para>
+ Concatenate <literal>FILE(s)</literal> and prints them to the standard
+ output.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ cat /proc/uptime
+ 110716.72 17.67
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="chgrp">
+ <title>chgrp</title>
+
+ <para>
+ Usage: chgrp [OPTION]... GROUP FILE...
+ </para>
+
+ <para>
+ Change the group membership of each FILE to GROUP.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -R Change files and directories recursively
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="chmod">
+ <title>chmod</title>
+
+ <para>
+ Usage: chmod [<emphasis>-R</emphasis>] MODE[,MODE]... FILE...
+ </para>
+
+ <para>
+ Change file access permissions for the specified
+ <literal>FILE(s)</literal> (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
+ <literal>FILE(s)</literal> (or directories).
+ </para>
+
+ <para>
+ WHO may be chosen from
+ </para>
+
+ <para>
+ <screen>
+ 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
+ </screen>
+ </para>
+
+ <para>
+ OPERATOR may be chosen from
+ </para>
+
+ <para>
+ <screen>
+ + Add a permission
+ - Remove a permission
+ = Assign a permission
+ </screen>
+ </para>
+
+ <para>
+ PERMISSION may be chosen from
+ </para>
+
+ <para>
+ <screen>
+ 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)
+ </screen>
+ </para>
+
+ <para>
+ Alternately, permissions can be set numerically where the first three
+ numbers are calculated by adding the octal values, such as
+ </para>
+
+ <para>
+ <screen>
+ 4 Read
+ 2 Write
+ 1 Execute
+ </screen>
+ </para>
+
+ <para>
+ An optional fourth digit can also be used to specify
+ </para>
+
+ <para>
+ <screen>
+ 4 Set user ID
+ 2 Set group ID
+ 1 Sticky bit
+ </screen>
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -R Change files and directories recursively.
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="chown">
+ <title>chown</title>
+ <para>
+ Usage: chown [OPTION]... OWNER[&lt;.|:&gt;[GROUP] FILE...
+ </para>
+
+ <para>
+ Change the owner and/or group of each FILE to OWNER and/or GROUP.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -R Change files and directories recursively
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="chroot">
+ <title>chroot</title>
+ <para>
+ Usage: chroot NEWROOT [COMMAND...]
+ </para>
+
+ <para>
+ Run COMMAND with root directory set to NEWROOT.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ ls -l /bin/ls
+ lrwxrwxrwx 1 root root 12 Apr 13 00:46 /bin/ls -&gt; /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*
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="chvt">
+ <title>chvt</title>
+ <para>
+ Usage: chvt N
+ </para>
+
+ <para>
+ Change the foreground virtual terminal to /dev/ttyN
+ </para>
+ </sect1>
+
+ <sect1 id="clear">
+ <title>clear</title>
+
+ <para>
+ Usage: clear
+ </para>
+
+ <para>
+ Clear the screen.
+ </para>
+ </sect1>
+
+ <sect1 id="cp">
+ <title>cp</title>
+
+ <para>
+ Usage: cp [OPTION]... SOURCE DEST
+ </para>
+
+ <para>
+ <screen>
+ or: cp [OPTION]... SOURCE... DIRECTORY
+ </screen>
+ </para>
+
+ <para>
+ Copy SOURCE to DEST, or multiple <literal>SOURCE(s)</literal> to
+ DIRECTORY.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -a Same as -dpR
+ -d Preserve links
+ -p Preserve file attributes if possible
+ -R Copy directories recursively
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="cut">
+ <title>cut</title>
+
+ <para>
+ Usage: cut [OPTION]... [FILE]...
+ </para>
+
+ <para>
+ Print selected fields from each input FILE to standard output.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -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
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ echo "Hello world" | cut -f 1 -d ' '
+ Hello
+ $ echo "Hello world" | cut -f 2 -d ' '
+ world
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="date">
+ <title>date</title>
+
+ <para>
+ Usage: date [OPTION]... [+FORMAT]
+ </para>
+
+ <para>
+ <screen>
+ or: date [OPTION] [MMDDhhmm[[CC]YY][.ss]]
+ </screen>
+ </para>
+
+ <para>
+ Display the current time in the given FORMAT, or set the system date.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -R Output RFC-822 compliant date string
+ -s Set time described by STRING
+ -u Print or set Coordinated Universal Time
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ date
+ Wed Apr 12 18:52:41 MDT 2000
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="dc">
+ <title>dc</title>
+
+ <para>
+ Usage: dc [EXPRESSION]
+ </para>
+
+ <para>
+ 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.
+ </para>
+
+ <para>
+ The behaviour of BusyBox/dc deviates (just a little ;-)
+ from GNU/dc, but this will be remedied in the future.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="dd">
+ <title>dd</title>
+
+ <para>
+ Usage: dd [OPTION]...
+ </para>
+
+ <para>
+ Copy a file, converting and formatting according to
+ options.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ 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
+ </screen>
+ </para>
+
+ <para>
+ Numbers may be suffixed by w (x2), k (x1024), b (x512),
+ or M (x1024^2).
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ dd if=/dev/zero of=/dev/ram1 bs=1M count=4
+ 4+0 records in
+ 4+0 records out
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="deallocvt">
+ <title>deallocvt</title>
+
+ <para>
+ Usage: deallocvt N
+ </para>
+
+ <para>
+ Deallocate unused virtual terminal /dev/ttyN.
+ </para>
+ </sect1>
+
+ <sect1 id="df">
+ <title>df</title>
+
+ <para>
+ Usage: df [FILE]...
+ </para>
+
+ <para>
+ Print the filesystem space used and space available.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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% /
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="dirname">
+ <title>dirname</title>
+
+ <para>
+ Usage: dirname NAME
+ </para>
+
+ <para>
+ Strip non-directory suffix from NAME.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ dirname /tmp/foo
+ /tmp
+ $ dirname /tmp/foo/
+ /tmp
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="dmesg">
+ <title>dmesg</title>
+
+ <para>
+ Usage: dmesg [OPTION]...
+ </para>
+
+ <para>
+ Print or control the kernel ring buffer.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -c Clear the ring buffer after printing
+ -n LEVEL Set the console logging level to LEVEL
+ -s BUFSIZE Query ring buffer using a buffer of BUFSIZE
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="dos2unix">
+ <title>dos2unix</title>
+
+ <para>
+ Usage: dos2unix < dosfile > unixfile
+ </para>
+
+ <para>
+ Converts a text file from dos format to unix format.
+ </para>
+
+ </sect1>
+
+ <sect1 id="dpkg-deb">
+ <title>dpkg-deb</title>
+
+ <para>
+ Usage: dpkg-deb [OPTION] archive [directory]
+ </para>
+
+ <para>
+ Debian package archive (.deb) manipulation tool
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -c List the contents of the filesystem tree archive portion of the package
+ -e Extracts the control information files from a package archive into the specified directory.
+ If no directory is specified then a subdirectory DEBIAN in the current directory is used.
+ -x Silently extracts the filesystem tree from a package archive into the specified directory.
+ -X Extracts the filesystem tree from a package archive into the specified directory, listing the files as it goes.
+ If required the specified directory (but not its parents) will be created.
+ </screen>
+ <para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ dpkg-deb -e ./busybox_0.48-1_i386.deb
+ dpkg-deb -x ./busybox_0.48-1_i386.deb ./unpack_dir
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="du">
+ <title>du</title>
+
+ <para>
+ Usage: du [OPTION]... [FILE]...
+ </para>
+
+ <para>
+ Summarize the disk space used for each FILE or current
+ directory. Disk space printed in units of 1k (i.e.,
+ 1024 bytes).
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -l Count sizes many times if hard linked
+ -s Display only a total for each argument
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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 .
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="dumpkmap">
+ <title>dumpkmap</title>
+
+ <para>
+ Usage: dumpkmap
+ </para>
+
+ <para>
+ Prints out a binary keyboard translation table to standard output.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ dumpkmap &lt; keymap
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="dutmp">
+ <title>dutmp</title>
+
+ <para>
+ Usage: dutmp [FILE]
+ </para>
+
+ <para>
+ Dump utmp file format (pipe delimited) from FILE or
+ stdin to stdout.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="echo">
+ <title>echo</title>
+
+ <para>
+ Usage: echo [OPTION]... [ARG]...
+ </para>
+
+ <para>
+ Print ARGs to stdout.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -n Suppress trailing newline
+ -e Enable interpretation of escaped characters
+ -E Disable interpretation of escaped characters
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ echo "Erik is cool"
+ Erik is cool
+ $ echo -e "Erik\nis\ncool"
+ Erik
+ is
+ cool
+ $ echo "Erik\nis\ncool"
+ Erik\nis\ncool
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="expr">
+ <title>expr</title>
+
+ <para>
+ Usage: expr EXPRESSION
+ </para>
+
+ <para>
+ Prints the value of EXPRESSION to standard output.
+ </para>
+
+ <para>
+ EXPRESSION may be:
+ </para>
+
+ <para>
+ <screen>
+ 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 &lt ARG2 ARG1 is less than ARG2
+ ARG1 &lt= ARG2 ARG1 is less than or equal to ARG2
+ ARG1 = ARG2 ARG1 is equal to ARG2
+ ARG1 != ARG2 ARG1 is unequal to ARG2
+ ARG1 &gt= ARG2 ARG1 is greater than or equal to ARG2
+ ARG1 &gt 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
+ </screen>
+ </para>
+
+ <para>
+ 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.
+ </para>
+
+ </sect1>
+
+
+ <sect1 id="false">
+ <title>false</title>
+
+ <para>
+ Usage: false
+ </para>
+
+ <para>
+ Return an exit code of FALSE (1).
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ false
+ $ echo $?
+ 1
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="fbset">
+ <title>fbset</title>
+
+ <para>
+ Usage: fbset [OPTION]... [MODE]
+ </para>
+
+ <para>
+ Show and modify frame buffer device settings.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -h Display option summary
+ -fb DEVICE Operate on DEVICE
+ -db FILE Use FILE for mode database
+ -g XRES YRES VXRES VYRES DEPTH Set all geometry parameters
+ -t PIXCLOCK LEFT RIGHT UPPER LOWER HSLEN VSLEN Set all timing parameters
+ -xres RES Set visible horizontal resolution
+ -yres RES Set visible vertical resolution
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="fdflush">
+ <title>fdflush</title>
+
+ <para>
+ Usage: fdflush DEVICE
+ </para>
+
+ <para>
+ Force floppy disk drive to detect disk change on DEVICE.
+ </para>
+ </sect1>
+
+ <sect1 id="find">
+ <title>find</title>
+
+ <para>
+ Usage: find [PATH]... [EXPRESSION]
+ </para>
+
+ <para>
+ Search for files in a directory hierarchy. The default
+ PATH is the current directory; default EXPRESSION is
+ '-print'.
+ </para>
+
+ <para>
+ EXPRESSION may consist of:
+ </para>
+
+ <para>
+ <screen>
+ -follow Dereference symbolic links
+ -name PATTERN File name (leading directories removed) matches PATTERN
+ -type X Filetype matches X (where X is one of: f,d,l,b,c,...)
+ -perm PERMS Permissions match any of (+NNN); all of (-NNN); or exactly (NNN)
+ -mtime TIME Modified time is greater than (+N); less than (-N); or exactly (N) days
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ find / -name /etc/passwd
+ /etc/passwd
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="free">
+ <title>free</title>
+
+ <para>
+ Usage: free
+ </para>
+
+ <para>
+ Displays the amount of free and used system memory.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ free
+ total used free shared buffers
+ Mem: 257628 248724 8904 59644 93124
+ Swap: 128516 8404 120112
+ Total: 386144 257128 129016
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="freeramdisk">
+ <title>freeramdisk</title>
+
+ <para>
+ Usage: freeramdisk DEVICE
+ </para>
+
+ <para>
+ Free all memory used by the ramdisk DEVICE.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ freeramdisk /dev/ram2
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="fsck.minix">
+ <title>fsck.minix</title>
+
+ <para>
+ Usage: fsck.minix [OPTION]... DEVICE
+ </para>
+
+ <para>
+ Perform a consistency check on the MINIX filesystem on
+ DEVICE.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -l List all filenames
+ -r Perform interactive repairs
+ -a Perform automatic repairs
+ -v Verbose
+ -s Output super-block information
+ -m Activate MINIX-like "mode not cleared" warnings
+ -f Force file system check.
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="getopt">
+ <title>getopt</title>
+
+ <para>
+ Usage: getopt [OPTIONS]...
+ </para>
+
+ <para>
+ Parse command options
+ </para>
+
+ <para>
+ <screen>
+ -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"
+ </screen>
+ </para>
+
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="grep">
+ <title>grep</title>
+
+ <para>
+ Usage: grep [OPTIONS]... PATTERN [FILE]...
+ </para>
+
+ <para>
+ Search for PATTERN in each FILE or stdin.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -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
+ </screen>
+ </para>
+
+ <para>
+ This version of grep matches full regular expressions.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="gunzip">
+ <title>gunzip</title>
+
+ <para>
+ Usage: gunzip [OPTION]... FILE
+ </para>
+
+ <para>
+ Uncompress FILE (or stdin if FILE is '-').
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -c Write output to standard output
+ -t Test compressed file integrity
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="gzip">
+ <title>gzip</title>
+
+ <para>
+ Usage: gzip [OPTION]... FILE
+ </para>
+
+ <para>
+ Compress FILE (or stdin if FILE is '-') with maximum
+ compression to FILE.gz (or stdout if FILE is '-').
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -c Write output to standard output
+ -d decompress
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="halt">
+ <title>halt</title>
+
+ <para>
+ Usage: halt
+ </para>
+
+ <para>
+ Halt the system.
+ </para>
+ </sect1>
+
+ <sect1 id="head">
+ <title>head</title>
+
+ <para>
+ Usage: head [OPTION] FILE...
+ </para>
+
+ <para>
+ 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.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -n NUM Print first NUM lines instead of first 10
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ head -n 2 /etc/passwd
+ root:x:0:0:root:/root:/bin/bash
+ daemon:x:1:1:daemon:/usr/sbin:/bin/sh
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="hostid">
+ <title>hostid</title>
+
+ <para>
+ Usage: hostid
+ </para>
+
+ <para>
+ 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.
+ </para>
+ </sect1>
+
+ <sect1 id="hostname">
+ <title>hostname</title>
+
+ <para>
+ Usage: hostname [OPTION]... [HOSTNAME|-F FILE]
+ </para>
+
+ <para>
+ Get or set the hostname or DNS domain name. If a
+ hostname is given (or a file with the -F parameter), the
+ host name will be set.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -s Short
+ -i Addresses for the hostname
+ -d DNS domain name
+ -F, --file FILE Use the contents of FILE to specify the hostname
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ hostname
+ slag
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="id">
+ <title>id</title>
+
+ <para>
+ Usage: id [OPTION]... [USERNAME]
+ </para>
+
+ <para>
+ Print information for USERNAME or the current user.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -g Print only the group ID
+ -u Print only the user ID
+ -n print a name instead of a number (with for -ug)
+ -r Print the real user ID instead of the effective ID (with -ug)
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ id
+ uid=1000(andersen) gid=1000(andersen)
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="init">
+ <title>init</title>
+
+ <para>
+ Usage: init
+ </para>
+
+ <para>
+ Init is the parent of all processes.
+ </para>
+
+ <para>
+ This version of init is designed to be run only by the
+ kernel.
+ </para>
+
+ <para>
+ 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.
+ </para>
+
+ <para>
+ BusyBox init works just fine without an inittab. If no
+ inittab is found, it has the following default behavior:
+ </para>
+
+ <para>
+ <screen>
+ ::sysinit:/etc/init.d/rcS
+ ::askfirst:/bin/sh
+ </screen>
+ </para>
+
+ <para>
+ If it detects that /dev/console is _not_ a serial
+ console, it will also run:
+ </para>
+
+ <para>
+ <screen>
+ tty2::askfirst:/bin/sh
+ </screen>
+ </para>
+
+ <para>
+ If you choose to use an /etc/inittab file, the inittab
+ entry format is as follows:
+ </para>
+
+ <para>
+ <screen>
+ &lt;id&gt;:&lt;runlevels&gt;:&lt;action&gt;:&lt;process&gt;
+ </screen>
+ </para>
+
+ <sect2>
+ <title>id</title>
+ <para>
+
+ WARNING: This field has a non-traditional meaning for BusyBox init!
+ The id field is used by BusyBox init to specify the controlling tty
+ for the specified process to run on. The contents of this field
+ are appended to "/dev/" and used as-is. There is no need for this
+ field to be unique, although if it isn't you may have strange
+ results. If this field is left blank, the controlling tty is set
+ to the console. Also note that if BusyBox detects that a serial
+ console is in use, then only entries whose controlling tty is
+ either the serial console or /dev/null will be run. BusyBox init
+ does nothing with utmp. We don't need no stinkin' utmp.
+
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>runlevels</title>
+
+ <para>
+ The runlevels field is completely ignored.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>action</title>
+
+
+ <para>
+ Valid actions include: sysinit, respawn, askfirst, wait,
+ once, and ctrlaltdel.
+ </para>
+
+
+ <para>
+ The available actions can be classified into two groups: actions
+ that are run only once, and actions that are re-run when the specified
+ process exits.
+ </para>
+
+ <para>
+ Run only-once actions:
+ </para>
+
+ <para>
+ 'sysinit' is the first item run on boot. init waits until all
+ sysinit actions are completed before continuing. Following the
+ completion of all sysinit actions, all 'wait' actions are run.
+ 'wait' actions, like 'sysinit' actions, cause init to wait until
+ the specified task completes. 'once' actions are asyncronous,
+ therefore, init does not wait for them to complete. 'ctrlaltdel'
+ actions are run immediately before init causes the system to reboot
+ (unmounting filesystems with a 'ctrlaltdel' action is a very good
+ idea).
+ </para>
+
+ <para>
+ Run repeatedly actions:
+ </para>
+
+ <para>
+ 'respawn' actions are run after the 'once' actions. When a process
+ started with a 'respawn' action exits, init automatically restarts
+ it. Unlike sysvinit, BusyBox init does not stop processes from
+ respawning out of control. The 'askfirst' actions acts just like
+ respawn, except that before running the specified process it
+ displays the line "Please press Enter to activate this console."
+ and then waits for the user to press enter before starting the
+ specified process.
+ </para>
+
+ <para>
+ Unrecognized actions (like initdefault) will cause init to emit an
+ error message, and then go along with its business. All actions are
+ run in the reverse order from how they appear in /etc/inittab.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>process</title>
+
+ <para>
+ Specifies the process to be executed and its
+ command line.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Example /etc/inittab file</title>
+
+ <para>
+ <screen>
+ # 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
+ tty2::askfirst:-/bin/sh
+ tty2::askfirst:-/bin/sh
+
+ # /sbin/getty invocations for selected ttys
+ #
+ tty4::respawn:/sbin/getty 38400 tty5
+ tty5::respawn:/sbin/getty 38400 tty6
+
+ # Example of how to put a getty on a serial line (for a terminal)
+ #
+ #::respawn:/sbin/getty -L ttyS0 9600 vt100
+ #::respawn:/sbin/getty -L ttyS1 9600 vt100
+ #
+ # Example how to put a getty on a modem line.
+ #::respawn:/sbin/getty 57600 ttyS2
+
+ # Stuff to do before rebooting
+ ::ctrlaltdel:/bin/umount -a -r
+ ::ctrlaltdel:/sbin/swapoff
+ </screen>
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="insmod">
+ <title>insmod</title>
+
+ <para>
+ Usage: insmod [OPTION]... MODULE [symbol=value]...
+ </para>
+
+ <para>
+ Load MODULE into the kernel.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -f Force module to load into the wrong kernel version.
+ -k Make module autoclean-able.
+ -v Verbose output
+ -x Do not export externs
+ -L Prevent simultaneous loads of the same module
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="kill">
+ <title>kill</title>
+
+ <para>
+ Usage: kill [OPTION] PID...
+ </para>
+
+ <para>
+ Send a signal (default is SIGTERM) to the specified
+ PID(s).
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -l List all signal names and numbers
+ -SIG Send signal SIG
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="killall">
+ <title>killall</title>
+
+ <para>
+ Usage: killall [OPTION] NAME...
+ </para>
+
+ <para>
+ Send a signal (default is SIGTERM) to the specified
+ NAME(s).
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -l List all signal names and numbers
+ -SIG Send signal SIG
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ killall apache
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="length">
+ <title>length</title>
+
+ <para>
+ Usage: length STRING
+ </para>
+
+ <para>
+ Print the length of STRING.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ length "Hello"
+ 5
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="ln">
+ <title>ln</title>
+
+ <para>
+ Usage: ln [OPTION]... TARGET FILE|DIRECTORY
+ </para>
+
+ <para>
+ Create a link named FILE or DIRECTORY to the specified
+ TARGET. You may use '--' to indicate that all following
+ arguments are non-options.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -s Make symbolic link instead of hard link
+ -f Remove existing destination file
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ ln -s BusyBox /tmp/ls
+ $ ls -l /tmp/ls
+ lrwxrwxrwx 1 root root 7 Apr 12 18:39 ls -&gt; BusyBox*
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="loadacm">
+ <title>loadacm</title>
+
+ <para>
+ Usage: loadacm
+ </para>
+
+ <para>
+ Load an acm from stdin.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ loadacm &lt; /etc/i18n/acmname
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="loadfont">
+ <title>loadfont</title>
+
+ <para>
+ Usage: loadfont
+ </para>
+
+ <para>
+ Load a console font from stdin.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ loadfont &lt; /etc/i18n/fontname
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="loadkmap">
+ <title>loadkmap</title>
+
+ <para>
+ Usage: loadkmap
+ </para>
+
+ <para>
+ Load a binary keyboard translation table from stdin.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ loadkmap &lt; /etc/i18n/lang-keymap
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="logger">
+ <title>logger</title>
+
+ <para>
+ Usage: logger [OPTION]... [MESSAGE]
+ </para>
+
+ <para>
+ Write MESSAGE to the system log. If MESSAGE is omitted, log
+ stdin.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -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
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ logger "hello"
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="logname">
+ <title>logname</title>
+
+ <para>
+ Usage: logname
+ </para>
+
+ <para>
+ Print the name of the current user.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ logname
+ root
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="ls">
+ <title>ls</title>
+
+ <para>
+ Usage: ls [OPTION]... [FILE]...
+ </para>
+
+ <para>
+
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -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
+ -L list entries pointed to by symbolic links
+ -R List subdirectories recursively
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="lsmod">
+ <title>lsmod</title>
+
+ <para>
+ Usage: lsmod
+ </para>
+
+ <para>
+ List currently loaded kernel modules.
+ </para>
+ </sect1>
+
+ <sect1 id="makedevs">
+ <title>makedevs</title>
+
+ <para>
+ Usage: makedevsf NAME TYPE MAJOR MINOR FIRST LAST [s]
+ </para>
+
+ <para>
+ Create a range of block or character special files.
+ </para>
+
+ <para>
+ TYPE may be:
+ </para>
+
+ <para>
+ <screen>
+ 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
+ </screen>
+ </para>
+
+ <para>
+ 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.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ makedevs /dev/ttyS c 4 66 2 63
+ [creates ttyS2-ttyS63]
+ $ makedevs /dev/hda b 3 0 0 8 s
+ [creates hda,hda1-hda8]
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="md5sum">
+ <title>md5sum</title>
+
+ <para>
+ Usage: md5sum [OPTION]... FILE...
+ </para>
+
+ <para>
+ Print or check MD5 checksums.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -b Read files in binary mode
+ -c Check MD5 sums against given list
+ -t Read files in text mode (default)
+ -g Read a string
+ </screen>
+ </para>
+
+ <para>
+ The following two options are useful only when verifying
+ checksums:
+ </para>
+
+ <para>
+ <screen>
+ -s Don't output anything, status code shows success
+ -w Warn about improperly formated MD5 checksum lines
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ md5sum busybox
+ 6fd11e98b98a58f64ff3398d7b324003 busybox
+ $ md5sum -c
+ 6fd11e98b98a58f64ff3398d7b324003 busybox
+ 6fd11e98b98a58f64ff3398d7b324002 busybox
+ md5sum: MD5 check failed for 'busybox'
+ ^D
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="mkdir">
+ <title>mkdir</title>
+
+ <para>
+ Usage: mkdir [OPTION]... DIRECTORY...
+ </para>
+
+ <para>
+ Create the DIRECTORY(s), if they do not already exist.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -m Set permission mode (as in chmod), not rwxrwxrwx - umask
+ -p No error if directory exists, make parent directories as needed
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="mkfifo">
+ <title>mkfifo</title>
+
+ <para>
+ Usage: mkfifo [OPTION] NAME
+ </para>
+
+ <para>
+ Create a named pipe (identical to 'mknod NAME p').
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -m MODE Create the pipe using the specified mode (default a=rw)
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="mkfs.minix">
+ <title>mkfs.minix</title>
+
+ <para>
+ Usage: mkfs.minix [OPTION]... NAME [BLOCKS]
+ </para>
+
+ <para>
+ Make a MINIX filesystem.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="mknod">
+ <title>mknod</title>
+
+ <para>
+ Usage: mknod [OPTION]... NAME TYPE MAJOR MINOR
+ </para>
+
+ <para>
+ Create a special file (block, character, or pipe).
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -m Create the special file using the specified mode (default a=rw)
+ </screen>
+ </para>
+
+ <para>
+ TYPE may be:
+ </para>
+
+ <para>
+ <screen>
+ 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
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ mknod /dev/fd0 b 2 0
+ $ mknod -m 644 /tmp/pipe p
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="mkswap">
+ <title>mkswap</title>
+
+ <para>
+ Usage: mkswap [OPTION]... DEVICE [BLOCKS]
+ </para>
+
+ <para>
+ Prepare a disk partition to be used as a swap partition.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -c Check for read-ability.
+ -v0 Make version 0 swap [max 128 Megs].
+ -v1 Make version 1 swap [big!] (default for kernels &gt; 2.1.117).
+ BLOCKS Number of block to use (default is entire partition).
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="mktemp">
+ <title>mktemp</title>
+
+ <para>
+ Usage: mktemp TEMPLATE
+ </para>
+
+ <para>
+ Creates a temporary file with its name based on
+ TEMPLATE. TEMPLATE is any name with six `Xs' (i.e.,
+ /tmp/temp.XXXXXX).
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ mktemp /tmp/temp.XXXXXX
+ /tmp/temp.mWiLjM
+ $ ls -la /tmp/temp.mWiLjM
+ -rw------- 1 andersen andersen 0 Apr 25 17:10 /tmp/temp.mWiLjM
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="more">
+ <title>more</title>
+
+ <para>
+ Usage: more [FILE]...
+ </para>
+
+ <para>
+ Page through text one screenful at a time.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ dmesg | more
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="mount">
+ <title>mount</title>
+
+ <para>
+ Usage: mount [OPTION]...
+ </para>
+
+ <para>
+ <screen>
+ or: mount [OPTION]... DEVICE DIRECTORY
+ </screen>
+ </para>
+
+ <para>
+ Mount filesystems.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -a Mount all filesystems in /etc/fstab
+ -o One of the many filesystem options listed below
+ -r Mount the filesystem read-only
+ -t TYPE Specify the filesystem type
+ -w Mount the filesystem read-write
+ </screen>
+ </para>
+
+ <para>
+ Options for use with the -o flag:
+ </para>
+
+ <para>
+ <screen>
+ async/sync Writes are asynchronous / synchronous
+ atime/noatime Enable / disable updates to inode access times
+ dev/nodev Allow / disallow use of special device files
+ exec/noexec Allow / disallow use of executable files
+ loop Mount a file via loop device
+ suid/nosuid Allow / disallow set-user-id-root programs
+ remount Remount a currently mounted filesystem
+ ro/rw Mount filesystem read-only / read-write
+ </screen>
+ </para>
+
+ <para>
+ There are even more flags that are filesystem specific.
+ You'll have to see the written documentation for those.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="mt">
+ <title>mt</title>
+
+ <para>
+ Usage: mt [OPTION] OPCODE VALUE
+ </para>
+
+ <para>
+ Control magnetic tape drive operation.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -f DEVICE Control DEVICE
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="mv">
+ <title>mv</title>
+
+ <para>
+ Usage: mv SOURCE DEST
+ </para>
+
+ <para>
+ <screen>
+ or: mv SOURCE... DIRECTORY
+ </screen>
+ </para>
+
+ <para>
+ Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ mv /tmp/foo /bin/bar
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="nc">
+ <title>nc</title>
+
+ <para>
+ Usage: nc HOST PORT
+ </para>
+
+ <para>
+ or: nc -p PORT -l
+ </para>
+
+
+ <para>
+ Open a pipe to HOST:PORT or listen for a connection on PORT.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="nslookup">
+ <title>nslookup</title>
+
+ <para>
+ Usage: nslookup [HOST]
+ </para>
+
+ <para>
+ Query the nameserver for the IP address of the given
+ HOST.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ nslookup localhost
+ Server: default
+ Address: default
+
+ Name: debian
+ Address: 127.0.0.1
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="ping">
+ <title>ping</title>
+
+ <para>
+ Usage: ping [OPTION]... HOST
+ </para>
+
+ <para>
+ Send ICMP ECHO_REQUEST packets to HOST.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -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
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="poweroff">
+ <title>poweroff</title>
+
+ <para>
+ Usage: poweroff
+ </para>
+
+ <para>
+ Shut down the system, and request that the kernel turn
+ off power upon halting.
+ </para>
+ </sect1>
+
+ <sect1 id="printf">
+ <title>printf</title>
+
+ <para>
+ Usage: printf FORMAT [ARGUMENT]...
+ </para>
+
+ <para>
+ Format and print the given data in a manner similar to
+ the C printf command.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ printf "Val=%d\n" 5
+ Val=5
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="ps">
+ <title>ps</title>
+
+ <para>
+ Usage: ps
+ </para>
+
+ <para>
+ Report process status. This version of ps accepts no
+ options.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="pwd">
+ <title>pwd</title>
+
+ <para>
+ Usage: pwd
+ </para>
+
+ <para>
+ Print the full filename of the current working
+ directory.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ pwd
+ /root
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="rdate">
+ <title>rdate</title>
+
+ <para>
+ Usage: rdate [OPTION] HOST
+ </para>
+
+ <para>
+ Get and possibly set the system date and time from a remote HOST.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -s Set the system date and time (default).
+ -p Print the date and time.
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="reboot">
+ <title>reboot</title>
+
+ <para>
+ Usage: reboot
+ </para>
+
+ <para>
+ Reboot the system.
+ </para>
+ </sect1>
+
+ <sect1 id="renice">
+ <title>renice</title>
+
+ <para>
+ Usage: renice priority pid [pid ...]
+ </para>
+
+ <para>
+ 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).
+ </para>
+ </sect1>
+
+ <sect1 id="reset">
+ <title>reset</title>
+
+ <para>
+ Usage: reset
+ </para>
+
+ <para>
+ Resets the screen.
+ </para>
+ </sect1>
+
+ <sect1 id="rm">
+ <title>rm</title>
+
+ <para>
+ Usage: rm [OPTION]... FILE...
+ </para>
+
+ <para>
+ Remove (unlink) the FILE(s). You may use '--' to
+ indicate that all following arguments are non-options.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -i Always prompt before removing each destinations
+ -f Remove existing destinations, never prompt
+ -r or -R Remove the contents of directories recursively
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ rm -rf /tmp/foo
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="rmdir">
+ <title>rmdir</title>
+
+ <para>
+ Usage: rmdir DIRECTORY...
+ </para>
+
+ <para>
+ Remove DIRECTORY(s) if they are empty.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ rmdir /tmp/foo
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="rmmod">
+ <title>rmmod</title>
+
+ <para>
+ Usage: rmmod [OPTION]... [MODULE]...
+ </para>
+
+ <para>
+ Unload MODULE(s) from the kernel.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -a Try to remove all unused kernel modules
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ rmmod tulip
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="sed">
+ <title>sed</title>
+
+ <para>
+ Usage: sed [OPTION]... SCRIPT [FILE]...
+ </para>
+
+ <para>
+ Allowed sed scripts come in the following form:
+ </para>
+
+ <para>
+ <screen>
+ ADDR [!] COMMAND
+ </screen>
+ </para>
+
+ <para>
+ ADDR can be:
+ </para>
+
+ <para>
+ <screen>
+ NUMBER Match specified line number
+ $ Match last line
+ /REGEXP/ Match specified regexp
+ </screen>
+ </para>
+
+ <para>
+ ! inverts the meaning of the match
+ </para>
+
+ <para>
+ COMMAND can be:
+ </para>
+
+ <para>
+ <screen>
+ 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
+ </screen>
+ </para>
+
+ <para>
+ This version of sed matches full regular expressions.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -e Add the script to the commands to be executed
+ -n Suppress automatic printing of pattern space
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ echo "foo" | sed -e 's/f[a-zA-Z]o/bar/g'
+ bar
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="setkeycodes">
+ <title>setkeycodes</title>
+
+ <para>
+ Usage: setkeycodes SCANCODE KEYCODE ...
+ </para>
+
+ <para>
+ Set entries into the kernel's scancode-to-keycode map,
+ allowing unusual keyboards to generate usable keycodes.
+ </para>
+
+ <para>
+ SCANCODE may be either xx or e0xx (hexadecimal), and
+ KEYCODE is given in decimal.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ setkeycodes e030 127
+ </screen>
+ </para>
+ </sect1>
+
+
+ <sect1 id="sh">
+ <title>sh</title>
+
+ <para>
+ Usage: sh
+ </para>
+
+ <para>
+ lash -- the BusyBox LAme SHell (command interpreter)
+ </para>
+
+ <para>
+ This command does not yet have proper documentation.
+ </para>
+
+ <para>
+ 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.
+ </para>
+ </sect1>
+
+ <sect1 id="sleep">
+ <title>sleep</title>
+
+ <para>
+ Usage: sleep N
+ </para>
+
+ <para>
+ Pause for N seconds.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ sleep 2
+ [2 second delay results]
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="sort">
+ <title>sort</title>
+
+ <para>
+ Usage: sort [OPTION]... [FILE]...
+ </para>
+
+ <para>
+ Sort lines of text in FILE(s).
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -n Compare numerically
+ -r Reverse after sorting
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ echo -e "e\nf\nb\nd\nc\na" | sort
+ a
+ b
+ c
+ d
+ e
+ f
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="swapoff">
+ <title>swapoff</title>
+
+ <para>
+ Usage: swapoff [OPTION] [DEVICE]
+ </para>
+
+ <para>
+ Stop swapping virtual memory pages on DEVICE.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -a Stop swapping on all swap devices
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="swapon">
+ <title>swapon</title>
+
+ <para>
+ Usage: swapon [OPTION] [DEVICE]
+ </para>
+
+ <para>
+ Start swapping virtual memory pages on the given device.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -a Start swapping on all swap devices
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="sync">
+ <title>sync</title>
+
+ <para>
+ Usage: sync
+ </para>
+
+ <para>
+ Write all buffered filesystem blocks to disk.
+ </para>
+ </sect1>
+
+ <sect1 id="syslogd">
+ <title>syslogd</title>
+
+ <para>
+ Usage: syslogd [OPTION]...
+ </para>
+
+ <para>
+ Linux system and kernel (provides klogd) logging
+ utility. Note that this version of syslogd/klogd ignores
+ /etc/syslog.conf.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -m NUM Interval between MARK lines (default=20min, 0=off)
+ -n Run as a foreground process
+ -K Do not start up the klogd process
+ -O FILE Use an alternate log file (default=/var/log/messages)
+ -R HOST[:PORT] Log remotely to IP or hostname on PORT (default PORT=514/UDP)
+ -L Log locally as well as network logging (default is network only)
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ syslogd -R masterlog:514
+ $ syslogd -R 192.168.1.1:601
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="tail">
+ <title>tail</title>
+
+ <para>
+ Usage: tail [OPTION] [FILE]...
+ </para>
+
+ <para>
+ 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 stdin.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -n NUM Print last NUM lines instead of last 10
+ -f Output data as the file grows. This version
+ of 'tail -f' supports only one file at a time.
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ tail -n 1 /etc/resolv.conf
+ nameserver 10.0.0.1
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="tar">
+ <title>tar</title>
+
+ <para>
+ Usage: tar [MODE] [OPTION] [FILE]...
+ </para>
+
+ <para>
+
+ </para>
+
+ <para>
+ MODE may be chosen from
+ </para>
+
+ <para>
+ <screen>
+ c Create
+ x Extract
+ t List
+ </screen>
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ f FILE Use FILE for tarfile (or stdin if '-')
+ O Extract to stdout
+ exclude FILE File to exclude
+ v List files processed
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ zcat /tmp/tarball.tar.gz | tar -xf -
+ $ tar -cf /tmp/tarball.tar /usr/local
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="tee">
+ <title>tee</title>
+
+ <para>
+ Usage: tee [OPTION]... [FILE]...
+ </para>
+
+ <para>
+ Copy stdin to FILE(s), and also to stdout.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -a Append to the given FILEs, do not overwrite
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ echo "Hello" | tee /tmp/foo
+ Hello
+ $ cat /tmp/foo
+ Hello
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="telnet">
+ <title>telnet</title>
+
+ <para>
+ Usage: telnet HOST [PORT]
+ </para>
+
+ <para>
+ Establish interactive communication with another
+ computer over a network using the TELNET protocol.
+ </para>
+ </sect1>
+
+ <sect1 id="test">
+ <title>test, [</title>
+
+ <para>
+ Usage: test EXPRESSION
+ </para>
+
+ <para>
+ or: [ EXPRESSION ]
+ </para>
+
+ <para>
+ Check file types and compare values returning an exit
+ code determined by the value of EXPRESSION.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ test 1 -eq 2
+ $ echo $?
+ 1
+ $ test 1 -eq 1
+ $ echo $?
+ 0
+ $ [ -d /etc ]
+ $ echo $?
+ 0
+ $ [ -d /junk ]
+ $ echo $?
+ 1
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="touch">
+ <title>touch</title>
+
+ <para>
+ Usage: touch [OPTION]... FILE...
+ </para>
+
+ <para>
+ Update the last-modified date on (or create) FILE(s).
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -c Do not create files
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ 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
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="tr">
+ <title>tr</title>
+
+ <para>
+ Usage: tr [OPTION]... STRING1 [STRING2]
+ </para>
+
+ <para>
+ Translate, squeeze, and/or delete characters from stdin,
+ writing to stdout.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -c Take complement of STRING1
+ -d Delete input characters coded STRING1
+ -s Squeeze multiple output characters of STRING2 into one character
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ echo "gdkkn vnqkc" | tr [a-y] [b-z]
+ hello world
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="true">
+ <title>true</title>
+
+ <para>
+ Usage: true
+ </para>
+
+ <para>
+ Return an exit code of TRUE (1).
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ true
+ $ echo $?
+ 0
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="tty">
+ <title>tty</title>
+
+ <para>
+ Usage: tty
+ </para>
+
+ <para>
+ Print the file name of the terminal connected to stdin.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -s Print nothing, only return an exit status
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ tty
+ /dev/tty2
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="umount">
+ <title>umount</title>
+
+ <para>
+ Usage: umount [OPTION]... DEVICE|DIRECTORY
+ </para>
+
+ <para>
+
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -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)
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ umount /dev/hdc1
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="uname">
+ <title>uname</title>
+
+ <para>
+ Usage: uname [OPTION]...
+ </para>
+
+ <para>
+ Print certain system information. With no OPTION, same
+ as -s.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -a Print all information
+ -m Print 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
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ uname -a
+ Linux debian 2.2.15pre13 #5 Tue Mar 14 16:03:50 MST 2000 i686 unknown
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="uniq">
+ <title>uniq</title>
+
+ <para>
+ Usage: uniq [INPUT [OUTPUT]]
+ </para>
+
+ <para>
+ Discard all but one of successive identical lines from
+ INPUT (or stdin), writing to OUTPUT (or stdout).
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -c prefix lines by the number of occurrences
+ -d only print duplicate lines
+ -u only print unique lines
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ echo -e "a\na\nb\nc\nc\na" | sort | uniq
+ a
+ b
+ c
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="unix2dos">
+ <title>unix2dos</title>
+
+ <para>
+ Usage: unix2dos < unixfile > dosfile
+ </para>
+
+ <para>
+ Converts a text file from unix format to dos format.
+ </para>
+
+ </sect1>
+
+ <sect1 id="unrpm">
+ <title>unrpm</title>
+
+ <para>
+ Usage: unrpm < package.rpm | gzip -d | cpio -idmuv
+ </para>
+
+ <para>
+ Extracts an rpm archive.
+ </para>
+
+ </sect1>
+
+ <sect1 id="update">
+ <title>update</title>
+
+ <para>
+ Usage: update [OPTION]...
+ </para>
+
+ <para>
+ Periodically flush filesystem buffers.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -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)
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="uptime">
+ <title>uptime</title>
+
+ <para>
+ Usage: uptime
+ </para>
+
+ <para>
+ Display how long the system has been running since boot.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ uptime
+ 1:55pm up 2:30, load average: 0.09, 0.04, 0.00
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="usleep">
+ <title>usleep</title>
+
+ <para>
+ Usage: usleep N
+ </para>
+
+ <para>
+ Pause for N microseconds.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ usleep 1000000
+ [pauses for 1 second]
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="uudecode">
+ <title>uudecode</title>
+
+ <para>
+ Usage: uudecode [OPTION] [FILE]
+ </para>
+
+ <para>
+ Uudecode a uuencoded file.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -o FILE Direct output to FILE
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ uudecode -o busybox busybox.uu
+ $ ls -l busybox
+ -rwxr-xr-x 1 ams ams 245264 Jun 7 21:35 busybox
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="uuencode">
+ <title>uuencode</title>
+
+ <para>
+ Usage: uuencode [OPTION] [INFILE] OUTFILE
+ </para>
+
+ <para>
+ Uuencode a file.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -m Use base64 encoding as of RFC1521
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ uuencode busybox busybox
+ begin 755 busybox
+ M?T5,1@$!`0````````````(``P`!````L+@$"#0```!0N@,``````#0`(``&amp;
+ .....
+ $ uudecode busybox busybox &gt; busybox.uu
+ $
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="watchdog">
+ <title>watchdog</title>
+
+ <para>
+ Usage: watchdog device
+ </para>
+
+ <para>
+ Periodically writes to watchdog device B<device>.
+ </para>
+ </sect1>
+
+ <sect1 id="wc">
+ <title>wc</title>
+
+ <para>
+ Usage: wc [OPTION]... [FILE]...
+ </para>
+
+ <para>
+ Print line, word, and byte counts for each FILE, and a
+ total line if more than one FILE is specified. With no
+ FILE, read stdin.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -c Print the byte counts
+ -l Print the newline counts
+ -L Print the length of the longest line
+ -w Print the word counts
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ wc /etc/passwd
+ 31 46 1365 /etc/passwd
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="which">
+ <title>which</title>
+
+ <para>
+ Usage: which [COMMAND]...
+ </para>
+
+ <para>
+ Locate COMMAND(s).
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ which login
+ /bin/login
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="whoami">
+ <title>whoami</title>
+
+ <para>
+ Usage: whoami
+ </para>
+
+ <para>
+ Print the user name associated with the current
+ effective user id.
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ whoami
+ andersen
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="xargs">
+ <title>xargs</title>
+
+ <para>
+ Usage: xargs [OPTIONS] [COMMAND] [ARGS...]
+ </para>
+
+ <para>
+ Executes COMMAND on every item given by standard input.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -t Print the command just before it is run
+ </screen>
+ </para>
+
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ $ ls | xargs gzip
+ $ find . -name '*.c' -print | xargs rm
+ </screen>
+ </para>
+ </sect1>
+
+ <sect1 id="yes">
+ <title>yes</title>
+
+ <para>
+ Usage: yes [STRING]...
+ </para>
+
+ <para>
+ Repeatedly output a line with all specified STRING(s),
+ or `y'.
+ </para>
+ </sect1>
+
+ <sect1 id="zcat">
+ <title>zcat</title>
+
+ <para>
+ Usage: zcat [OPTION]... FILE
+ </para>
+
+ <para>
+ Uncompress FILE (or stdin if FILE is '-') to stdout.
+ </para>
+
+ <para>
+ Options:
+ </para>
+
+ <para>
+ <screen>
+ -t Test compressed file integrity
+ </screen>
+ </para>
+
+ <para>
+ Example:
+ </para>
+
+ <para>
+ <screen>
+ </screen>
+ </para>
+ </sect1>
+ </chapter>
+
+ <chapter id="LIBC-NSS">
+ <title>LIBC NSS</title>
+
+ <para>
+ 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 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 /lib/libnss_*
+ libraries installed.
+ </para>
+
+ <para>
+ 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.
+ </para>
+ </chapter>
+
+ <chapter id="SEE-ALSO">
+ <title>SEE ALSO</title>
+
+ <para>
+ <literal>textutils(1),</literal>
+ <literal>shellutils(1),</literal>
+ etc...
+ </para>
+ </chapter>
+
+ <chapter id="MAINTAINER">
+ <title>MAINTAINER</title>
+
+ <para>
+ Erik Andersen &lt;andersee@debian.org&gt; &lt;andersen@lineo.com&gt;
+ </para>
+ </chapter>
+
+ <chapter id="AUTHORS">
+ <title>AUTHORS</title>
+
+ <para>
+ The following people have made significant contributions to
+ BusyBox -- whether they know it or not.
+ </para>
+
+ <para>
+ Erik Andersen &lt;andersee@debian.org&gt;
+ </para>
+
+ <para>
+ Edward Betts &lt;edward@debian.org&gt;
+ </para>
+
+ <para>
+ John Beppu &lt;beppu@lineo.com&gt;
+ </para>
+
+ <para>
+ Brian Candler &lt;B.Candler@pobox.com&gt;
+ </para>
+
+ <para>
+ Randolph Chung &lt;tausq@debian.org&gt;
+ </para>
+
+ <para>
+ Dave Cinege &lt;dcinege@psychosis.com&gt;
+ </para>
+
+ <para>
+ Karl M. Hegbloom &lt;karlheg@debian.org&gt;
+ </para>
+
+ <para>
+ Daniel Jacobowitz &lt;dan@debian.org&gt;
+ </para>
+
+ <para>
+ Matt Kraai &lt;kraai@alumni.carnegiemellon.edu&gt;
+ </para>
+
+ <para>
+ John Lombardo &lt;john@deltanet.com&gt;
+ </para>
+
+ <para>
+ Glenn McGrath &lt;bug1@netconnect.com.au&gt;
+ </para>
+
+ <para>
+ Bruce Perens &lt;bruce@perens.com&gt;
+ </para>
+
+ <para>
+ Chip Rosenthal &lt;chip@unicom.com&gt;, &lt;crosenth@covad.com&gt;
+ </para>
+
+ <para>
+ Pavel Roskin &lt;proski@gnu.org&gt;
+ </para>
+
+ <para>
+ Gyepi Sam &lt;gyepi@praxis-sw.com&gt;
+ </para>
+
+ <para>
+ Linus Torvalds &lt;torvalds@transmeta.com&gt;
+ </para>
+
+ <para>
+ Mark Whitley &lt;markw@lineo.com&gt;
+ </para>
+
+ <para>
+ Charles P. Wright &lt;cpwright@villagenet.com&gt;
+ </para>
+
+ <para>
+ Enrique Zanardi &lt;ezanardi@ull.es&gt;
+ </para>
+
+
+ </chapter>
+</book> <!-- End of the book -->
diff --git a/release/src/router/busybox/docs/busybox_footer.pod b/release/src/router/busybox/docs/busybox_footer.pod
new file mode 100644
index 00000000..e802d908
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox_footer.pod
@@ -0,0 +1,169 @@
+=back
+
+=head1 LIBC NSS
+
+GNU Libc uses the Name Service Switch (NSS) to configure the behavior of the C
+library for the local environment, and to configure how it reads system data,
+such as passwords and group information. BusyBox has made it Policy that it
+will never use NSS, and will never use and libc calls that make use of NSS.
+This allows you to run an embedded system without the need for installing an
+/etc/nsswitch.conf file and without and /lib/libnss_* libraries installed.
+
+If you are using a system that is using a remote LDAP server for authentication
+via GNU libc NSS, and you want to use BusyBox, then you will need to adjust the
+BusyBox source. Chances are though, that if you have enough space to install
+of that stuff on your system, then you probably want the full GNU utilities.
+
+=head1 SEE ALSO
+
+textutils(1), shellutils(1), etc...
+
+=head1 MAINTAINER
+
+Erik Andersen <andersee@debian.org> <andersen@lineo.com>
+
+=head1 AUTHORS
+
+The following people have contributed code to BusyBox whether
+they know it or not.
+
+
+=for html <br>
+
+Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
+
+ Tons of new stuff, major rewrite of most of the
+ core apps, tons of new apps as noted in header files.
+
+=for html <br>
+
+John Beppu <beppu@lineo.com>
+
+ du, head, nslookup, sort, tee, uniq (so Kraai could rewrite them ;-),
+ documentation
+
+=for html <br>
+
+Edward Betts <edward@debian.org>
+
+ expr, hostid, logname, tty, wc, whoami, yes
+
+=for html <br>
+
+Brian Candler <B.Candler@pobox.com>
+
+ tiny-ls(ls)
+
+=for html <br>
+
+Randolph Chung <tausq@debian.org>
+
+ fbset, ping, hostname, and mkfifo
+
+=for html <br>
+
+Dave Cinege <dcinege@psychosis.com>
+
+ more(v2), makedevs, dutmp, modularization, auto links file,
+ various fixes, Linux Router Project maintenance
+
+=for html <br>
+
+Larry Doolittle <ldoolitt@recycle.lbl.gov>
+
+ various fixes, shell rewrite
+
+=for html <br>
+
+Karl M. Hegbloom <karlheg@debian.org>
+
+ cp_mv.c, the test suite, various fixes to utility.c, &c.
+
+=for html <br>
+
+Sterling Huxley <sterling@europa.com>
+
+ vi (!!!)
+
+=for html <br>
+
+Daniel Jacobowitz <dan@debian.org>
+
+ mktemp.c
+
+=for html <br>
+
+Matt Kraai <kraai@alumni.carnegiemellon.edu>
+
+ documentation, bugfixes
+
+=for html <br>
+
+John Lombardo <john@deltanet.com>
+
+ dirname, tr
+
+=for html <br>
+
+Glenn McGrath <bug1@netconnect.com.au>
+
+ ar.c
+
+=for html <br>
+
+Vladimir Oleynik <dzo@simtreas.ru>
+
+ cmdedit, stty-port, locale, various fixes
+ and irreconcilable critic of everything not perfect.
+
+=for html <br>
+
+Bruce Perens <bruce@pixar.com>
+
+ Original author of BusyBox. His code is still in many apps.
+
+=for html <br>
+
+Chip Rosenthal <chip@unicom.com>, <crosenth@covad.com>
+
+ wget - Contributed by permission of Covad Communications
+
+=for html <br>
+
+Pavel Roskin <proski@gnu.org>
+
+ Lots of bugs fixes and patches.
+
+=for html <br>
+
+Gyepi Sam <gyepi@praxis-sw.com>
+
+ Remote logging feature for syslogd
+
+=for html <br>
+
+Linus Torvalds <torvalds@transmeta.com>
+
+ mkswap, fsck.minix, mkfs.minix
+
+=for html <br>
+
+Mark Whitley <markw@lineo.com>
+
+ sed remix, bug fixes, style-guide, etc.
+
+=for html <br>
+
+Charles P. Wright <cpwright@villagenet.com>
+
+ gzip, mini-netcat(nc)
+
+=for html <br>
+
+Enrique Zanardi <ezanardi@ull.es>
+
+ tarcat (since removed), loadkmap, various fixes, Debian maintenance
+
+=cut
+
+# $Id: busybox_footer.pod,v 1.1.1.4 2003/10/14 08:09:39 sparq Exp $
diff --git a/release/src/router/busybox/docs/busybox_header.pod b/release/src/router/busybox/docs/busybox_header.pod
new file mode 100644
index 00000000..84a2a5f4
--- /dev/null
+++ b/release/src/router/busybox/docs/busybox_header.pod
@@ -0,0 +1,73 @@
+# 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<-h> option to provide a
+terse runtime description of their behavior.
+
+=head1 COMMANDS
+
+Currently defined functions include:
+
+adjtimex, ar, basename, busybox, cat, chgrp, chmod, chown, chroot, chvt, clear,
+cmp, cp, cpio, cut, date, dc, dd, deallocvt, df, dirname, dmesg, dos2unix, dpkg,
+dpkg-deb, du, dumpkmap, dutmp, echo, expr, false, fbset, fdflush, find, free,
+freeramdisk, fsck.minix, getopt, grep, gunzip, gzip, halt, head, hostid,
+hostname, id, ifconfig, init, insmod, kill, killall, klogd, length, ln,
+loadacm, loadfont, loadkmap, logger, logname, ls, lsmod, makedevs, md5sum,
+mkdir, mkfifo, mkfs.minix, mknod, mkswap, mktemp, more, mount, mt, mv, nc,
+nslookup, ping, pivot_root, poweroff, printf, ps, pwd, rdate, readlink, reboot,
+renice, reset, rm, rmdir, rmmod, route, rpm2cpio, rpmunpack, sed, setkeycodes,
+sh, sleep, sort, stty, swapoff, swapon, sync, syslogd, tail, tar, tee, telnet,
+test, tftp, touch, tr, true, tty, umount, uname, uniq, unix2dos, update, uptime,
+usleep, uudecode, uuencode, watchdog, wc, wget, which, whoami, xargs, yes, zcat,
+[
+
+=over 4
+
diff --git a/release/src/router/busybox/docs/contributing.txt b/release/src/router/busybox/docs/contributing.txt
new file mode 100644
index 00000000..2e004928
--- /dev/null
+++ b/release/src/router/busybox/docs/contributing.txt
@@ -0,0 +1,476 @@
+Contributing To Busybox
+=======================
+
+This document describes what you need to do to contribute to Busybox, where
+you can help, guidelines on testing, and how to submit a well-formed patch
+that is more likely to be accepted.
+
+The Busybox home page is at: http://busybox.lineo.com
+
+
+
+Pre-Contribution Checklist
+--------------------------
+
+So you want to contribute to Busybox, eh? Great, wonderful, glad you want to
+help. However, before you dive in, headlong and hotfoot, there are some things
+you need to do:
+
+
+Checkout the Latest Code from CVS
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This is a necessary first step. Please do not try to work with the last
+released version, as there is a good chance that somebody has already fixed
+the bug you found. Somebody might have even added the feature you had in mind.
+Don't make your work obsolete before you start!
+
+For information on how to check out Busybox from CVS, please look at the
+following links:
+
+ http://oss.lineo.com/cvs_anon.html
+ http://oss.lineo.com/cvs_howto.html
+
+
+Read the Mailing List
+~~~~~~~~~~~~~~~~~~~~~
+
+No one is required to read the entire archives of the mailing list, but you
+should at least read up on what people have been talking about lately. If
+you've recently discovered a problem, chances are somebody else has too. If
+you're the first to discover a problem, post a message and let the rest of us
+know.
+
+Archives can be found here:
+
+ http://opensource.lineo.com/lists/busybox/
+
+If you have a serious interest in Busybox, i.e., you are using it day-to-day or
+as part of an embedded project, it would be a good idea to join the mailing
+list.
+
+A web-based sign-up form can be found here:
+
+ http://opensource.lineo.com/mailman/listinfo/busybox
+
+
+Coordinate with the Applet Maintainer
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Some (not all) of the applets in Busybox are "owned" by a maintainer who has
+put significant effort into it and is probably more familiar with it than
+others. To find the maintainer of an applet, look at the top of the .c file
+for a name following the word 'Copyright' or 'Written by' or 'Maintainer'.
+
+Before plunging ahead, it's a good idea to send a message to the mailing list
+that says: "Hey, I was thinking about adding the 'transmogrify' feature to the
+'foo' applet. Would this be useful? Is anyone else working on it?" You might
+want to CC the maintainer (if any) with your question.
+
+
+
+Areas Where You Can Help
+------------------------
+
+Busybox can always use improvement! If you're looking for ways to help, there
+there are a variety of areas where you could help.
+
+
+What Busybox Doesn't Need
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Before listing the areas where you _can_ help, it's worthwhile to mention the
+areas where you shouldn't bother. While Busybox strives to be the "Swiss Army
+Knife" of embedded Linux, there are some applets that will not be accepted:
+
+ - Any filesystem manipulation tools: Busybox is filesystem independent and
+ we do not want to start adding mkfs/fsck tools for every (or any)
+ filesystem under the sun. (fsck_minix.c and mkfs_minix.c are living on
+ borrowed time.) There are far too many of these tools out there. Use
+ the upstream version. Not everything has to be part of Busybox.
+
+ - Any partitioning tools: Partitioning a device is typically done once and
+ only once, and tools which do this generally do not need to reside on the
+ target device (esp a flash device). If you need a partitioning tool, grab
+ one (such as fdisk, sfdisk, or cfdisk from util-linux) and use that, but
+ don't try to merge it into busybox. These are nasty and complex and we
+ don't want to maintain them.
+
+ - Any disk, device, or media-specific tools: Use the -utils or -tools package
+ that was designed for your device; don't try to shoehorn them into Busybox.
+
+ - Any architecture specific tools: Busybox is (or should be) architecture
+ independent. Do not send us tools that cannot be used across multiple
+ platforms / arches.
+
+ - Any daemons that are not essential to basic system operation. To date, only
+ syslogd and klogd meet this requirement. We do not need a web server, an
+ ftp daemon, a dhcp server, a mail transport agent or a dns resolver. If you
+ need one of those, you are welcome to ask the folks on the mailing list for
+ recommendations, but please don't bloat up Busybox with any of these.
+
+
+Bug Reporting
+~~~~~~~~~~~~~
+
+If you find a bug in Busybox, you can send a bug report to our bug tracking
+system (homepage: http://bugs.lineo.com). Instructions on how to send a bug
+report to the tracking system can be found at:
+
+ http://bugs.lineo.com/Reporting.html
+
+The README file that comes with Busybox also describes how to submit a bug.
+
+A well-written bug report should include a transcript of a shell session that
+demonstrates the bad behavior and enables anyone else to duplicate the bug on
+their own machine. The following is such an example:
+
+ When I execute Busybox 'date' it produces unexpected results.
+
+ This is using GNU date:
+ $ date
+ Wed Mar 21 14:19:41 MST 2001
+
+ This is using Busybox date:
+ $ date
+ codswaddle
+
+
+Bug Triage
+~~~~~~~~~~
+
+Validating and confirming bugs is nearly as important as reporting them in the
+first place. It is valuable to know if a bug can be duplicated on a different
+machine, on a different filesystem, on a different architecture, with a
+different C library, and so forth.
+
+To see a listing of all the bugs currently filed against Busybox, look here:
+
+ http://bugs.lineo.com/db/pa/lbusybox.html
+
+If you have comments to add to a bug (can / can't duplicate, think a bug
+should be closed / reopened), please send it to [bugnumber]@bugs.lineo.com.
+The message you send will automatically be forwarded to the mailing list for
+all to see.
+
+
+Write Documentation
+~~~~~~~~~~~~~~~~~~~
+
+Chances are, documentation in Busybox is either missing or needs improvement.
+Either way, help is welcome.
+
+Work is being done to automatically generate documentation from sources,
+especially from the usage.h file. If you want to correct the documentation,
+please make changes to the pre-generation parts, rather than the generated
+documentation. [More to come on this later...]
+
+It is preferred that modifications to documentation be submitted in patch
+format (more on this below), but we're a little more lenient when it comes to
+docs. You could, for example, just say "after the listing of the mount
+options, the following example would be helpful..."
+
+
+Consult Existing Sources
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+For a quick listing of "needs work" spots in the sources, cd into the Busybox
+directory and run the following:
+
+ for i in TODO FIXME XXX; do grep $i *.[ch]; done
+
+This will show all of the trouble spots or 'questionable' code. Pick a spot,
+any spot, these are all invitations for you to contribute.
+
+
+Consult The Bug-Tracking System
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Head to: http://bugs.lineo.com/db/pa/lBusybox.html and look at the bugs on
+there. Pick one you think you can fix, and fix it. If it's a wishlist item and
+someone's requesting a new feature, take a stab at adding it. Everything
+previously said about "reading the mailing list" and "coordinating with the
+applet maintainer" still applies.
+
+
+Add a New Applet
+~~~~~~~~~~~~~~~~
+
+If you want to add a new applet to Busybox, we'd love to see it. However,
+before you write any code, please ask beforehand on the mailing list something
+like "Do you think applet 'foo' would be useful in Busybox?" or "Would you
+guys accept applet 'foo' into Busybox if I were to write it?" If the answer is
+"no" by the folks on the mailing list, then you've saved yourself some time.
+Conversely, you could get some positive responses from folks who might be
+interested in helping you implement it, or can recommend the best approach.
+Perhaps most importantly, this is your way of calling "dibs" on something and
+avoiding duplication of effort.
+
+Also, before you write a line of code, please read the 'new-applet-HOWTO.txt'
+file in the docs/ directory.
+
+
+Janitorial Work
+~~~~~~~~~~~~~~~
+
+These are dirty jobs, but somebody's gotta do 'em.
+
+ - Converting applets to use getopt() for option processing. Type 'grep -L
+ getopt *.c' to get a listing of the applets that currently don't use
+ getopt. If a .c file processes no options, it should have a line that
+ reads: /* no options, no getopt */ somewhere in the file.
+
+ - Replace any "naked" calls to malloc, calloc, realloc, str[n]dup, fopen with
+ the x* equivalents found in utility.c.
+
+ - Security audits:
+ http://www.securityfocus.com/frames/?content=/forums/secprog/secure-programming.html
+
+ - Synthetic code removal: http://www.perl.com/pub/2000/06/commify.html - This
+ is very Perl-specific, but the advice given in here applies equally well to
+ C.
+
+ - C library funciton use audits: Verifying that functions are being used
+ properly (called with the right args), replacing unsafe library functions
+ with safer versions, making sure return codes are being checked, etc.
+
+ - Where appropriate, replace preprocessor defined macros and values with
+ compile-time equivalents.
+
+ - Style guide compliance. See: docs/style-guide.txt
+
+ - Add testcases to tests/testcases.
+
+ - Makefile improvements:
+ http://www.canb.auug.org.au/~millerp/rmch/recu-make-cons-harm.html
+ (I think the recursive problems are pretty much taken care of at this point, non?)
+
+ - "Ten Commandments" compliance: (this is a "maybe", certainly not as
+ important as any of the previous items.)
+ http://web.onetelnet.ch/~twolf/tw/c/ten_commandments.html
+
+Other useful links:
+
+ - the comp.lang.c FAQ: http://web.onetelnet.ch/~twolf/tw/c/index.html#Sources
+
+
+
+Submitting Patches To Busybox
+-----------------------------
+
+Here are some guidelines on how to submit a patch to Busybox.
+
+
+Making A Patch
+~~~~~~~~~~~~~~
+
+If you've got anonymous CVS access set up, making a patch is simple. Just make
+sure you're in the busybox/ directory and type 'cvs diff -bwu > mychanges.patch'.
+You can send the resulting .patch file to the mailing list with a description
+of what it does. (But not before you test it! See the next section for some
+guidelines.) It is preferred that patches be sent as attachments, but it is
+not required.
+
+Also, feel free to help test other people's patches and reply to them with
+comments. You can apply a patch by saving it into your busybox/ directory and
+typing 'patch < mychanges.patch'. Then you can recompile, see if it runs, test
+if it works as advertised, and post your findings to the mailing list.
+
+NOTE: Please do not include extraneous or irrelevant changes in your patches.
+Please do not try to "bundle" two patches together into one. Make single,
+discreet changes on a per-patch basis. Sometimes you need to make a patch that
+touches code in many places, but these kind of patches are rare and should be
+coordinated with a maintainer.
+
+
+Testing Guidelines
+~~~~~~~~~~~~~~~~~~
+
+It's considered good form to test your new feature before you submit a patch
+to the mailing list, and especially before you commit a change to CVS. Here
+are some guidelines on how to test your changes.
+
+ - Always test Busybox applets against GNU counterparts and make sure the
+ behavior / output is identical between the two.
+
+ - Try several different permutations and combinations of the features you're
+ adding (i.e., different combinations of command-line switches) and make sure
+ they all work; make sure one feature does not interfere with another.
+
+ - Make sure you test compiling against the source both with the feature
+ turned on and turned off in Config.h and make sure Busybox compiles cleanly
+ both ways.
+
+ - Run the multibuild.pl script in the tests directory and make sure
+ everything checks out OK. (Do this from within the busybox/ directory by
+ typing: 'tests/multibuild.pl'.)
+
+
+Making Sure Your Patch Doesn't Get Lost
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you don't want your patch to be lost or forgotten, send it to the bug
+tracking system (http://bugs.lineo.com). You do this by emailing your patch in
+a message to submit@bugs.lineo.com with a subject line something like this:
+
+ [PATCH] - Adds "transmogrify" feature to "foo"
+
+In the body, you should have a pseudo-header that looks like the following:
+
+ Package: busybox
+ Version: v0.50pre (or whatever the current version is)
+ Severity: wishlist
+
+The remainder of the body should read along these lines:
+
+ This patch adds the "transmogrify" feature to the "foo" applet. I have
+ tested this on [arch] system(s) and it works. I have tested it against the
+ GNU counterparts and the outputs are identical. I have run the scripts in
+ the 'tests' directory and nothing breaks.
+
+Detailed instructions on how to submit a bug to the tracking system are at:
+
+ http://bugs.lineo.com/Reporting.html
+
+If you have a patch that will fix and close a reported bug, please send a
+message to [bugnumber]@bugs.lineo.com with your patch attached. It will catch
+people's attention if you have a subject line like the following:
+
+ [PATCH INCLUDED] - Fix attached, please apply and close this bug
+
+
+
+Improving Your Chances of Patch Acceptance
+------------------------------------------
+
+Even after you send a brilliant patch to the mailing list, sometimes it can go
+unnoticed, un-replied-to, and sometimes (sigh) even lost. This is an
+unfortunate fact of life, but there are steps you can take to help your patch
+get noticed and convince a maintainer that it should be added:
+
+
+Be Succinct
+~~~~~~~~~~~
+
+A patch that includes small, isolated, obvious changes is more likely to be
+accepted than a patch that touches code in lots of different places or makes
+sweeping, dubious changes.
+
+
+Back It Up
+~~~~~~~~~~
+
+Hard facts on why your patch is better than the existing code will go a long
+way toward convincing maintainers that your patch should be included.
+Specifically, patches are more likely to be accepted if they are provably more
+correct, smaller, faster, simpler, or more maintainable than the existing
+code.
+
+Conversely, any patch that is supported with nothing more than "I think this
+would be cool" or "this patch is good because I say it is and I've got a Phd
+in Computer Science" will likely be ignored.
+
+
+Follow The Style Guide
+~~~~~~~~~~~~~~~~~~~~~~
+
+It's considered good form to abide by the established coding style used in a
+project; Busybox is no exception. We have gone so far as to delineate the
+"elements of Busybox style" in the file docs/style-guide.txt. Please follow
+them.
+
+
+Work With Someone Else
+~~~~~~~~~~~~~~~~~~~~~~
+
+Working on a patch in isolation is less effective than working with someone
+else for a variety of reasons. If another Busybox user is interested in what
+you're doing, then it's two (or more) voices instead of one that can petition
+for inclusion of the patch. You'll also have more people that can test your
+changes, or even offer suggestions on better approaches you could take.
+
+Getting other folks interested follows as a natural course if you've received
+responses from queries to applet maintainer or positive responses from folks
+on the mailing list.
+
+We've made strident efforts to put a useful "collaboration" infrastructure in
+place in the form of mailing lists, the bug tracking system, and CVS. Please
+use these resources.
+
+
+Send Patches to the Bug Tracking System
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This was mentioned above in the "Making Sure Your Patch Doesn't Get Lost"
+section, but it is worth mentioning again. A patch sent to the mailing list
+might be unnoticed and forgotten. A patch sent to the bug tracking system will
+be stored and closely connected to the bug it fixes.
+
+
+Be Polite
+~~~~~~~~~
+
+The old saying "You'll catch more flies with honey than you will with vinegar"
+applies when submitting patches to the mailing list for approval. The way you
+present your patch is sometimes just as important as the actual patch itself
+(if not more so). Being rude to the maintainers is not an effective way to
+convince them that your patch should be included; it will likely have the
+opposite effect.
+
+
+
+Committing Changes to CVS
+-------------------------
+
+If you submit several patches that demonstrate that you are a skilled and wise
+coder, you may be invited to become a committer, thus enabling you to commit
+changes directly to CVS. This is nice because you don't have to wait for
+someone else to commit your change for you, you can just do it yourself.
+
+But note that this is a priviledge that comes with some responsibilities. You
+should test your changes before you commit them. You should also talk to an
+applet maintainer before you make any kind of sweeping changes to somebody
+else's code. Big changes should still go to the mailing list first. Remember,
+being wise, polite, and discreet is more important than being clever.
+
+
+When To Commit
+~~~~~~~~~~~~~~
+
+Generally, you should feel free to commit a change if:
+
+ - Your changes are small and don't touch many files
+ - You are fixing a bug
+ - Somebody has told you that it's okay
+ - It's obviously the Right Thing
+
+The more of the above are true, the better it is to just commit a change
+directly to CVS.
+
+
+When Not To Commit
+~~~~~~~~~~~~~~~~~~
+
+Even if you have commit rights, you should probably still post a patch to the
+mailing list if:
+
+ - Your changes are broad and touch many different files
+ - You are adding a feature
+ - Your changes are speculative or experimental (i.e., trying a new algorithm)
+ - You are not the maintainer and your changes make the maintainer cringe
+
+The more of the above are true, the better it is to post a patch to the
+mailing list instead of committing.
+
+
+
+Final Words
+-----------
+
+If all of this seems complicated, don't panic, it's really not that tough. If
+you're having difficulty following some of the steps outlined in this
+document don't worry, the folks on the Busybox mailing list are a fairly
+good-natured bunch and will work with you to help get your patches into shape
+or help you make contributions.
+
+
diff --git a/release/src/router/busybox/docs/new-applet-HOWTO.txt b/release/src/router/busybox/docs/new-applet-HOWTO.txt
new file mode 100644
index 00000000..1f5c3ebd
--- /dev/null
+++ b/release/src/router/busybox/docs/new-applet-HOWTO.txt
@@ -0,0 +1,138 @@
+How to Add a New Applet to BusyBox
+==================================
+
+This document details the steps you must take to add a new applet to BusyBox.
+
+Credits:
+Matt Kraai - initial writeup
+Mark Whitley - the remix
+
+
+Initial Write
+-------------
+
+First, write your applet. Be sure to include copyright information at the
+top, such as who you stole the code from and so forth. Also include the
+mini-GPL boilerplate. Be sure to name the main function <applet>_main instead
+of main. And be sure to put it in <applet>.c. For a new applet mu, here is
+the code that would go in mu.c:
+
+----begin example code------
+
+/* vi: set sw=4 ts=4: */
+/*
+ * Mini mu implementation for busybox
+ *
+ *
+ * Copyright (C) [YEAR] by [YOUR NAME] <YOUR EMAIL>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307 USA
+ *
+ */
+
+#include "busybox.h"
+
+int mu_main(int argc, char **argv)
+{
+ int fd;
+ char mu;
+
+ if ((fd = open("/dev/random", O_RDONLY)) < 0)
+ perror_msg_and_die("/dev/random");
+
+ if ((n = safe_read(fd, &mu, 1)) < 1)
+ perror_msg_and_die("/dev/random");
+
+ return mu;
+}
+
+----end example code------
+
+
+Coding Style
+------------
+
+Before you submit your applet for inclusion in BusyBox, (or better yet, before
+you _write_ your applet) please read through the style guide in the docs
+directory and make your program compliant.
+
+
+Some Words on libbb
+-------------------
+
+As you are writing your applet, please be aware of the body of pre-existing
+useful functions in libbb. Use these instead of reinventing the wheel.
+
+Additionally, if you have any useful, general-purpose functions in your
+program that could be useful in another program, consider putting them in
+libbb.
+
+
+Usage String(s)
+---------------
+
+Next, add usage information for you applet to usage.h. This should look like
+the following:
+
+ #define mu_trivial_usage \
+ "-[abcde] FILES"
+ #define mu_full_usage \
+ "Returns an indeterminate value.\n\n" \
+ "Options:\n" \
+ "\t-a\t\tfirst function\n" \
+ "\t-b\t\tsecond function\n" \
+
+If your program supports flags, the flags should be mentioned on the first
+line (-[abcde]) and a detailed description of each flag should go in the
+mu_full_usage section, one flag per line. (Numerous examples of this
+currently exist in usage.h.)
+
+
+Header Files
+------------
+
+Next, add an entry to applets.h. Be *sure* to keep the list in alphabetical
+order, or else it will break the binary-search lookup algorithm in busybox.c
+and the Gods of BusyBox smite you. Yea, verily:
+
+ /* all programs above here are alphabetically "less than" 'mu' */
+ #ifdef BB_MU
+ APPLET("mu", mu_main, _BB_DIR_USR_BIN, mu_usage)
+ #endif
+ /* all programs below here are alphabetically "greater than" 'mu' */
+
+
+Finally, add a define for your applet to Config.h:
+
+ #define BB_MU
+
+
+Documentation
+-------------
+
+If you're feeling especially nice, you should also document your applet in the
+docs directory (but nobody ever does that).
+
+
+The Grand Announcement
+----------------------
+
+Then create a diff -urN of the files you added (<applet>.c, usage.c,
+applets.h, Config.h) and send it to the mailing list:
+busybox@opensource.lineo.com. Sending patches as attachments is preferred, but
+not required.
+
+
diff --git a/release/src/router/busybox/docs/style-guide.txt b/release/src/router/busybox/docs/style-guide.txt
new file mode 100644
index 00000000..c71f1e60
--- /dev/null
+++ b/release/src/router/busybox/docs/style-guide.txt
@@ -0,0 +1,680 @@
+Busybox Style Guide
+===================
+
+This document describes the coding style conventions used in Busybox. If you
+add a new file to Busybox or are editing an existing file, please format your
+code according to this style. If you are the maintainer of a file that does
+not follow these guidelines, please -- at your own convenience -- modify the
+file(s) you maintain to bring them into conformance with this style guide.
+Please note that this is a low priority task.
+
+To help you format the whitespace of your programs, an ".indent.pro" file is
+included in the main Busybox source directory that contains option flags to
+format code as per this style guide. This way you can run GNU indent on your
+files by typing 'indent myfile.c myfile.h' and it will magically apply all the
+right formatting rules to your file. Please _do_not_ run this on all the files
+in the directory, just your own.
+
+
+
+Declaration Order
+-----------------
+
+Here is the order in which code should be laid out in a file:
+
+ - commented program name and one-line description
+ - commented author name and email address(es)
+ - commented GPL boilerplate
+ - commented longer description / notes for the program (if needed)
+ - #includes of .h files with angle brackets (<>) around them
+ - #includes of .h files with quotes ("") around them
+ - #defines (if any, note the section below titled "Avoid the Preprocessor")
+ - const and global variables
+ - function declarations (if necessary)
+ - function implementations
+
+
+
+Whitespace and Formatting
+-------------------------
+
+This is everybody's favorite flame topic so let's get it out of the way right
+up front.
+
+
+Tabs vs. Spaces in Line Indentation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The preference in Busybox is to indent lines with tabs. Do not indent lines
+with spaces and do not indents lines using a mixture of tabs and spaces. (The
+indentation style in the Apache and Postfix source does this sort of thing:
+\s\s\s\sif (expr) {\n\tstmt; --ick.) The only exception to this rule is
+multi-line comments that use an asterisk at the beginning of each line, i.e.:
+
+ /t/*
+ /t * This is a block comment.
+ /t * Note that it has multiple lines
+ /t * and that the beginning of each line has a tab plus a space
+ /t * except for the opening '/*' line where the slash
+ /t * is used instead of a space.
+ /t */
+
+Furthermore, The preference is that tabs be set to display at four spaces
+wide, but the beauty of using only tabs (and not spaces) at the beginning of
+lines is that you can set your editor to display tabs at *whatever* number of
+spaces is desired and the code will still look fine.
+
+
+Operator Spacing
+~~~~~~~~~~~~~~~~
+
+Put spaces between terms and operators. Example:
+
+ Don't do this:
+
+ for(i=0;i<num_items;i++){
+
+ Do this instead:
+
+ for (i = 0; i < num_items; i++) {
+
+ While it extends the line a bit longer, the spaced version is more
+ readable. An allowable exception to this rule is the situation where
+ excluding the spacing makes it more obvious that we are dealing with a
+ single term (even if it is a compound term) such as:
+
+ if (str[idx] == '/' && str[idx-1] != '\\')
+
+ or
+
+ if ((argc-1) - (optind+1) > 0)
+
+
+Bracket Spacing
+~~~~~~~~~~~~~~~
+
+If an opening bracket starts a function, it should be on the
+next line with no spacing before it. However, if a bracket follows an opening
+control block, it should be on the same line with a single space (not a tab)
+between it and the opening control block statement. Examples:
+
+ Don't do this:
+
+ while (!done)
+ {
+
+ do
+ {
+
+ Don't do this either:
+
+ while (!done){
+
+ do{
+
+ And for heaven's sake, don't do this:
+
+ while (!done)
+ {
+
+ do
+ {
+
+ Do this instead:
+
+ while (!done) {
+
+ do {
+
+
+Spacing around Parentheses
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Put a space between C keywords and left parens, but not between function names
+and the left paren that starts it's parameter list (whether it is being
+declared or called). Examples:
+
+ Don't do this:
+
+ while(foo) {
+ for(i = 0; i < n; i++) {
+
+ Do this instead:
+
+ while (foo) {
+ for (i = 0; i < n; i++) {
+
+ But do functions like this:
+
+ static int my_func(int foo, char bar)
+ ...
+ baz = my_func(1, 2);
+
+Also, don't put a space between the left paren and the first term, nor between
+the last arg and the right paren.
+
+ Don't do this:
+
+ if ( x < 1 )
+ strcmp( thisstr, thatstr )
+
+ Do this instead:
+
+ if (x < 1)
+ strcmp(thisstr, thatstr)
+
+
+Cuddled Elses
+~~~~~~~~~~~~~
+
+Also, please "cuddle" your else statements by putting the else keyword on the
+same line after the right bracket that closes an 'if' statement.
+
+ Don't do this:
+
+ if (foo) {
+ stmt;
+ }
+ else {
+ stmt;
+ }
+
+ Do this instead:
+
+ if (foo) {
+ stmt;
+ } else {
+ stmt;
+ }
+
+The exception to this rule is if you want to include a comment before the else
+block. Example:
+
+ if (foo) {
+ stmts...
+ }
+ /* otherwise, we're just kidding ourselves, so re-frob the input */
+ else {
+ other_stmts...
+ }
+
+
+
+Variable and Function Names
+---------------------------
+
+Use the K&R style with names in all lower-case and underscores occasionally
+used to separate words (e.g., "variable_name" and "numchars" are both
+acceptable). Using underscores makes variable and function names more readable
+because it looks like whitespace; using lower-case is easy on the eyes.
+
+ Frowned upon:
+
+ hitList
+ TotalChars
+ szFileName
+ pf_Nfol_TriState
+
+ Preferred:
+
+ hit_list
+ total_chars
+ file_name
+ sensible_name
+
+Exceptions:
+
+ - Enums, macros, and constant variables are occasionally written in all
+ upper-case with words optionally seperatedy by underscores (i.e. FIFOTYPE,
+ ISBLKDEV()).
+
+ - Nobody is going to get mad at you for using 'pvar' as the name of a
+ variable that is a pointer to 'var'.
+
+
+Converting to K&R
+~~~~~~~~~~~~~~~~~
+
+The Busybox codebase is very much a mixture of code gathered from a variety of
+sources. This explains why the current codebase contains such a hodge-podge of
+different naming styles (Java, Pascal, K&R, just-plain-weird, etc.). The K&R
+guideline explained above should therefore be used on new files that are added
+to the repository. Furthermore, the maintainer of an existing file that uses
+alternate naming conventions should, at his own convenience, convert those
+names over to K&R style. Converting variable names is a very low priority
+task.
+
+If you want to do a search-and-replace of a single variable name in different
+files, you can do the following in the busybox directory:
+
+ $ perl -pi -e 's/\bOldVar\b/new_var/g' *.[ch]
+
+If you want to convert all the non-K&R vars in your file all at once, follow
+these steps:
+
+ - In the busybox directory type 'scripts/mk2knr.pl files-to-convert'. This
+ does not do the actual conversion, rather, it generates a script called
+ 'convertme.pl' that shows what will be converted, giving you a chance to
+ review the changes beforehand.
+
+ - Review the 'convertme.pl' script that gets generated in the busybox
+ directory and remove / edit any of the substitutions in there. Please
+ especially check for false positives (strings that should not be
+ converted).
+
+ - Type './convertme.pl same-files-as-before' to perform the actual
+ conversion.
+
+ - Compile and see if everything still works.
+
+Please be aware of changes that have cascading effects into other files. For
+example, if you're changing the name of something in, say utility.c, you
+should probably run 'scripts/mk2knr.pl utility.c' at first, but when you run
+the 'convertme.pl' script you should run it on _all_ files like so:
+'./convertme.pl *.[ch]'.
+
+
+
+Avoid The Preprocessor
+----------------------
+
+At best, the preprocessor is a necessary evil, helping us account for platform
+and architecture differences. Using the preprocessor unnecessarily is just
+plain evil.
+
+
+The Folly of #define
+~~~~~~~~~~~~~~~~~~~~
+
+Use 'const <type> var' for declaring constants.
+
+ Don't do this:
+
+ #define var 80
+
+ Do this instead, when the variable is in a header file and will be used in
+ several source files:
+
+ const int var = 80;
+
+ Or do this when the variable is used only in a single source file:
+
+ static const int var = 80;
+
+Declaring variables as '[static] const' gives variables an actual type and
+makes the compiler do type checking for you; the preprocessor does _no_ type
+checking whatsoever, making it much more error prone. Declaring variables with
+'[static] const' also makes debugging programs much easier since the value of
+the variable can be easily queried and displayed.
+
+
+The Folly of Macros
+~~~~~~~~~~~~~~~~~~~
+
+Use 'static inline' instead of a macro.
+
+ Don't do this:
+
+ #define mini_func(param1, param2) (param1 << param2)
+
+ Do this instead:
+
+ static inline int mini_func(int param1, param2)
+ {
+ return (param1 << param2);
+ }
+
+Static inline functions are greatly preferred over macros. They provide type
+safety, have no length limitations, no formatting limitations, have an actual
+return value, and under gcc they are as cheap as macros. Besides, really long
+macros with backslashes at the end of each line are ugly as sin.
+
+
+The Folly of #ifdef
+~~~~~~~~~~~~~~~~~~~
+
+Code cluttered with ifdefs is difficult to read and maintain. Don't do it.
+Instead, put your ifdefs at the top of your .c file (or in a header), and
+conditionally define 'static inline' functions, (or *maybe* macros), which are
+used in the code.
+
+ Don't do this:
+
+ ret = my_func(bar, baz);
+ if (!ret)
+ return -1;
+ #ifdef BB_FEATURE_FUNKY
+ maybe_do_funky_stuff(bar, baz);
+ #endif
+
+ Do this instead:
+
+ (in .h header file)
+
+ #ifdef BB_FEATURE_FUNKY
+ static inline void maybe_do_funky_stuff (int bar, int baz)
+ {
+ /* lotsa code in here */
+ }
+ #else
+ static inline void maybe_do_funky_stuff (int bar, int baz) {}
+ #endif
+
+ (in the .c source file)
+
+ ret = my_func(bar, baz);
+ if (!ret)
+ return -1;
+ maybe_do_funky_stuff(bar, baz);
+
+The great thing about this approach is that the compiler will optimize away
+the "no-op" case (the empty function) when the feature is turned off.
+
+Note also the use of the word 'maybe' in the function name to indicate
+conditional execution.
+
+
+
+Notes on Strings
+----------------
+
+Strings in C can get a little thorny. Here's some guidelines for dealing with
+strings in Busybox. (There is surely more that could be added to this
+section.)
+
+
+String Files
+~~~~~~~~~~~~
+
+Put all help/usage messages in usage.c. Put other strings in messages.c.
+Putting these strings into their own file is a calculated decision designed to
+confine spelling errors to a single place and aid internationalization
+efforts, if needed. (Side Note: we might want to use a single file - maybe
+called 'strings.c' - instead of two, food for thought).
+
+
+Testing String Equivalence
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+There's a right way and a wrong way to test for sting equivalence with
+strcmp():
+
+ The wrong way:
+
+ if (!strcmp(string, "foo")) {
+ ...
+
+ The right way:
+
+ if (strcmp(string, "foo") == 0){
+ ...
+
+The use of the "equals" (==) operator in the latter example makes it much more
+obvious that you are testing for equivalence. The former example with the
+"not" (!) operator makes it look like you are testing for an error. In a more
+perfect world, we would have a streq() function in the string library, but
+that ain't the world we're living in.
+
+
+Avoid Dangerous String Functions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Unfortunately, the way C handles strings makes them prone to overruns when
+certain library functions are (mis)used. The following table offers a summary
+of some of the more notorious troublemakers:
+
+function overflows preferred
+----------------------------------------
+strcpy dest string strncpy
+strcat dest string strncat
+gets string it gets fgets
+getwd buf string getcwd
+[v]sprintf str buffer [v]snprintf
+realpath path buffer use with pathconf
+[vf]scanf its arguments just avoid it
+
+
+The above is by no means a complete list. Be careful out there.
+
+
+
+Avoid Big Static Buffers
+------------------------
+
+First, some background to put this discussion in context: Static buffers look
+like this in code:
+
+ /* in a .c file outside any functions */
+ static char *buffer[BUFSIZ]; /* happily used by any function in this file,
+ but ick! big! */
+
+The problem with these is that any time any busybox app is run, you pay a
+memory penalty for this buffer, even if the applet that uses said buffer is
+not run. This can be fixed, thusly:
+
+ static char *buffer;
+ ...
+ other_func()
+ {
+ strcpy(buffer, lotsa_chars); /* happily uses global *buffer */
+ ...
+ foo_main()
+ {
+ buffer = xmalloc(sizeof(char)*BUFSIZ);
+ ...
+
+However, this approach trades bss segment for text segment. Rather than
+mallocing the buffers (and thus growing the text size), buffers can be
+declared on the stack in the *_main() function and made available globally by
+assigning them to a global pointer thusly:
+
+ static char *pbuffer;
+ ...
+ other_func()
+ {
+ strcpy(pbuffer, lotsa_chars); /* happily uses global *pbuffer */
+ ...
+ foo_main()
+ {
+ char *buffer[BUFSIZ]; /* declared locally, on stack */
+ pbuffer = buffer; /* but available globally */
+ ...
+
+This last approach has some advantages (low code size, space not used until
+it's needed), but can be a problem in some low resource machines that have
+very limited stack space (e.g., uCLinux).
+
+A macro is declared in busybox.h that implements compile-time selection
+between xmalloc() and stack creation, so you can code the line in question as
+
+ RESERVE_BB_BUFFER(buffer, BUFSIZ);
+
+and the right thing will happen, based on your configuration.
+
+
+
+Miscellaneous Coding Guidelines
+-------------------------------
+
+The following are important items that don't fit into any of the above
+sections.
+
+
+Model Busybox Applets After GNU Counterparts
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When in doubt about the proper behavior of a Busybox program (output,
+formatting, options, etc.), model it after the equivalent GNU program.
+Doesn't matter how that program behaves on some other flavor of *NIX; doesn't
+matter what the POSIX standard says or doesn't say, just model Busybox
+programs after their GNU counterparts and it will make life easier on (nearly)
+everyone.
+
+The only time we deviate from emulating the GNU behavior is when:
+
+ - We are deliberately not supporting a feature (such as a command line
+ switch)
+ - Emulating the GNU behavior is prohibitively expensive (lots more code
+ would be required, lots more memory would be used, etc.)
+ - The difference is minor or cosmetic
+
+A note on the 'cosmetic' case: Output differences might be considered
+cosmetic, but if the output is significant enough to break other scripts that
+use the output, it should really be fixed.
+
+
+Scope
+~~~~~
+
+If a const variable is used only in a single source file, put it in the source
+file and not in a header file. Likewise, if a const variable is used in only
+one function, do not make it global to the file. Instead, declare it inside
+the function body. Bottom line: Make a conscious effort to limit declarations
+to the smallest scope possible.
+
+Inside applet files, all functions should be declared static so as to keep the
+global name space clean. The only exception to this rule is the "applet_main"
+function which must be declared extern.
+
+If you write a function that performs a task that could be useful outside the
+immediate file, turn it into a general-purpose function with no ties to any
+applet and put it in the utility.c file instead.
+
+
+Brackets Are Your Friends
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Please use brackets on all if and else statements, even if it is only one
+line. Example:
+
+ Don't do this:
+
+ if (foo)
+ stmt1;
+ stmt2
+ stmt3;
+
+ Do this instead:
+
+ if (foo) {
+ stmt1;
+ }
+ stmt2
+ stmt3;
+
+The "bracketless" approach is error prone because someday you might add a line
+like this:
+
+ if (foo)
+ stmt1;
+ new_line();
+ stmt2
+ stmt3;
+
+And the resulting behavior of your program would totally bewilder you. (Don't
+laugh, it happens to us all.) Remember folks, this is C, not Python.
+
+
+Function Declarations
+~~~~~~~~~~~~~~~~~~~~~
+
+Do not use old-style function declarations that declare variable types between
+the parameter list and opening bracket. Example:
+
+ Don't do this:
+
+ int foo(parm1, parm2)
+ char parm1;
+ float parm2;
+ {
+ ....
+
+ Do this instead:
+
+ int foo(char parm1, float parm2)
+ {
+ ....
+
+The only time you would ever need to use the old declaration syntax is to
+support ancient, antediluvian compilers. To our good fortune, we have access
+to more modern compilers and the old declaration syntax is neither necessary
+nor desired.
+
+
+Emphasizing Logical Blocks
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Organization and readability are improved by putting extra newlines around
+blocks of code that perform a single task. These are typically blocks that
+begin with a C keyword, but not always.
+
+Furthermore, you should put a single comment (not necessarily one line, just
+one comment) before the block, rather than commenting each and every line.
+There is an optimal ammount of commenting that a program can have; you can
+comment too much as well as too little.
+
+A picture is really worth a thousand words here, the following example
+illustrates how to emphasize logical blocks:
+
+ while (line = get_line_from_file(fp)) {
+
+ /* eat the newline, if any */
+ chomp(line);
+
+ /* ignore blank lines */
+ if (strlen(file_to_act_on) == 0) {
+ continue;
+ }
+
+ /* if the search string is in this line, print it,
+ * unless we were told to be quiet */
+ if (strstr(line, search) && !be_quiet) {
+ puts(line);
+ }
+
+ /* clean up */
+ free(line);
+ }
+
+
+Processing Options with getopt
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If your applet needs to process command-line switches, please use getopt() to
+do so. Numerous examples can be seen in many of the existing applets, but
+basically it boils down to two things: at the top of the .c file, have this
+line in the midst of your #includes:
+
+ #include <getopt.h>
+
+And a code block similar to the following near the top of your applet_main()
+routine:
+
+ while ((opt = getopt(argc, argv, "abc")) > 0) {
+ switch (opt) {
+ case 'a':
+ do_a_opt = 1;
+ break;
+ case 'b':
+ do_b_opt = 1;
+ break;
+ case 'c':
+ do_c_opt = 1;
+ break;
+ default:
+ show_usage(); /* in utility.c */
+ }
+ }
+
+If your applet takes no options (such as 'init'), there should be a line
+somewhere in the file reads:
+
+ /* no options, no getopt */
+
+That way, when people go grepping to see which applets need to be converted to
+use getopt, they won't get false positives.
+
+Additional Note: Do not use the getopt_long library function and do not try to
+hand-roll your own long option parsing. Busybox applets should only support
+short options. Explanations and examples of the short options should be
+documented in usage.h.