diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2015-01-03 12:04:58 +0100 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2015-01-03 12:04:58 +0100 |
commit | 008d0be72b2f160382c6e880765e96b64a050c65 (patch) | |
tree | 36f48a98a3815a408e2ce1693dd182af90f80305 /release/src/router/busybox/docs | |
parent | 611becfb8726c60cb060368541ad98191d4532f5 (diff) | |
download | tomato-008d0be72b2f160382c6e880765e96b64a050c65.tar.gz tomato-008d0be72b2f160382c6e880765e96b64a050c65.tar.bz2 |
imported original firmware WRT54GL_v4.30.11_11_US
Diffstat (limited to 'release/src/router/busybox/docs')
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 Binary files differnew file mode 100644 index 00000000..98289d7d --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/anim.written.in.vi.gif 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 Binary files differnew file mode 100644 index 00000000..37edc961 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/busybox.jpeg 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 Binary files differnew file mode 100644 index 00000000..abf8f061 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/busybox2.jpg 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 Binary files differnew file mode 100644 index 00000000..4984fa16 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/fm.mini.jpg 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 Binary files differnew file mode 100644 index 00000000..c0883cd3 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/fm.mini.png 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 Binary files differnew file mode 100644 index 00000000..3022f857 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/gfx_by_gimp.gif 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 Binary files differnew file mode 100644 index 00000000..d5831403 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/gfx_by_gimp.png 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 Binary files differnew file mode 100644 index 00000000..b2f6140a --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/ltbutton2.jpg 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 Binary files differnew file mode 100644 index 00000000..556f72a6 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/ltbutton2.png 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 Binary files differnew file mode 100644 index 00000000..ea40102e --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/sdsmall.gif 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 Binary files differnew file mode 100644 index 00000000..b1024501 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/sdsmall.png 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 Binary files differnew file mode 100644 index 00000000..84f59bc1 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.lineo.com/images/written.in.vi.png 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 u s y B o 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 u s y B o 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 <syslog.h> + + 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 u s y B o 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 u s y B o 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 Binary files differnew file mode 100755 index 00000000..79923869 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/back.png diff --git a/release/src/router/busybox/docs/busybox.net/images/busybox.jpeg b/release/src/router/busybox/docs/busybox.net/images/busybox.jpeg Binary files differnew file mode 100755 index 00000000..37edc961 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/busybox.jpeg diff --git a/release/src/router/busybox/docs/busybox.net/images/busybox.png b/release/src/router/busybox/docs/busybox.net/images/busybox.png Binary files differnew file mode 100755 index 00000000..5c4e82a8 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/busybox.png diff --git a/release/src/router/busybox/docs/busybox.net/images/busybox1.png b/release/src/router/busybox/docs/busybox.net/images/busybox1.png Binary files differnew file mode 100755 index 00000000..4d3126a5 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/busybox1.png diff --git a/release/src/router/busybox/docs/busybox.net/images/busybox2.jpg b/release/src/router/busybox/docs/busybox.net/images/busybox2.jpg Binary files differnew file mode 100755 index 00000000..abf8f061 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/busybox2.jpg diff --git a/release/src/router/busybox/docs/busybox.net/images/busybox3.jpg b/release/src/router/busybox/docs/busybox.net/images/busybox3.jpg Binary files differnew file mode 100755 index 00000000..0fab84cf --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/busybox3.jpg diff --git a/release/src/router/busybox/docs/busybox.net/images/dir.png b/release/src/router/busybox/docs/busybox.net/images/dir.png Binary files differnew file mode 100755 index 00000000..1d633ce4 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/dir.png diff --git a/release/src/router/busybox/docs/busybox.net/images/donate.png b/release/src/router/busybox/docs/busybox.net/images/donate.png Binary files differnew file mode 100755 index 00000000..b55621bb --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/donate.png 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 Binary files differnew file mode 100755 index 00000000..c0883cd3 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/fm.mini.png 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 Binary files differnew file mode 100755 index 00000000..d5831403 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/gfx_by_gimp.png diff --git a/release/src/router/busybox/docs/busybox.net/images/ltbutton2.png b/release/src/router/busybox/docs/busybox.net/images/ltbutton2.png Binary files differnew file mode 100755 index 00000000..556f72a6 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/ltbutton2.png diff --git a/release/src/router/busybox/docs/busybox.net/images/sdsmall.png b/release/src/router/busybox/docs/busybox.net/images/sdsmall.png Binary files differnew file mode 100755 index 00000000..b1024501 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/sdsmall.png diff --git a/release/src/router/busybox/docs/busybox.net/images/text.png b/release/src/router/busybox/docs/busybox.net/images/text.png Binary files differnew file mode 100755 index 00000000..6034f899 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/text.png 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 Binary files differnew file mode 100755 index 00000000..84f59bc1 --- /dev/null +++ b/release/src/router/busybox/docs/busybox.net/images/written.in.vi.png 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> <input type="text" name="q" size="31" maxlength="255" value=""> <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 u s y B o 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 <insert argument + where she wins and I don't> 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 <syslog.h> + + 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 <function> [arguments...] # or + </screen> + </para> + + <para> + <screen> + <function> [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[<.|:>[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 -> /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 < 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 < 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 + </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> + <id>:<runlevels>:<action>:<process> + </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 -> 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 < /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 < /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 < /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 > 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`(``& + ..... + $ uudecode busybox busybox > 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 <andersee@debian.org> <andersen@lineo.com> + </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 <andersee@debian.org> + </para> + + <para> + Edward Betts <edward@debian.org> + </para> + + <para> + John Beppu <beppu@lineo.com> + </para> + + <para> + Brian Candler <B.Candler@pobox.com> + </para> + + <para> + Randolph Chung <tausq@debian.org> + </para> + + <para> + Dave Cinege <dcinege@psychosis.com> + </para> + + <para> + Karl M. Hegbloom <karlheg@debian.org> + </para> + + <para> + Daniel Jacobowitz <dan@debian.org> + </para> + + <para> + Matt Kraai <kraai@alumni.carnegiemellon.edu> + </para> + + <para> + John Lombardo <john@deltanet.com> + </para> + + <para> + Glenn McGrath <bug1@netconnect.com.au> + </para> + + <para> + Bruce Perens <bruce@perens.com> + </para> + + <para> + Chip Rosenthal <chip@unicom.com>, <crosenth@covad.com> + </para> + + <para> + Pavel Roskin <proski@gnu.org> + </para> + + <para> + Gyepi Sam <gyepi@praxis-sw.com> + </para> + + <para> + Linus Torvalds <torvalds@transmeta.com> + </para> + + <para> + Mark Whitley <markw@lineo.com> + </para> + + <para> + Charles P. Wright <cpwright@villagenet.com> + </para> + + <para> + Enrique Zanardi <ezanardi@ull.es> + </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. |