=head1 AUTHORS
-The following people have contributed code to BusyBox whether
-they know it or not.
+The following people have contributed code to BusyBox whether they know it or
+not. If you have written code included in BusyBox, you should probably be
+listed here so you can obtain your bit of eternal glory. If you should be
+listed here, or the description of what you have done needs more detail, or is
+incorect, please send in an update.
+=for html <br>
+
+Emanuele Aina <emanuele.aina@tiscali.it>
+ run-parts
+
=for html <br>
Erik Andersen <andersen@codepoet.org>
Tons of new stuff, major rewrite of most of the
core apps, tons of new apps as noted in header files.
+ Lots of tedious effort writing these boring docs that
+ nobody is going to actually read.
=for html <br>
-John Beppu <beppu@codepoet.org>
+Laurence Anderson <l.d.anderson@warwick.ac.uk>
- du, head, nslookup, sort, tee, uniq (so Kraai could rewrite them ;-),
- documentation
+ rpm2cpio, unzip, get_header_cpio, read_gz interface, rpm
+
+=for html <br>
+
+Jeff Angielski <jeff@theptrgroup.com>
+
+ ftpput, ftpget
=for html <br>
Edward Betts <edward@debian.org>
- expr, hostid, logname, tty, wc, whoami, yes
+ expr, hostid, logname, whoami
+
+=for html <br>
+
+John Beppu <beppu@codepoet.org>
+
+ du, nslookup, sort
=for html <br>
Randolph Chung <tausq@debian.org>
- fbset, ping, hostname, and mkfifo
+ fbset, ping, hostname
=for html <br>
Dave Cinege <dcinege@psychosis.com>
- more(v2), makedevs, modularization, various fixes
+ more(v2), makedevs, dutmp, modularization, auto links file,
+ various fixes, Linux Router Project maintenance
+
+=for html <br>
+
+Jordan Crouse <jordan@cosmicpenguin.net>
+
+ ipcalc
+
+=for html <br>
+
+Magnus Damm <damm@opensource.se>
+
+ tftp client insmod powerpc support
=for html <br>
Larry Doolittle <ldoolitt@recycle.lbl.gov>
- various fixes, shell rewrite
+ pristine source directory compilation, lots of patches and fixes.
=for html <br>
-Karl M. Hegbloom <karlheg@debian.org>
+Glenn Engel <glenne@engel.org>
- cp_mv.c, the test suite, various fixes to utility.c, &c.
+ httpd
=for html <br>
-Sterling Huxley <sterling@europa.com>
+Gennady Feldman <gfeldman@gena01.com>
- vi (!!!)
+ Sysklogd (single threaded syslogd, IPC Circular buffer support,
+ logread), various fixes.
+
+=for html <br>
+
+Karl M. Hegbloom <karlheg@debian.org>
+
+ cp_mv.c, the test suite, various fixes to utility.c, &c.
=for html <br>
=for html <br>
-Matt Kraai <kraai@alumni.carnegiemellon.edu>
+Matt Kraai <kraai@alumni.cmu.edu>
- documentation, bugfixes
+ documentation, bugfixes, test suite
+
+=for html <br>
+
+Stephan Linz <linz@li-pro.net>
+
+ ipcalc, Red Hat equivalence
=for html <br>
John Lombardo <john@deltanet.com>
- dirname, tr
+ tr
=for html <br>
-Glenn McGrath <bug1@netconnect.com.au>
+Glenn McGrath <bug1@optushome.com.au>
- ar.c
+ ar, dpkg, dpkg-deb
+
+=for html <br>
+
+Manuel Novoa III <mjn3@codepoet.org>
+
+ cat, head, mkfifo, mknod, rmdir, sleep, tee, tty, uniq, usleep, wc, yes,
+ mesg, vconfig, make_directory, parse_mode, dirname, mode_string,
+ get_last_path_component, simplify_path, and a number trivial libbb routines
+
+ also bug fixes, partial rewrites, and size optimizations in
+ ash, basename, cal, cmp, cp, df, du, echo, env, ln, logname, md5sum, mkdir,
+ mv, realpath, rm, sort, tail, touch, uname, watch, arith, human_readable,
+ interface, dutmp, ifconfig, route
=for html <br>
Vladimir Oleynik <dzo@simtreas.ru>
- cmdedit, xargs(current), httpd(current);
+ cmdedit; xargs(current), httpd(current);
ports: ash, crond, fdisk, inetd, stty, traceroute, top;
locale, various fixes
and irreconcilable critic of everything not perfect.
Bruce Perens <bruce@pixar.com>
- Original author of BusyBox. His code is still in many apps.
+ Original author of BusyBox in 1995, 1996. Some of his code can
+ still be found hiding here and there...
+
+=for html <br>
+
+Tim Riker <Tim@Rikers.org>
+
+ bug fixes, member of fan club
+
+=for html <br>
+
+Kent Robotti <robotti@metconnect.com>
+
+ reset, tons and tons of bug reports and patches.
=for html <br>
Mark Whitley <markw@codepoet.org>
- sed remix, bug fixes, style-guide, etc.
+ grep, sed, cut, xargs(previous),
+ style-guide, new-applet-HOWTO, bug fixes, etc.
=for html <br>
=for html <br>
-Glenn Engel <glenne@engel.org>
+Tito Ragusa <farmatito@tiscali.it>
- httpd
+ devfsd and size optimizations in strings, openvt and deallocvt.
=cut
-# $Id: busybox_footer.pod,v 1.14 2004/03/27 09:40:15 andersen Exp $
+# $Id: busybox_footer.pod,v 1.15 2004/04/06 17:52:02 andersen Exp $
+
"[options] [device] .."
#define hdparm_full_usage \
"Options:" \
- " -a get/set fs readahead\n" \
- " -A set drive read-lookahead flag (0/1)\n" \
- " -b get/set bus state (0 == off, 1 == on, 2 == tristate)\n" \
- " -B set Advanced Power Management setting (1-255)\n" \
- " -c get/set IDE 32-bit IO setting\n" \
- " -C check IDE power mode status\n" \
- USAGE_GETSET_DMA(" -d get/set using_dma flag\n") \
- " -D enable/disable drive defect-mgmt\n" \
- " -f flush buffer cache for device on exit\n" \
- " -g display drive geometry\n" \
- " -h display terse usage information\n" \
- " -i display drive identification\n" \
- USAGE_HDPARM_IDENT(" -I detailed/current information directly from drive\n") \
- USAGE_HDPARM_IDENT(" -Istdin similar to -I, but wants /proc/ide/" "*" "/hd?/identify as input\n") \
- " -k get/set keep_settings_over_reset flag (0/1)\n" \
- " -K set drive keep_features_over_reset flag (0/1)\n" \
- " -L set drive doorlock (0/1) (removable harddisks only)\n" \
- " -m get/set multiple sector count\n" \
- " -n get/set ignore-write-errors flag (0/1)\n" \
- " -p set PIO mode on IDE interface chipset (0,1,2,3,4,...)\n" \
- " -P set drive prefetch count\n" \
- " -q change next setting quietly\n" \
- " -Q get/set DMA tagged-queuing depth (if supported)\n" \
- " -r get/set readonly flag (DANGEROUS to set)\n" \
- USAGE_SCAN_HWIF(" -R register an IDE interface (DANGEROUS)\n") \
- " -S set standby (spindown) timeout\n" \
- " -t perform device read timings\n" \
- " -T perform cache read timings\n" \
- " -u get/set unmaskirq flag (0/1)\n" \
- USAGE_UNREGISTER_HWIF(" -U un-register an IDE interface (DANGEROUS)\n") \
- " -v defaults; same as -mcudkrag for IDE drives\n" \
- " -V display program version and exit immediately\n" \
- USAGE_DRIVE_RESET(" -w perform device reset (DANGEROUS)\n") \
- " -W set drive write-caching flag (0/1) (DANGEROUS)\n" \
- USAGE_TRISTATE_HWIF(" -x tristate device for hotswap (0/1) (DANGEROUS)\n") \
- " -X set IDE xfer mode (DANGEROUS)\n" \
- " -y put IDE drive in standby mode\n" \
- " -Y put IDE drive to sleep\n" \
- " -Z disable Seagate auto-powersaving mode\n" \
- " -z re-read partition table"
+ "\t-a get/set fs readahead\n" \
+ "\t-A set drive read-lookahead flag (0/1)\n" \
+ "\t-b get/set bus state (0 == off, 1 == on, 2 == tristate)\n" \
+ "\t-B set Advanced Power Management setting (1-255)\n" \
+ "\t-c get/set IDE 32-bit IO setting\n" \
+ "\t-C check IDE power mode status\n" \
+ USAGE_GETSET_DMA("\t-d get/set using_dma flag\n") \
+ "\t-D enable/disable drive defect-mgmt\n" \
+ "\t-f flush buffer cache for device on exit\n" \
+ "\t-g display drive geometry\n" \
+ "\t-h display terse usage information\n" \
+ "\t-i display drive identification\n" \
+ USAGE_HDPARM_IDENT("\t-I detailed/current information directly from drive\n") \
+ USAGE_HDPARM_IDENT("\t-Istdin similar to -I, but wants /proc/ide/" "*" "/hd?/identify as input\n") \
+ "\t-k get/set keep_settings_over_reset flag (0/1)\n" \
+ "\t-K set drive keep_features_over_reset flag (0/1)\n" \
+ "\t-L set drive doorlock (0/1) (removable harddisks only)\n" \
+ "\t-m get/set multiple sector count\n" \
+ "\t-n get/set ignore-write-errors flag (0/1)\n" \
+ "\t-p set PIO mode on IDE interface chipset (0,1,2,3,4,...)\n" \
+ "\t-P set drive prefetch count\n" \
+ "\t-q change next setting quietly\n" \
+ "\t-Q get/set DMA tagged-queuing depth (if supported)\n" \
+ "\t-r get/set readonly flag (DANGEROUS to set)\n" \
+ USAGE_SCAN_HWIF("\t-R register an IDE interface (DANGEROUS)\n") \
+ "\t-S set standby (spindown) timeout\n" \
+ "\t-t perform device read timings\n" \
+ "\t-T perform cache read timings\n" \
+ "\t-u get/set unmaskirq flag (0/1)\n" \
+ USAGE_UNREGISTER_HWIF("\t-U un-register an IDE interface (DANGEROUS)\n") \
+ "\t-v defaults; same as -mcudkrag for IDE drives\n" \
+ "\t-V display program version and exit immediately\n" \
+ USAGE_DRIVE_RESET("\t-w perform device reset (DANGEROUS)\n") \
+ "\t-W set drive write-caching flag (0/1) (DANGEROUS)\n" \
+ USAGE_TRISTATE_HWIF("\t-x tristate device for hotswap (0/1) (DANGEROUS)\n") \
+ "\t-X set IDE xfer mode (DANGEROUS)\n" \
+ "\t-y put IDE drive in standby mode\n" \
+ "\t-Y put IDE drive to sleep\n" \
+ "\t-Z disable Seagate auto-powersaving mode\n" \
+ "\t-z re-read partition table"
#ifdef CONFIG_FEATURE_FANCY_HEAD
#define USAGE_FANCY_HEAD(a) a
"\t-l\tthe hardware clock is kept in local time"
#ifdef CONFIG_SELINUX
-#define USAGE_SELINUX(a, b) a
+ #define USAGE_SELINUX(a) a
#else
-#define USAGE_SELINUX(a, b) b
+ #define USAGE_SELINUX(a)
#endif
#define id_trivial_usage \
#define id_full_usage \
"Print information for USERNAME or the current user\n\n" \
"Options:\n" \
+ USAGE_SELINUX("\t-c\tprints only the security context\n") \
"\t-g\tprints only the group ID\n" \
"\t-u\tprints only the user ID\n" \
- USAGE_SELINUX("\t-c\tprints only the security context\n", "") \
- "\t-n\tprint a name instead of a number (with for -ug)\n" \
- "\t-r\tprints the real user ID instead of the effective ID (with -ug)"
+ "\t-n\tprint a name instead of a number\n" \
+ "\t-r\tprints the real user ID instead of the effective ID"
#define id_example_usage \
"$ id\n" \
"uid=1000(andersen) gid=1000(andersen)\n"
#define ipaddr_full_usage \
"ipaddr {add|del} IFADDR dev STRING\n" \
"ipaddr {show|flush} [ dev STRING ] [ scope SCOPE-ID ]\n" \
- " [ to PREFIX ] [ label PATTERN ]\n" \
- "IFADDR := PREFIX | ADDR peer PREFIX\n" \
- " [ broadcast ADDR ] [ anycast ADDR ]\n" \
- " [ label STRING ] [ scope SCOPE-ID ]\n" \
- "SCOPE-ID := [ host | link | global | NUMBER ]"
+ "\t\t\t[ to PREFIX ] [ label PATTERN ]\n" \
+ "\t\t\tIFADDR := PREFIX | ADDR peer PREFIX\n" \
+ "\t\t\t[ broadcast ADDR ] [ anycast ADDR ]\n" \
+ "\t\t\t[ label STRING ] [ scope SCOPE-ID ]\n" \
+ "\t\t\tSCOPE-ID := [ host | link | global | NUMBER ]"
#ifndef CONFIG_FEATURE_IPCALC_FANCY
#define ipcalc_trivial_usage \
"{ set DEVICE { up | down | arp { on | off } | show [ DEVICE ] }"
#define iplink_full_usage \
"iplink set DEVICE { up | down | arp { on | off } |\n" \
- " dynamic { on | off } |\n" \
- " mtu MTU }\n" \
- "iplink show [ DEVICE ]"
+ "\t\t\tdynamic { on | off } |\n" \
+ "\t\t\tmtu MTU }\n" \
+ "\tiplink show [ DEVICE ]"
#define iproute_trivial_usage \
"{ list | flush | { add | del | change | append |\n" \
#define iproute_full_usage \
"iproute { list | flush } SELECTOR\n" \
"iproute get ADDRESS [ from ADDRESS iif STRING ]\n" \
- " [ oif STRING ] [ tos TOS ]\n" \
- "iproute { add | del | change | append | replace | monitor } ROUTE\n" \
- "SELECTOR := [ root PREFIX ] [ match PREFIX ] [ proto RTPROTO ]\n" \
- "ROUTE := [ TYPE ] PREFIX [ tos TOS ] [ proto RTPROTO ]"
+ "\t\t\t[ oif STRING ] [ tos TOS ]\n" \
+ "\tiproute { add | del | change | append | replace | monitor } ROUTE\n" \
+ "\t\t\tSELECTOR := [ root PREFIX ] [ match PREFIX ] [ proto RTPROTO ]\n" \
+ "\t\t\tROUTE := [ TYPE ] PREFIX [ tos TOS ] [ proto RTPROTO ]"
#define iptunnel_trivial_usage \
"{ add | change | del | show } [ NAME ]\n" \
"\t\t[ remote ADDR ] [ local ADDR ] [ ttl TTL ]"
#define iptunnel_full_usage \
"iptunnel { add | change | del | show } [ NAME ]\n" \
- " [ mode { ipip | gre | sit } ] [ remote ADDR ] [ local ADDR ]\n" \
- " [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n" \
- " [ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]"
+ "\t\t\t[ mode { ipip | gre | sit } ] [ remote ADDR ] [ local ADDR ]\n" \
+ "\t\t\t[ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n" \
+ "\t\t\t[ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]"
#define kill_trivial_usage \
"[-signal] process-id [process-id ...]"
#else
#define USAGE_AUTOWIDTH(a)
#endif
+
#define ls_trivial_usage \
- "[-1Aa" USAGE_LS_TIMESTAMPS("c") "Cd" USAGE_LS_TIMESTAMPS("e") USAGE_LS_FILETYPES("F") "iln" USAGE_LS_FILETYPES("p") USAGE_LS_FOLLOWLINKS("L") USAGE_LS_RECURSIVE("R") USAGE_LS_SORTFILES("rS") "s" USAGE_AUTOWIDTH("T") USAGE_LS_TIMESTAMPS("tu") USAGE_LS_SORTFILES("v") USAGE_AUTOWIDTH("w") "x" USAGE_LS_SORTFILES("X") USAGE_HUMAN_READABLE("h") USAGE_NOT_HUMAN_READABLE("") "k" USAGE_SELINUX("K", "") "] [filenames...]"
+ "[-1Aa" USAGE_LS_TIMESTAMPS("c") "Cd" USAGE_LS_TIMESTAMPS("e") USAGE_LS_FILETYPES("F") "iln" USAGE_LS_FILETYPES("p") USAGE_LS_FOLLOWLINKS("L") USAGE_LS_RECURSIVE("R") USAGE_LS_SORTFILES("rS") "s" USAGE_AUTOWIDTH("T") USAGE_LS_TIMESTAMPS("tu") USAGE_LS_SORTFILES("v") USAGE_AUTOWIDTH("w") "x" USAGE_LS_SORTFILES("X") USAGE_HUMAN_READABLE("h") USAGE_NOT_HUMAN_READABLE("") "k" USAGE_SELINUX("K") "] [filenames...]"
#define ls_full_usage \
"List directory contents\n\n" \
"Options:\n" \
"\t-x\tlist entries by lines instead of by columns\n" \
USAGE_LS_SORTFILES("\t-X\tsort the listing by extension\n") \
USAGE_HUMAN_READABLE( \
- "\t-h\tprint sizes in human readable format (e.g., 1K 243M 2G )\n" \
- USAGE_SELINUX("\t-k\tprint security context\n\t-K\tprint security context in long format\n", ""))
+ "\t-h\tprint sizes in human readable format (e.g., 1K 243M 2G )\n") \
+ USAGE_SELINUX("\t-k\tprint security context\n") \
+ USAGE_SELINUX("\t-K\tprint security context in long format\n")
#define lsmod_trivial_usage \
""
"$ printf "Val=%d\\n" 5\n" \
"Val=5\n"
+#ifdef CONFIG_SELINUX
+#define USAGE_NONSELINUX(a)
+#else
+#define USAGE_NONSELINUX(a) a
+#endif
+
#define ps_trivial_usage \
""
#define ps_full_usage \
"Report process status\n" \
- USAGE_SELINUX("\nOptions:\n\t-c\tshow SE Linux context", \
- "\nThis version of ps accepts no options.")
+ USAGE_NONSELINUX("\n\tThis version of ps accepts no options.") \
+ USAGE_SELINUX("\nOptions:\n\t-c\tshow SE Linux context")
#define ps_example_usage \
"$ ps\n" \
USAGE_NOT_FANCY_SLEEP("Pause for N seconds.") \
USAGE_FANCY_SLEEP( \
"Pause for a time equal to the total of the args given, where each arg can\n" \
- "have an optional suffix of (s)econds, (m)inutes, (h)ours, or (d)ays.")
+ "\t\thave an optional suffix of (s)econds, (m)inutes, (h)ours, or (d)ays.")
#define sleep_example_usage \
"$ sleep 2\n" \
"[2 second delay results]\n" \
"hello world\n"
#define traceroute_trivial_usage \
- "[-dnrv] [-m max_ttl] [-p port#] [-q nqueries]\n\
- [-s src_addr] [-t tos] [-w wait] host [data size]"
+ "[-dnrv] [-m max_ttl] [-p port#] [-q nqueries]\n"\
+ "\t[-s src_addr] [-t tos] [-w wait] host [data size]"
#define traceroute_full_usage \
"trace the route ip packets follow going to \"host\"\n" \
"Options:\n" \
#define wget_trivial_usage \
"[-c|--continue] [-q|--quiet] [-O|--output-document file]\n" \
- "\t[--header 'header: value'] [-Y|--proxy on/off] [-P DIR] url"
+ "\t\t[--header 'header: value'] [-Y|--proxy on/off] [-P DIR] url"
#define wget_full_usage \
"wget retrieves files via HTTP or FTP\n\n" \
"Options:\n" \