Changeset 3233


Ignore:
Timestamp:
Jan 1, 2014, 9:23:14 AM (6 years ago)
Author:
bruno
Message:
  • mindi-busybox 1.21.1 is now complete and builds
Location:
branches/3.2/mindi-busybox
Files:
8 added
3 edited

Legend:

Unmodified
Added
Removed
  • branches/3.2/mindi-busybox/.config

    r3090 r3233  
    11#
    22# Automatically generated make config: don't edit
    3 # Busybox version: 1.18.5-rPBREV
    4 # Wed Mar 13 18:16:16 2013
     3# Busybox version: 1.21.1
     4# Wed Jan  1 01:01:58 2014
    55#
    66CONFIG_HAVE_DOT_CONFIG=y
     
    4040CONFIG_FEATURE_DEVPTS=y
    4141# CONFIG_FEATURE_CLEAN_UP is not set
     42CONFIG_FEATURE_UTMP=y
    4243# CONFIG_FEATURE_WTMP is not set
    43 CONFIG_FEATURE_UTMP=y
    4444# CONFIG_FEATURE_PIDFILE is not set
     45CONFIG_PID_FILE_PATH=""
    4546CONFIG_FEATURE_SUID=y
    4647# CONFIG_FEATURE_SUID_CONFIG is not set
     
    6364CONFIG_LFS=y
    6465CONFIG_CROSS_COMPILER_PREFIX=""
     66CONFIG_SYSROOT=""
    6567CONFIG_EXTRA_CFLAGS=""
     68CONFIG_EXTRA_LDFLAGS=""
     69CONFIG_EXTRA_LDLIBS=""
    6670
    6771#
     
    9094# Busybox Library Tuning
    9195#
     96CONFIG_FEATURE_RTMINMAX=y
    9297CONFIG_PASSWORD_MINLEN=6
    93 CONFIG_MD5_SIZE_VS_SPEED=2
     98CONFIG_MD5_SMALL=1
     99CONFIG_SHA3_SMALL=1
    94100CONFIG_FEATURE_FAST_TOP=y
    95101# CONFIG_FEATURE_ETC_NETWORKS is not set
     
    100106CONFIG_FEATURE_EDITING_HISTORY=15
    101107# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
     108# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
     109# CONFIG_FEATURE_REVERSE_SEARCH is not set
    102110CONFIG_FEATURE_TAB_COMPLETION=y
    103111# CONFIG_FEATURE_USERNAME_COMPLETION is not set
     
    107115CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
    108116CONFIG_FEATURE_COPYBUF_KB=4
     117CONFIG_FEATURE_SKIP_ROOTFS=y
    109118# CONFIG_MONOTONIC_SYSCALL is not set
    110119CONFIG_IOCTL_HEX2STR_ERROR=y
     
    124133# CONFIG_FEATURE_SEAMLESS_Z is not set
    125134CONFIG_AR=y
    126 # CONFIG_FEATURE_AR_LONG_FILENAMES is not set
     135CONFIG_FEATURE_AR_LONG_FILENAMES=y
    127136CONFIG_FEATURE_AR_CREATE=y
    128 # CONFIG_BUNZIP2 is not set
     137CONFIG_BUNZIP2=y
    129138CONFIG_BZIP2=y
    130139CONFIG_CPIO=y
     
    137146CONFIG_GZIP=y
    138147CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
     148CONFIG_GZIP_FAST=0
    139149CONFIG_LZOP=y
    140150# CONFIG_LZOP_COMPR_HIGH is not set
     
    170180# CONFIG_FEATURE_DATE_NANO is not set
    171181CONFIG_FEATURE_DATE_COMPAT=y
     182# CONFIG_HOSTID is not set
     183CONFIG_ID=y
     184CONFIG_GROUPS=y
    172185CONFIG_TEST=y
    173186# CONFIG_FEATURE_TEST_64 is not set
     187CONFIG_TOUCH=y
     188CONFIG_FEATURE_TOUCH_SUSV3=y
    174189CONFIG_TR=y
    175190CONFIG_FEATURE_TR_CLASSES=y
    176191CONFIG_FEATURE_TR_EQUIV=y
    177192CONFIG_BASE64=y
     193CONFIG_WHO=y
     194CONFIG_USERS=y
    178195# CONFIG_CAL is not set
    179196# CONFIG_CATV is not set
     
    212229CONFIG_HEAD=y
    213230# CONFIG_FEATURE_FANCY_HEAD is not set
    214 # CONFIG_HOSTID is not set
    215 CONFIG_ID=y
    216231# CONFIG_INSTALL is not set
    217232# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
    218 # CONFIG_LENGTH is not set
    219233CONFIG_LN=y
    220234# CONFIG_LOGNAME is not set
     
    251265CONFIG_SHA256SUM=y
    252266CONFIG_SHA512SUM=y
     267CONFIG_SHA3SUM=y
    253268CONFIG_SLEEP=y
    254269# CONFIG_FEATURE_FANCY_SLEEP is not set
     
    268283CONFIG_TEE=y
    269284CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
    270 CONFIG_TOUCH=y
    271285CONFIG_TRUE=y
    272286CONFIG_TTY=y
     
    280294CONFIG_WC=y
    281295# CONFIG_FEATURE_WC_LARGE is not set
    282 CONFIG_WHO=y
    283296CONFIG_WHOAMI=y
    284297CONFIG_YES=y
     
    300313
    301314#
    302 # Common options for md5sum, sha1sum, sha256sum, sha512sum
     315# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum
    303316#
    304317CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
     
    351364#
    352365CONFIG_PATCH=y
     366CONFIG_VI=y
     367CONFIG_FEATURE_VI_MAX_LEN=1024
     368# CONFIG_FEATURE_VI_8BIT is not set
     369CONFIG_FEATURE_VI_COLON=y
     370CONFIG_FEATURE_VI_YANKMARK=y
     371CONFIG_FEATURE_VI_SEARCH=y
     372# CONFIG_FEATURE_VI_REGEX_SEARCH is not set
     373CONFIG_FEATURE_VI_USE_SIGNALS=y
     374CONFIG_FEATURE_VI_DOT_CMD=y
     375CONFIG_FEATURE_VI_READONLY=y
     376CONFIG_FEATURE_VI_SETOPTS=y
     377CONFIG_FEATURE_VI_SET=y
     378CONFIG_FEATURE_VI_WIN_RESIZE=y
     379CONFIG_FEATURE_VI_ASK_TERMINAL=y
    353380CONFIG_AWK=y
    354381CONFIG_FEATURE_AWK_LIBM=y
     
    359386# CONFIG_ED is not set
    360387CONFIG_SED=y
    361 CONFIG_VI=y
    362 CONFIG_FEATURE_VI_MAX_LEN=1024
    363 # CONFIG_FEATURE_VI_8BIT is not set
    364 CONFIG_FEATURE_VI_COLON=y
    365 CONFIG_FEATURE_VI_YANKMARK=y
    366 CONFIG_FEATURE_VI_SEARCH=y
    367 CONFIG_FEATURE_VI_USE_SIGNALS=y
    368 CONFIG_FEATURE_VI_DOT_CMD=y
    369 CONFIG_FEATURE_VI_READONLY=y
    370 CONFIG_FEATURE_VI_SETOPTS=y
    371 CONFIG_FEATURE_VI_SET=y
    372 CONFIG_FEATURE_VI_WIN_RESIZE=y
    373 CONFIG_FEATURE_VI_ASK_TERMINAL=y
    374 CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
    375388CONFIG_FEATURE_ALLOW_EXEC=y
    376389
     
    431444CONFIG_INIT_TERMINAL_TYPE="linux"
    432445CONFIG_MESG=y
     446CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y
    433447
    434448#
     
    455469# CONFIG_GETTY is not set
    456470# CONFIG_LOGIN is not set
     471# CONFIG_LOGIN_SESSION_AS_CHILD is not set
    457472# CONFIG_PAM is not set
    458473# CONFIG_LOGIN_SCRIPTS is not set
     
    463478# CONFIG_CRYPTPW is not set
    464479# CONFIG_CHPASSWD is not set
     480CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=""
    465481# CONFIG_SU is not set
    466482# CONFIG_FEATURE_SU_SYSLOG is not set
     
    512528#
    513529CONFIG_BLOCKDEV=y
     530# CONFIG_MDEV is not set
     531# CONFIG_FEATURE_MDEV_CONF is not set
     532# CONFIG_FEATURE_MDEV_RENAME is not set
     533# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
     534# CONFIG_FEATURE_MDEV_EXEC is not set
     535# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
    514536CONFIG_REV=y
    515537CONFIG_ACPID=y
    516538CONFIG_FEATURE_ACPID_COMPAT=y
    517539# CONFIG_BLKID is not set
     540# CONFIG_FEATURE_BLKID_TYPE is not set
    518541CONFIG_DMESG=y
    519542CONFIG_FEATURE_DMESG_PRETTY=y
     
    524547CONFIG_FDFORMAT=y
    525548# CONFIG_FDISK is not set
    526 CONFIG_FDISK_SUPPORT_LARGE_DISKS=y
     549# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
    527550# CONFIG_FEATURE_FDISK_WRITABLE is not set
    528551# CONFIG_FEATURE_AIX_LABEL is not set
     
    554577CONFIG_LSPCI=y
    555578CONFIG_LSUSB=y
    556 # CONFIG_MDEV is not set
    557 # CONFIG_FEATURE_MDEV_CONF is not set
    558 # CONFIG_FEATURE_MDEV_RENAME is not set
    559 # CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
    560 # CONFIG_FEATURE_MDEV_EXEC is not set
    561 # CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
    562579# CONFIG_MKSWAP is not set
    563580# CONFIG_FEATURE_MKSWAP_UUID is not set
     
    601618CONFIG_FEATURE_VOLUMEID_REISERFS=y
    602619CONFIG_FEATURE_VOLUMEID_FAT=y
     620CONFIG_FEATURE_VOLUMEID_EXFAT=y
    603621CONFIG_FEATURE_VOLUMEID_HFS=y
    604622CONFIG_FEATURE_VOLUMEID_JFS=y
    605623CONFIG_FEATURE_VOLUMEID_XFS=y
     624CONFIG_FEATURE_VOLUMEID_NILFS=y
    606625CONFIG_FEATURE_VOLUMEID_NTFS=y
    607626CONFIG_FEATURE_VOLUMEID_ISO9660=y
     
    611630CONFIG_FEATURE_VOLUMEID_CRAMFS=y
    612631CONFIG_FEATURE_VOLUMEID_ROMFS=y
     632# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set
    613633CONFIG_FEATURE_VOLUMEID_SYSV=y
    614634CONFIG_FEATURE_VOLUMEID_OCFS2=y
     
    619639#
    620640# CONFIG_CONSPY is not set
     641# CONFIG_LESS is not set
     642CONFIG_FEATURE_LESS_MAXLINES=0
     643# CONFIG_FEATURE_LESS_BRACKETS is not set
     644# CONFIG_FEATURE_LESS_FLAGS is not set
     645# CONFIG_FEATURE_LESS_MARKS is not set
     646# CONFIG_FEATURE_LESS_REGEXP is not set
     647# CONFIG_FEATURE_LESS_WINCH is not set
     648# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set
     649# CONFIG_FEATURE_LESS_DASHCMD is not set
     650# CONFIG_FEATURE_LESS_LINENUMS is not set
    621651# CONFIG_NANDWRITE is not set
    622652# CONFIG_NANDDUMP is not set
     
    663693# CONFIG_FEATURE_LAST_SMALL is not set
    664694# CONFIG_FEATURE_LAST_FANCY is not set
    665 # CONFIG_LESS is not set
    666 CONFIG_FEATURE_LESS_MAXLINES=0
    667 # CONFIG_FEATURE_LESS_BRACKETS is not set
    668 # CONFIG_FEATURE_LESS_FLAGS is not set
    669 # CONFIG_FEATURE_LESS_MARKS is not set
    670 # CONFIG_FEATURE_LESS_REGEXP is not set
    671 # CONFIG_FEATURE_LESS_WINCH is not set
    672 # CONFIG_FEATURE_LESS_DASHCMD is not set
    673 # CONFIG_FEATURE_LESS_LINENUMS is not set
    674695# CONFIG_HDPARM is not set
    675696# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
     
    705726# Networking Utilities
    706727#
     728# CONFIG_NAMEIF is not set
     729# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
    707730CONFIG_NBDCLIENT=y
    708731CONFIG_NC=y
     
    710733CONFIG_NC_EXTRA=y
    711734# CONFIG_NC_110_COMPAT is not set
     735CONFIG_PING=y
     736# CONFIG_PING6 is not set
     737CONFIG_FEATURE_FANCY_PING=y
    712738# CONFIG_FEATURE_IPV6 is not set
    713739# CONFIG_FEATURE_UNIX_LOCAL is not set
     
    782808# CONFIG_FEATURE_IPCALC_FANCY is not set
    783809# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
    784 # CONFIG_NAMEIF is not set
    785 # CONFIG_FEATURE_NAMEIF_EXTENDED is not set
    786810CONFIG_NETSTAT=y
    787811# CONFIG_FEATURE_NETSTAT_WIDE is not set
     
    790814# CONFIG_NTPD is not set
    791815# CONFIG_FEATURE_NTPD_SERVER is not set
    792 CONFIG_PING=y
    793 # CONFIG_PING6 is not set
    794 CONFIG_FEATURE_FANCY_PING=y
    795816# CONFIG_PSCAN is not set
    796817CONFIG_ROUTE=y
     
    825846# CONFIG_DUMPLEASES is not set
    826847# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
     848# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
    827849CONFIG_DHCPD_LEASES_FILE=""
    828850CONFIG_UDHCPC=y
     
    831853CONFIG_UDHCP_DEBUG=9
    832854# CONFIG_FEATURE_UDHCP_RFC3397 is not set
     855CONFIG_FEATURE_UDHCP_8021Q=y
    833856CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
    834857CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
     
    866889# CONFIG_IOSTAT is not set
    867890# CONFIG_MPSTAT is not set
     891# CONFIG_NMETER is not set
    868892# CONFIG_PMAP is not set
    869893# CONFIG_POWERTOP is not set
    870894# CONFIG_SMEMCAP is not set
     895CONFIG_TOP=y
     896CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
     897CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
     898CONFIG_FEATURE_TOP_SMP_CPU=y
     899# CONFIG_FEATURE_TOP_DECIMALS is not set
     900CONFIG_FEATURE_TOP_SMP_PROCESS=y
     901CONFIG_FEATURE_TOPMEM=y
     902# CONFIG_UPTIME is not set
     903# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
    871904CONFIG_FREE=y
    872905# CONFIG_FUSER is not set
     
    874907CONFIG_KILLALL=y
    875908# CONFIG_KILLALL5 is not set
    876 # CONFIG_NMETER is not set
    877909# CONFIG_PGREP is not set
    878910# CONFIG_PIDOF is not set
     
    882914CONFIG_PS=y
    883915CONFIG_FEATURE_PS_WIDE=y
     916CONFIG_FEATURE_PS_LONG=y
    884917# CONFIG_FEATURE_PS_TIME is not set
    885918# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
     
    887920# CONFIG_RENICE is not set
    888921# CONFIG_BB_SYSCTL is not set
    889 CONFIG_TOP=y
    890 CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
    891 CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
    892 CONFIG_FEATURE_TOP_SMP_CPU=y
    893 # CONFIG_FEATURE_TOP_DECIMALS is not set
    894 CONFIG_FEATURE_TOP_SMP_PROCESS=y
    895 CONFIG_FEATURE_TOPMEM=y
    896922CONFIG_FEATURE_SHOW_THREADS=y
    897 # CONFIG_UPTIME is not set
    898923# CONFIG_WATCH is not set
    899924
     
    933958CONFIG_ASH=y
    934959CONFIG_ASH_BASH_COMPAT=y
     960# CONFIG_ASH_IDLE_TIMEOUT is not set
    935961CONFIG_ASH_JOB_CONTROL=y
    936962CONFIG_ASH_ALIAS=y
     
    973999# CONFIG_FEATURE_SH_STANDALONE is not set
    9741000# CONFIG_FEATURE_SH_NOFORK is not set
     1001CONFIG_FEATURE_SH_HISTFILESIZE=y
    9751002
    9761003#
     
    9811008CONFIG_FEATURE_REMOTE_LOG=y
    9821009CONFIG_FEATURE_SYSLOGD_DUP=y
     1010CONFIG_FEATURE_SYSLOGD_CFG=y
    9831011CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
    9841012CONFIG_FEATURE_IPC_SYSLOG=y
     
    9861014CONFIG_LOGREAD=y
    9871015CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
     1016CONFIG_FEATURE_KMSG_SYSLOG=y
    9881017CONFIG_KLOGD=y
     1018
     1019#
     1020# klogd should not be used together with syslog to kernel printk buffer
     1021#
    9891022CONFIG_FEATURE_KLOGD_KLOGCTL=y
    9901023# CONFIG_LOGGER is not set
  • branches/3.2/mindi-busybox/include/applets.h

    r2725 r3233  
    1414l     - location to install link to: [/usr]/[s]bin
    1515s     - suid type:
    16         _BB_SUID_REQUIRE: will complain if busybox isn't suid
     16        BB_SUID_REQUIRE: will complain if busybox isn't suid
    1717        and is run by non-root (applet_main() will not be called at all)
    18         _BB_SUID_DROP: will drop suid prior to applet_main()
    19         _BB_SUID_MAYBE: neither of the above
     18        BB_SUID_DROP: will drop suid prior to applet_main()
     19        BB_SUID_MAYBE: neither of the above
     20        (every instance of BB_SUID_REQUIRE and BB_SUID_MAYBE
     21        needs to be justified in comment)
     22        NB: please update FEATURE_SUID help text whenever you add/remove
     23        BB_SUID_REQUIRE or BB_SUID_MAYBE applet.
    2024*/
    2125
     
    5963
    6064#if ENABLE_INSTALL_NO_USR
    61 # define _BB_DIR_USR_BIN _BB_DIR_BIN
    62 # define _BB_DIR_USR_SBIN _BB_DIR_SBIN
     65# define BB_DIR_USR_BIN BB_DIR_BIN
     66# define BB_DIR_USR_SBIN BB_DIR_SBIN
    6367#endif
    6468
    6569
    66 IF_BUNZIP2(APPLET(bunzip2, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    67 IF_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, _BB_DIR_USR_BIN, _BB_SUID_DROP, bzcat))
    68 IF_DATE(APPLET(date, _BB_DIR_BIN, _BB_SUID_DROP))
    69 IF_BASE64(APPLET(base64, _BB_DIR_BIN, _BB_SUID_DROP))
    70 IF_PATCH(APPLET(patch, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    71 IF_FIND(APPLET_NOEXEC(find, find, _BB_DIR_USR_BIN, _BB_SUID_DROP, find))
    72 IF_GREP(APPLET(grep, _BB_DIR_BIN, _BB_SUID_DROP))
    73 IF_FEATURE_GREP_EGREP_ALIAS(APPLET_ODDNAME(egrep, grep, _BB_DIR_BIN, _BB_SUID_DROP, egrep))
    74 IF_FEATURE_GREP_FGREP_ALIAS(APPLET_ODDNAME(fgrep, grep, _BB_DIR_BIN, _BB_SUID_DROP, fgrep))
    75 IF_XARGS(APPLET_NOEXEC(xargs, xargs, _BB_DIR_USR_BIN, _BB_SUID_DROP, xargs))
    76 IF_BOOTCHARTD(APPLET(bootchartd, _BB_DIR_SBIN, _BB_SUID_DROP))
    77 IF_HALT(APPLET(halt, _BB_DIR_SBIN, _BB_SUID_DROP))
    78 IF_HALT(APPLET_ODDNAME(poweroff, halt, _BB_DIR_SBIN, _BB_SUID_DROP, poweroff))
    79 IF_HALT(APPLET_ODDNAME(reboot, halt, _BB_DIR_SBIN, _BB_SUID_DROP, reboot))
    80 IF_INIT(APPLET(init, _BB_DIR_SBIN, _BB_SUID_DROP))
    81 IF_FEATURE_INITRD(APPLET_ODDNAME(linuxrc, init, _BB_DIR_ROOT, _BB_SUID_DROP, linuxrc))
    82 IF_MESG(APPLET(mesg, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    83 IF_ADD_SHELL(   APPLET_ODDNAME(add-shell   , add_remove_shell, _BB_DIR_USR_BIN, _BB_SUID_DROP, add_shell   ))
    84 IF_REMOVE_SHELL(APPLET_ODDNAME(remove-shell, add_remove_shell, _BB_DIR_USR_BIN, _BB_SUID_DROP, remove_shell))
    85 IF_CONSPY(APPLET(conspy, _BB_DIR_BIN, _BB_SUID_DROP))
    86 IF_NANDWRITE(APPLET(nandwrite, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    87 IF_NANDWRITE(APPLET_ODDNAME(nanddump, nandwrite, _BB_DIR_USR_SBIN, _BB_SUID_DROP, nanddump))
     70IF_BUNZIP2(APPLET(bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
     71IF_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP, bzcat))
     72IF_DATE(APPLET(date, BB_DIR_BIN, BB_SUID_DROP))
     73IF_HOSTID(APPLET_NOFORK(hostid, hostid, BB_DIR_USR_BIN, BB_SUID_DROP, hostid))
     74IF_GROUPS(APPLET_NOEXEC(groups, id, BB_DIR_USR_BIN, BB_SUID_DROP, groups))
     75IF_ID(    APPLET_NOEXEC(id,     id, BB_DIR_USR_BIN, BB_SUID_DROP, id    ))
     76IF_TOUCH(APPLET_NOFORK(touch, touch, BB_DIR_BIN, BB_SUID_DROP, touch))
     77IF_BASE64(APPLET(base64, BB_DIR_BIN, BB_SUID_DROP))
     78IF_USERS(APPLET_ODDNAME(users, who, BB_DIR_USR_BIN, BB_SUID_DROP, users))
     79IF_WHO(  APPLET(  who, BB_DIR_USR_BIN, BB_SUID_DROP))
     80IF_PATCH(APPLET(patch, BB_DIR_USR_BIN, BB_SUID_DROP))
     81IF_VI(APPLET(vi, BB_DIR_BIN, BB_SUID_DROP))
     82IF_FIND(APPLET_NOEXEC(find, find, BB_DIR_USR_BIN, BB_SUID_DROP, find))
     83IF_GREP(APPLET(grep, BB_DIR_BIN, BB_SUID_DROP))
     84IF_FEATURE_GREP_EGREP_ALIAS(APPLET_ODDNAME(egrep, grep, BB_DIR_BIN, BB_SUID_DROP, egrep))
     85IF_FEATURE_GREP_FGREP_ALIAS(APPLET_ODDNAME(fgrep, grep, BB_DIR_BIN, BB_SUID_DROP, fgrep))
     86IF_XARGS(APPLET_NOEXEC(xargs, xargs, BB_DIR_USR_BIN, BB_SUID_DROP, xargs))
     87IF_BOOTCHARTD(APPLET(bootchartd, BB_DIR_SBIN, BB_SUID_DROP))
     88IF_HALT(APPLET(halt, BB_DIR_SBIN, BB_SUID_DROP))
     89IF_HALT(APPLET_ODDNAME(poweroff, halt, BB_DIR_SBIN, BB_SUID_DROP, poweroff))
     90IF_HALT(APPLET_ODDNAME(reboot, halt, BB_DIR_SBIN, BB_SUID_DROP, reboot))
     91IF_INIT(APPLET(init, BB_DIR_SBIN, BB_SUID_DROP))
     92IF_FEATURE_INITRD(APPLET_ODDNAME(linuxrc, init, BB_DIR_ROOT, BB_SUID_DROP, linuxrc))
     93IF_MESG(APPLET(mesg, BB_DIR_USR_BIN, BB_SUID_DROP))
     94IF_ADD_SHELL(   APPLET_ODDNAME(add-shell   , add_remove_shell, BB_DIR_USR_SBIN, BB_SUID_DROP, add_shell   ))
     95IF_REMOVE_SHELL(APPLET_ODDNAME(remove-shell, add_remove_shell, BB_DIR_USR_SBIN, BB_SUID_DROP, remove_shell))
     96IF_CONSPY(APPLET(conspy, BB_DIR_BIN, BB_SUID_DROP))
     97IF_NANDWRITE(APPLET(nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP))
     98IF_NANDWRITE(APPLET_ODDNAME(nanddump, nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP, nanddump))
    8899IF_UBIATTACH(APPLET_ODDNAME(ubiattach, ubi_attach_detach, _BB_DIR_USR_SBIN, _BB_SUID_DROP, ubiattach))
    89100IF_UBIDETACH(APPLET_ODDNAME(ubidetach, ubi_attach_detach, _BB_DIR_USR_SBIN, _BB_SUID_DROP, ubidetach))
    90 IF_DEPMOD(APPLET(depmod, _BB_DIR_SBIN, _BB_SUID_DROP))
    91 IF_INSMOD(APPLET(insmod, _BB_DIR_SBIN, _BB_SUID_DROP))
    92 IF_LSMOD(APPLET(lsmod, _BB_DIR_SBIN, _BB_SUID_DROP))
    93 IF_MODINFO(APPLET(modinfo, _BB_DIR_SBIN, _BB_SUID_DROP))
    94 IF_MODPROBE(APPLET(modprobe, _BB_DIR_SBIN, _BB_SUID_DROP))
    95 IF_MODPROBE_SMALL(APPLET(modprobe, _BB_DIR_SBIN, _BB_SUID_DROP))
    96 IF_MODPROBE_SMALL(APPLET_ODDNAME(depmod, modprobe, _BB_DIR_SBIN, _BB_SUID_DROP, modprobe))
    97 IF_MODPROBE_SMALL(APPLET_ODDNAME(insmod, modprobe, _BB_DIR_SBIN, _BB_SUID_DROP, modprobe))
    98 IF_MODPROBE_SMALL(APPLET_ODDNAME(lsmod, modprobe, _BB_DIR_SBIN, _BB_SUID_DROP, modprobe))
    99 IF_MODPROBE_SMALL(APPLET_ODDNAME(rmmod, modprobe, _BB_DIR_SBIN, _BB_SUID_DROP, modprobe))
    100 IF_RMMOD(APPLET(rmmod, _BB_DIR_SBIN, _BB_SUID_DROP))
    101 IF_NBDCLIENT(APPLET_ODDNAME(nbd-client, nbdclient, _BB_DIR_USR_SBIN, _BB_SUID_DROP, nbdclient))
    102 IF_IOSTAT(APPLET(iostat, _BB_DIR_BIN, _BB_SUID_DROP))
    103 IF_MPSTAT(APPLET(mpstat, _BB_DIR_BIN, _BB_SUID_DROP))
    104 IF_PMAP(APPLET(pmap, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    105 IF_POWERTOP(APPLET(powertop, _BB_DIR_BIN, _BB_SUID_DROP))
    106 IF_SMEMCAP(APPLET(smemcap, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    107 IF_ASH(APPLET(ash, _BB_DIR_BIN, _BB_SUID_DROP))
    108 IF_FEATURE_SH_IS_ASH(APPLET_ODDNAME(sh, ash, _BB_DIR_BIN, _BB_SUID_DROP, sh))
    109 IF_FEATURE_BASH_IS_ASH(APPLET_ODDNAME(bash, ash, _BB_DIR_BIN, _BB_SUID_DROP, bash))
    110 IF_CTTYHACK(APPLET(cttyhack, _BB_DIR_BIN, _BB_SUID_DROP))
    111 IF_HUSH(APPLET(hush, _BB_DIR_BIN, _BB_SUID_DROP))
    112 IF_MSH(APPLET(msh, _BB_DIR_BIN, _BB_SUID_DROP))
    113 IF_FEATURE_SH_IS_HUSH(APPLET_ODDNAME(sh, hush, _BB_DIR_BIN, _BB_SUID_DROP, sh))
    114 IF_FEATURE_BASH_IS_HUSH(APPLET_ODDNAME(bash, hush, _BB_DIR_BIN, _BB_SUID_DROP, bash))
    115 IF_BLOCKDEV(APPLET(blockdev, _BB_DIR_SBIN, _BB_SUID_DROP))
    116 IF_REV(APPLET(rev, _BB_DIR_BIN, _BB_SUID_DROP))
    117 IF_TEST(APPLET_NOFORK([,  test, _BB_DIR_USR_BIN, _BB_SUID_DROP, test))
    118 IF_TEST(APPLET_NOFORK([[, test, _BB_DIR_USR_BIN, _BB_SUID_DROP, test))
    119 IF_ACPID(APPLET(acpid, _BB_DIR_SBIN, _BB_SUID_DROP))
    120 IF_ADDGROUP(APPLET(addgroup, _BB_DIR_BIN, _BB_SUID_DROP))
    121 IF_ADDUSER(APPLET(adduser, _BB_DIR_BIN, _BB_SUID_DROP))
    122 IF_ADJTIMEX(APPLET(adjtimex, _BB_DIR_SBIN, _BB_SUID_DROP))
    123 IF_AR(APPLET(ar, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    124 IF_ARP(APPLET(arp, _BB_DIR_SBIN, _BB_SUID_DROP))
    125 IF_ARPING(APPLET(arping, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    126 IF_AWK(APPLET_NOEXEC(awk, awk, _BB_DIR_USR_BIN, _BB_SUID_DROP, awk))
    127 IF_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_DROP, basename))
    128 IF_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_DROP))
    129 IF_BEEP(APPLET(beep, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    130 IF_BLKID(APPLET(blkid, _BB_DIR_SBIN, _BB_SUID_DROP))
    131 IF_BRCTL(APPLET(brctl, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    132 IF_BZIP2(APPLET(bzip2, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    133 IF_CAL(APPLET(cal, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    134 IF_CAT(APPLET_NOFORK(cat, cat, _BB_DIR_BIN, _BB_SUID_DROP, cat))
    135 IF_CATV(APPLET(catv, _BB_DIR_BIN, _BB_SUID_DROP))
    136 IF_CHAT(APPLET(chat, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    137 IF_CHATTR(APPLET(chattr, _BB_DIR_BIN, _BB_SUID_DROP))
    138 IF_CHCON(APPLET(chcon, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    139 IF_CHGRP(APPLET_NOEXEC(chgrp, chgrp, _BB_DIR_BIN, _BB_SUID_DROP, chgrp))
    140 IF_CHMOD(APPLET_NOEXEC(chmod, chmod, _BB_DIR_BIN, _BB_SUID_DROP, chmod))
    141 IF_CHOWN(APPLET_NOEXEC(chown, chown, _BB_DIR_BIN, _BB_SUID_DROP, chown))
    142 IF_CHPASSWD(APPLET(chpasswd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    143 IF_CHPST(APPLET(chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    144 IF_CHROOT(APPLET(chroot, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    145 IF_CHRT(APPLET(chrt, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    146 IF_CHVT(APPLET(chvt, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    147 IF_CKSUM(APPLET_NOEXEC(cksum, cksum, _BB_DIR_USR_BIN, _BB_SUID_DROP, cksum))
    148 IF_CLEAR(APPLET(clear, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    149 IF_CMP(APPLET(cmp, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    150 IF_COMM(APPLET(comm, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    151 IF_CP(APPLET_NOEXEC(cp, cp, _BB_DIR_BIN, _BB_SUID_DROP, cp))
    152 IF_CPIO(APPLET(cpio, _BB_DIR_BIN, _BB_SUID_DROP))
    153 IF_CROND(APPLET(crond, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    154 IF_CRONTAB(APPLET(crontab, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    155 IF_CRYPTPW(APPLET(cryptpw, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    156 IF_CUT(APPLET_NOEXEC(cut, cut, _BB_DIR_USR_BIN, _BB_SUID_DROP, cut))
    157 IF_DC(APPLET(dc, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    158 IF_DD(APPLET_NOEXEC(dd, dd, _BB_DIR_BIN, _BB_SUID_DROP, dd))
    159 IF_DEALLOCVT(APPLET(deallocvt, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    160 IF_DELGROUP(APPLET_ODDNAME(delgroup, deluser, _BB_DIR_BIN, _BB_SUID_DROP, delgroup))
    161 IF_DELUSER(APPLET(deluser, _BB_DIR_BIN, _BB_SUID_DROP))
    162 IF_DEVFSD(APPLET(devfsd, _BB_DIR_SBIN, _BB_SUID_DROP))
    163 IF_DEVMEM(APPLET(devmem, _BB_DIR_SBIN, _BB_SUID_DROP))
    164 IF_DF(APPLET(df, _BB_DIR_BIN, _BB_SUID_DROP))
    165 IF_DHCPRELAY(APPLET(dhcprelay, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    166 IF_DIFF(APPLET(diff, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    167 IF_DIRNAME(APPLET_NOFORK(dirname, dirname, _BB_DIR_USR_BIN, _BB_SUID_DROP, dirname))
    168 IF_DMESG(APPLET(dmesg, _BB_DIR_BIN, _BB_SUID_DROP))
    169 IF_DNSD(APPLET(dnsd, _BB_DIR_USR_SBIN, _BB_SUID_REQUIRE))
    170 IF_HOSTNAME(APPLET_ODDNAME(dnsdomainname, hostname, _BB_DIR_BIN, _BB_SUID_DROP, dnsdomainname))
    171 IF_DOS2UNIX(APPLET_NOEXEC(dos2unix, dos2unix, _BB_DIR_USR_BIN, _BB_SUID_DROP, dos2unix))
    172 IF_DPKG(APPLET(dpkg, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    173 IF_DPKG_DEB(APPLET_ODDNAME(dpkg-deb, dpkg_deb, _BB_DIR_USR_BIN, _BB_SUID_DROP, dpkg_deb))
    174 IF_DU(APPLET(du, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    175 IF_DUMPKMAP(APPLET(dumpkmap, _BB_DIR_BIN, _BB_SUID_DROP))
    176 IF_DUMPLEASES(APPLET(dumpleases, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    177 //IF_E2FSCK(APPLET(e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP))
    178 //IF_E2LABEL(APPLET_ODDNAME(e2label, tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP, e2label))
    179 IF_ECHO(APPLET_NOFORK(echo, echo, _BB_DIR_BIN, _BB_SUID_DROP, echo))
    180 IF_ED(APPLET(ed, _BB_DIR_BIN, _BB_SUID_DROP))
    181 IF_EJECT(APPLET(eject, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    182 IF_ENV(APPLET_NOEXEC(env, env, _BB_DIR_USR_BIN, _BB_SUID_DROP, env))
    183 IF_ENVDIR(APPLET_ODDNAME(envdir, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, envdir))
    184 IF_ENVUIDGID(APPLET_ODDNAME(envuidgid, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, envuidgid))
    185 IF_ETHER_WAKE(APPLET_ODDNAME(ether-wake, ether_wake, _BB_DIR_USR_BIN, _BB_SUID_DROP, ether_wake))
    186 IF_EXPAND(APPLET(expand, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    187 IF_EXPR(APPLET(expr, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    188 IF_FAKEIDENTD(APPLET(fakeidentd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    189 IF_FALSE(APPLET_NOFORK(false, false, _BB_DIR_BIN, _BB_SUID_DROP, false))
    190 IF_FBSET(APPLET(fbset, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    191 IF_FBSPLASH(APPLET(fbsplash, _BB_DIR_SBIN, _BB_SUID_DROP))
    192 IF_FDFLUSH(APPLET_ODDNAME(fdflush, freeramdisk, _BB_DIR_BIN, _BB_SUID_DROP, fdflush))
    193 IF_FDFORMAT(APPLET(fdformat, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    194 IF_FDISK(APPLET(fdisk, _BB_DIR_SBIN, _BB_SUID_DROP))
    195 IF_FGCONSOLE(APPLET(fgconsole, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    196 IF_FINDFS(APPLET(findfs, _BB_DIR_SBIN, _BB_SUID_MAYBE))
    197 IF_FLASH_ERASEALL(APPLET(flash_eraseall, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    198 IF_FLASH_LOCK(APPLET_ODDNAME(flash_lock, flash_lock_unlock, _BB_DIR_USR_SBIN, _BB_SUID_DROP, flash_lock))
    199 IF_FLASH_UNLOCK(APPLET_ODDNAME(flash_unlock, flash_lock_unlock, _BB_DIR_USR_SBIN, _BB_SUID_DROP, flash_unlock))
    200 IF_FLASHCP(APPLET(flashcp, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    201 IF_FLOCK(APPLET(flock, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    202 IF_FOLD(APPLET_NOEXEC(fold, fold, _BB_DIR_USR_BIN, _BB_SUID_DROP, fold))
    203 IF_FREE(APPLET(free, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    204 IF_FREERAMDISK(APPLET(freeramdisk, _BB_DIR_SBIN, _BB_SUID_DROP))
    205 IF_FSCK(APPLET(fsck, _BB_DIR_SBIN, _BB_SUID_DROP))
    206 //IF_E2FSCK(APPLET_ODDNAME(fsck.ext2, e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_ext2))
    207 //IF_E2FSCK(APPLET_ODDNAME(fsck.ext3, e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_ext3))
    208 IF_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_minix))
    209 IF_FSYNC(APPLET_NOFORK(fsync, fsync, _BB_DIR_BIN, _BB_SUID_DROP, fsync))
    210 IF_FTPD(APPLET(ftpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    211 IF_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_DROP, ftpget))
    212 IF_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_DROP, ftpput))
    213 IF_FUSER(APPLET(fuser, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    214 IF_GETENFORCE(APPLET(getenforce, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    215 IF_GETOPT(APPLET(getopt, _BB_DIR_BIN, _BB_SUID_DROP))
    216 IF_GETSEBOOL(APPLET(getsebool, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    217 IF_GETTY(APPLET(getty, _BB_DIR_SBIN, _BB_SUID_DROP))
    218 IF_GUNZIP(APPLET(gunzip, _BB_DIR_BIN, _BB_SUID_DROP))
    219 IF_GZIP(APPLET(gzip, _BB_DIR_BIN, _BB_SUID_DROP))
    220 IF_HD(APPLET_NOEXEC(hd, hexdump, _BB_DIR_USR_BIN, _BB_SUID_DROP, hd))
    221 IF_HDPARM(APPLET(hdparm, _BB_DIR_SBIN, _BB_SUID_DROP))
    222 IF_HEAD(APPLET_NOEXEC(head, head, _BB_DIR_USR_BIN, _BB_SUID_DROP, head))
    223 IF_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, _BB_DIR_USR_BIN, _BB_SUID_DROP, hexdump))
    224 IF_HOSTID(APPLET_NOFORK(hostid, hostid, _BB_DIR_USR_BIN, _BB_SUID_DROP, hostid))
    225 IF_HOSTNAME(APPLET(hostname, _BB_DIR_BIN, _BB_SUID_DROP))
    226 IF_HTTPD(APPLET(httpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    227 IF_HWCLOCK(APPLET(hwclock, _BB_DIR_SBIN, _BB_SUID_DROP))
    228 IF_ID(APPLET_NOEXEC(id, id, _BB_DIR_USR_BIN, _BB_SUID_DROP, id))
    229 IF_IFCONFIG(APPLET(ifconfig, _BB_DIR_SBIN, _BB_SUID_DROP))
    230 IF_IFUPDOWN(APPLET_ODDNAME(ifdown, ifupdown, _BB_DIR_SBIN, _BB_SUID_DROP, ifdown))
    231 IF_IFENSLAVE(APPLET(ifenslave, _BB_DIR_SBIN, _BB_SUID_DROP))
    232 IF_IFPLUGD(APPLET(ifplugd, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    233 IF_IFUPDOWN(APPLET_ODDNAME(ifup, ifupdown, _BB_DIR_SBIN, _BB_SUID_DROP, ifup))
    234 IF_INETD(APPLET(inetd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    235 IF_INOTIFYD(APPLET(inotifyd, _BB_DIR_SBIN, _BB_SUID_DROP))
    236 IF_INSTALL(APPLET(install, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    237 IF_IONICE(APPLET(ionice, _BB_DIR_BIN, _BB_SUID_DROP))
     101IF_DEPMOD(APPLET(depmod, BB_DIR_SBIN, BB_SUID_DROP))
     102IF_INSMOD(APPLET(insmod, BB_DIR_SBIN, BB_SUID_DROP))
     103IF_LSMOD(APPLET(lsmod, BB_DIR_SBIN, BB_SUID_DROP))
     104IF_MODINFO(APPLET(modinfo, BB_DIR_SBIN, BB_SUID_DROP))
     105IF_MODPROBE(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP))
     106IF_MODPROBE_SMALL(APPLET(modprobe, BB_DIR_SBIN, BB_SUID_DROP))
     107IF_MODPROBE_SMALL(APPLET_ODDNAME(depmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
     108IF_MODPROBE_SMALL(APPLET_ODDNAME(insmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
     109IF_MODPROBE_SMALL(APPLET_ODDNAME(lsmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
     110IF_MODPROBE_SMALL(APPLET_ODDNAME(rmmod, modprobe, BB_DIR_SBIN, BB_SUID_DROP, modprobe))
     111IF_RMMOD(APPLET(rmmod, BB_DIR_SBIN, BB_SUID_DROP))
     112IF_NBDCLIENT(APPLET_ODDNAME(nbd-client, nbdclient, BB_DIR_USR_SBIN, BB_SUID_DROP, nbdclient))
     113IF_PING(APPLET(ping, BB_DIR_BIN, BB_SUID_MAYBE))
     114IF_PING6(APPLET(ping6, BB_DIR_BIN, BB_SUID_MAYBE))
     115IF_IOSTAT(APPLET(iostat, BB_DIR_BIN, BB_SUID_DROP))
     116IF_MPSTAT(APPLET(mpstat, BB_DIR_BIN, BB_SUID_DROP))
     117IF_NMETER(APPLET(nmeter, BB_DIR_USR_BIN, BB_SUID_DROP))
     118IF_PMAP(APPLET(pmap, BB_DIR_USR_BIN, BB_SUID_DROP))
     119IF_POWERTOP(APPLET(powertop, BB_DIR_USR_SBIN, BB_SUID_DROP))
     120IF_SMEMCAP(APPLET(smemcap, BB_DIR_USR_BIN, BB_SUID_DROP))
     121IF_ASH(APPLET(ash, BB_DIR_BIN, BB_SUID_DROP))
     122IF_FEATURE_SH_IS_ASH(APPLET_ODDNAME(sh, ash, BB_DIR_BIN, BB_SUID_DROP, sh))
     123IF_FEATURE_BASH_IS_ASH(APPLET_ODDNAME(bash, ash, BB_DIR_BIN, BB_SUID_DROP, bash))
     124IF_CTTYHACK(APPLET(cttyhack, BB_DIR_BIN, BB_SUID_DROP))
     125IF_HUSH(APPLET(hush, BB_DIR_BIN, BB_SUID_DROP))
     126IF_MSH(APPLET(msh, BB_DIR_BIN, BB_SUID_DROP))
     127IF_FEATURE_SH_IS_HUSH(APPLET_ODDNAME(sh, hush, BB_DIR_BIN, BB_SUID_DROP, sh))
     128IF_FEATURE_BASH_IS_HUSH(APPLET_ODDNAME(bash, hush, BB_DIR_BIN, BB_SUID_DROP, bash))
     129IF_BLOCKDEV(APPLET(blockdev, BB_DIR_SBIN, BB_SUID_DROP))
     130IF_MDEV(APPLET(mdev, BB_DIR_SBIN, BB_SUID_DROP))
     131IF_REV(APPLET(rev, BB_DIR_BIN, BB_SUID_DROP))
     132IF_TEST(APPLET_NOFORK([,  test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
     133IF_TEST(APPLET_NOFORK([[, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
     134IF_ACPID(APPLET(acpid, BB_DIR_SBIN, BB_SUID_DROP))
     135IF_ADDGROUP(APPLET(addgroup, BB_DIR_USR_SBIN, BB_SUID_DROP))
     136IF_ADDUSER(APPLET(adduser, BB_DIR_USR_SBIN, BB_SUID_DROP))
     137IF_ADJTIMEX(APPLET(adjtimex, BB_DIR_SBIN, BB_SUID_DROP))
     138IF_AR(APPLET(ar, BB_DIR_USR_BIN, BB_SUID_DROP))
     139IF_ARP(APPLET(arp, BB_DIR_SBIN, BB_SUID_DROP))
     140IF_ARPING(APPLET(arping, BB_DIR_USR_SBIN, BB_SUID_DROP))
     141IF_AWK(APPLET_NOEXEC(awk, awk, BB_DIR_USR_BIN, BB_SUID_DROP, awk))
     142IF_BASENAME(APPLET_NOFORK(basename, basename, BB_DIR_USR_BIN, BB_SUID_DROP, basename))
     143IF_BBCONFIG(APPLET(bbconfig, BB_DIR_BIN, BB_SUID_DROP))
     144IF_BEEP(APPLET(beep, BB_DIR_USR_BIN, BB_SUID_DROP))
     145IF_BLKID(APPLET(blkid, BB_DIR_SBIN, BB_SUID_DROP))
     146IF_BRCTL(APPLET(brctl, BB_DIR_USR_SBIN, BB_SUID_DROP))
     147IF_BZIP2(APPLET(bzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
     148IF_CAL(APPLET(cal, BB_DIR_USR_BIN, BB_SUID_DROP))
     149IF_CAT(APPLET_NOFORK(cat, cat, BB_DIR_BIN, BB_SUID_DROP, cat))
     150IF_CATV(APPLET(catv, BB_DIR_BIN, BB_SUID_DROP))
     151IF_CHAT(APPLET(chat, BB_DIR_USR_SBIN, BB_SUID_DROP))
     152IF_CHATTR(APPLET(chattr, BB_DIR_BIN, BB_SUID_DROP))
     153IF_CHCON(APPLET(chcon, BB_DIR_USR_BIN, BB_SUID_DROP))
     154IF_CHGRP(APPLET_NOEXEC(chgrp, chgrp, BB_DIR_BIN, BB_SUID_DROP, chgrp))
     155IF_CHMOD(APPLET_NOEXEC(chmod, chmod, BB_DIR_BIN, BB_SUID_DROP, chmod))
     156IF_CHOWN(APPLET_NOEXEC(chown, chown, BB_DIR_BIN, BB_SUID_DROP, chown))
     157IF_CHPASSWD(APPLET(chpasswd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     158IF_CHPST(APPLET(chpst, BB_DIR_USR_BIN, BB_SUID_DROP))
     159IF_CHROOT(APPLET(chroot, BB_DIR_USR_SBIN, BB_SUID_DROP))
     160IF_CHRT(APPLET(chrt, BB_DIR_USR_BIN, BB_SUID_DROP))
     161IF_CHVT(APPLET(chvt, BB_DIR_USR_BIN, BB_SUID_DROP))
     162IF_CKSUM(APPLET_NOEXEC(cksum, cksum, BB_DIR_USR_BIN, BB_SUID_DROP, cksum))
     163IF_CLEAR(APPLET(clear, BB_DIR_USR_BIN, BB_SUID_DROP))
     164IF_CMP(APPLET(cmp, BB_DIR_USR_BIN, BB_SUID_DROP))
     165IF_COMM(APPLET(comm, BB_DIR_USR_BIN, BB_SUID_DROP))
     166IF_CP(APPLET_NOEXEC(cp, cp, BB_DIR_BIN, BB_SUID_DROP, cp))
     167IF_CPIO(APPLET(cpio, BB_DIR_BIN, BB_SUID_DROP))
     168IF_CROND(APPLET(crond, BB_DIR_USR_SBIN, BB_SUID_DROP))
     169/* Needs to be run by root or be suid root - needs to change /var/spool/cron* files: */
     170IF_CRONTAB(APPLET(crontab, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
     171IF_CRYPTPW(APPLET(cryptpw, BB_DIR_USR_BIN, BB_SUID_DROP))
     172IF_CUT(APPLET_NOEXEC(cut, cut, BB_DIR_USR_BIN, BB_SUID_DROP, cut))
     173IF_DC(APPLET(dc, BB_DIR_USR_BIN, BB_SUID_DROP))
     174IF_DD(APPLET_NOEXEC(dd, dd, BB_DIR_BIN, BB_SUID_DROP, dd))
     175IF_DEALLOCVT(APPLET(deallocvt, BB_DIR_USR_BIN, BB_SUID_DROP))
     176IF_DELGROUP(APPLET_ODDNAME(delgroup, deluser, BB_DIR_USR_SBIN, BB_SUID_DROP, delgroup))
     177IF_DELUSER(APPLET(deluser, BB_DIR_USR_SBIN, BB_SUID_DROP))
     178IF_DEVFSD(APPLET(devfsd, BB_DIR_SBIN, BB_SUID_DROP))
     179IF_DEVMEM(APPLET(devmem, BB_DIR_SBIN, BB_SUID_DROP))
     180IF_DF(APPLET(df, BB_DIR_BIN, BB_SUID_DROP))
     181IF_DHCPRELAY(APPLET(dhcprelay, BB_DIR_USR_SBIN, BB_SUID_DROP))
     182IF_DIFF(APPLET(diff, BB_DIR_USR_BIN, BB_SUID_DROP))
     183IF_DIRNAME(APPLET_NOFORK(dirname, dirname, BB_DIR_USR_BIN, BB_SUID_DROP, dirname))
     184IF_DMESG(APPLET(dmesg, BB_DIR_BIN, BB_SUID_DROP))
     185IF_DNSD(APPLET(dnsd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     186IF_HOSTNAME(APPLET_ODDNAME(dnsdomainname, hostname, BB_DIR_BIN, BB_SUID_DROP, dnsdomainname))
     187IF_DOS2UNIX(APPLET_NOEXEC(dos2unix, dos2unix, BB_DIR_USR_BIN, BB_SUID_DROP, dos2unix))
     188IF_DPKG(APPLET(dpkg, BB_DIR_USR_BIN, BB_SUID_DROP))
     189IF_DPKG_DEB(APPLET_ODDNAME(dpkg-deb, dpkg_deb, BB_DIR_USR_BIN, BB_SUID_DROP, dpkg_deb))
     190IF_DU(APPLET(du, BB_DIR_USR_BIN, BB_SUID_DROP))
     191IF_DUMPKMAP(APPLET(dumpkmap, BB_DIR_BIN, BB_SUID_DROP))
     192IF_DUMPLEASES(APPLET(dumpleases, BB_DIR_USR_BIN, BB_SUID_DROP))
     193//IF_E2FSCK(APPLET(e2fsck, BB_DIR_SBIN, BB_SUID_DROP))
     194//IF_E2LABEL(APPLET_ODDNAME(e2label, tune2fs, BB_DIR_SBIN, BB_SUID_DROP, e2label))
     195IF_ECHO(APPLET_NOFORK(echo, echo, BB_DIR_BIN, BB_SUID_DROP, echo))
     196IF_ED(APPLET(ed, BB_DIR_BIN, BB_SUID_DROP))
     197IF_EJECT(APPLET(eject, BB_DIR_USR_BIN, BB_SUID_DROP))
     198IF_ENV(APPLET_NOEXEC(env, env, BB_DIR_USR_BIN, BB_SUID_DROP, env))
     199IF_ENVDIR(APPLET_ODDNAME(envdir, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, envdir))
     200IF_ENVUIDGID(APPLET_ODDNAME(envuidgid, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, envuidgid))
     201IF_ETHER_WAKE(APPLET_ODDNAME(ether-wake, ether_wake, BB_DIR_USR_SBIN, BB_SUID_DROP, ether_wake))
     202IF_EXPAND(APPLET(expand, BB_DIR_USR_BIN, BB_SUID_DROP))
     203IF_EXPR(APPLET(expr, BB_DIR_USR_BIN, BB_SUID_DROP))
     204IF_FAKEIDENTD(APPLET(fakeidentd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     205IF_FALSE(APPLET_NOFORK(false, false, BB_DIR_BIN, BB_SUID_DROP, false))
     206IF_FBSET(APPLET(fbset, BB_DIR_USR_SBIN, BB_SUID_DROP))
     207IF_FBSPLASH(APPLET(fbsplash, BB_DIR_SBIN, BB_SUID_DROP))
     208IF_FDFLUSH(APPLET_ODDNAME(fdflush, freeramdisk, BB_DIR_BIN, BB_SUID_DROP, fdflush))
     209IF_FDFORMAT(APPLET(fdformat, BB_DIR_USR_SBIN, BB_SUID_DROP))
     210IF_FDISK(APPLET(fdisk, BB_DIR_SBIN, BB_SUID_DROP))
     211IF_FGCONSOLE(APPLET(fgconsole, BB_DIR_USR_BIN, BB_SUID_DROP))
     212/* Benefits from suid root: better access to /dev/BLOCKDEVs: */
     213IF_FINDFS(APPLET(findfs, BB_DIR_SBIN, BB_SUID_MAYBE))
     214IF_FLASH_ERASEALL(APPLET(flash_eraseall, BB_DIR_USR_SBIN, BB_SUID_DROP))
     215IF_FLASH_LOCK(APPLET_ODDNAME(flash_lock, flash_lock_unlock, BB_DIR_USR_SBIN, BB_SUID_DROP, flash_lock))
     216IF_FLASH_UNLOCK(APPLET_ODDNAME(flash_unlock, flash_lock_unlock, BB_DIR_USR_SBIN, BB_SUID_DROP, flash_unlock))
     217IF_FLASHCP(APPLET(flashcp, BB_DIR_USR_SBIN, BB_SUID_DROP))
     218IF_FLOCK(APPLET(flock, BB_DIR_USR_BIN, BB_SUID_DROP))
     219IF_FOLD(APPLET_NOEXEC(fold, fold, BB_DIR_USR_BIN, BB_SUID_DROP, fold))
     220IF_FREE(APPLET(free, BB_DIR_USR_BIN, BB_SUID_DROP))
     221IF_FREERAMDISK(APPLET(freeramdisk, BB_DIR_SBIN, BB_SUID_DROP))
     222IF_FSCK(APPLET(fsck, BB_DIR_SBIN, BB_SUID_DROP))
     223//IF_E2FSCK(APPLET_ODDNAME(fsck.ext2, e2fsck, BB_DIR_SBIN, BB_SUID_DROP, fsck_ext2))
     224//IF_E2FSCK(APPLET_ODDNAME(fsck.ext3, e2fsck, BB_DIR_SBIN, BB_SUID_DROP, fsck_ext3))
     225IF_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, BB_DIR_SBIN, BB_SUID_DROP, fsck_minix))
     226IF_FSYNC(APPLET_NOFORK(fsync, fsync, BB_DIR_BIN, BB_SUID_DROP, fsync))
     227IF_FTPD(APPLET(ftpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     228IF_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpget))
     229IF_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpput))
     230IF_FUSER(APPLET(fuser, BB_DIR_USR_BIN, BB_SUID_DROP))
     231IF_GETENFORCE(APPLET(getenforce, BB_DIR_USR_SBIN, BB_SUID_DROP))
     232IF_GETOPT(APPLET(getopt, BB_DIR_BIN, BB_SUID_DROP))
     233IF_GETSEBOOL(APPLET(getsebool, BB_DIR_USR_SBIN, BB_SUID_DROP))
     234IF_GETTY(APPLET(getty, BB_DIR_SBIN, BB_SUID_DROP))
     235IF_GUNZIP(APPLET(gunzip, BB_DIR_BIN, BB_SUID_DROP))
     236IF_GZIP(APPLET(gzip, BB_DIR_BIN, BB_SUID_DROP))
     237IF_HD(APPLET_NOEXEC(hd, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hd))
     238IF_HDPARM(APPLET(hdparm, BB_DIR_SBIN, BB_SUID_DROP))
     239IF_HEAD(APPLET_NOEXEC(head, head, BB_DIR_USR_BIN, BB_SUID_DROP, head))
     240IF_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hexdump))
     241IF_HOSTNAME(APPLET(hostname, BB_DIR_BIN, BB_SUID_DROP))
     242IF_HTTPD(APPLET(httpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     243IF_HWCLOCK(APPLET(hwclock, BB_DIR_SBIN, BB_SUID_DROP))
     244IF_IFCONFIG(APPLET(ifconfig, BB_DIR_SBIN, BB_SUID_DROP))
     245IF_IFUPDOWN(APPLET_ODDNAME(ifdown, ifupdown, BB_DIR_SBIN, BB_SUID_DROP, ifdown))
     246IF_IFENSLAVE(APPLET(ifenslave, BB_DIR_SBIN, BB_SUID_DROP))
     247IF_IFPLUGD(APPLET(ifplugd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     248IF_IFUPDOWN(APPLET_ODDNAME(ifup, ifupdown, BB_DIR_SBIN, BB_SUID_DROP, ifup))
     249IF_INETD(APPLET(inetd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     250IF_INOTIFYD(APPLET(inotifyd, BB_DIR_SBIN, BB_SUID_DROP))
     251IF_INSTALL(APPLET(install, BB_DIR_USR_BIN, BB_SUID_DROP))
     252IF_IONICE(APPLET(ionice, BB_DIR_BIN, BB_SUID_DROP))
    238253#if ENABLE_FEATURE_IP_ADDRESS \
    239254 || ENABLE_FEATURE_IP_ROUTE \
     
    241256 || ENABLE_FEATURE_IP_TUNNEL \
    242257 || ENABLE_FEATURE_IP_RULE
    243 IF_IP(APPLET(ip, _BB_DIR_BIN, _BB_SUID_DROP))
     258IF_IP(APPLET(ip, BB_DIR_SBIN, BB_SUID_DROP))
    244259#endif
    245 IF_IPADDR(APPLET(ipaddr, _BB_DIR_BIN, _BB_SUID_DROP))
    246 IF_IPCALC(APPLET(ipcalc, _BB_DIR_BIN, _BB_SUID_DROP))
    247 IF_IPCRM(APPLET(ipcrm, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    248 IF_IPCS(APPLET(ipcs, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    249 IF_IPLINK(APPLET(iplink, _BB_DIR_BIN, _BB_SUID_DROP))
    250 IF_IPROUTE(APPLET(iproute, _BB_DIR_BIN, _BB_SUID_DROP))
    251 IF_IPRULE(APPLET(iprule, _BB_DIR_BIN, _BB_SUID_DROP))
    252 IF_IPTUNNEL(APPLET(iptunnel, _BB_DIR_BIN, _BB_SUID_DROP))
    253 IF_KBD_MODE(APPLET(kbd_mode, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    254 IF_KILL(APPLET(kill, _BB_DIR_BIN, _BB_SUID_DROP))
    255 IF_KILLALL(APPLET_ODDNAME(killall, kill, _BB_DIR_USR_BIN, _BB_SUID_DROP, killall))
    256 IF_KILLALL5(APPLET_ODDNAME(killall5, kill, _BB_DIR_USR_BIN, _BB_SUID_DROP, killall5))
    257 IF_KLOGD(APPLET(klogd, _BB_DIR_SBIN, _BB_SUID_DROP))
    258 IF_LAST(APPLET(last, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    259 IF_LENGTH(APPLET_NOFORK(length, length, _BB_DIR_USR_BIN, _BB_SUID_DROP, length))
    260 IF_LESS(APPLET(less, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    261 IF_SETARCH(APPLET_ODDNAME(linux32, setarch, _BB_DIR_BIN, _BB_SUID_DROP, linux32))
    262 IF_SETARCH(APPLET_ODDNAME(linux64, setarch, _BB_DIR_BIN, _BB_SUID_DROP, linux64))
    263 IF_LN(APPLET_NOEXEC(ln, ln, _BB_DIR_BIN, _BB_SUID_DROP, ln))
    264 IF_LOAD_POLICY(APPLET(load_policy, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    265 IF_LOADFONT(APPLET(loadfont, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    266 IF_LOADKMAP(APPLET(loadkmap, _BB_DIR_SBIN, _BB_SUID_DROP))
    267 IF_LOGGER(APPLET(logger, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    268 IF_LOGIN(APPLET(login, _BB_DIR_BIN, _BB_SUID_REQUIRE))
    269 IF_LOGNAME(APPLET_NOFORK(logname, logname, _BB_DIR_USR_BIN, _BB_SUID_DROP, logname))
    270 IF_LOGREAD(APPLET(logread, _BB_DIR_SBIN, _BB_SUID_DROP))
    271 IF_LOSETUP(APPLET(losetup, _BB_DIR_SBIN, _BB_SUID_DROP))
    272 IF_LPD(APPLET(lpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    273 IF_LPQ(APPLET_ODDNAME(lpq, lpqr, _BB_DIR_USR_BIN, _BB_SUID_DROP, lpq))
    274 IF_LPR(APPLET_ODDNAME(lpr, lpqr, _BB_DIR_USR_BIN, _BB_SUID_DROP, lpr))
    275 IF_LS(APPLET_NOEXEC(ls, ls, _BB_DIR_BIN, _BB_SUID_DROP, ls))
    276 IF_LSATTR(APPLET(lsattr, _BB_DIR_BIN, _BB_SUID_DROP))
    277 IF_LSPCI(APPLET(lspci, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    278 IF_LSUSB(APPLET(lsusb, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    279 IF_UNLZMA(APPLET_ODDNAME(lzcat, unlzma, _BB_DIR_USR_BIN, _BB_SUID_DROP, lzcat))
    280 IF_LZMA(APPLET_ODDNAME(lzma, unlzma, _BB_DIR_USR_BIN, _BB_SUID_DROP, lzma))
    281 IF_LZOP(APPLET(lzop, _BB_DIR_BIN, _BB_SUID_DROP))
    282 IF_LZOP(APPLET_ODDNAME(lzopcat, lzop, _BB_DIR_USR_BIN, _BB_SUID_DROP, lzopcat))
    283 IF_MAKEDEVS(APPLET(makedevs, _BB_DIR_SBIN, _BB_SUID_DROP))
    284 IF_MAKEMIME(APPLET(makemime, _BB_DIR_BIN, _BB_SUID_DROP))
    285 IF_MAN(APPLET(man, _BB_DIR_SBIN, _BB_SUID_DROP))
    286 IF_MATCHPATHCON(APPLET(matchpathcon, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    287 IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, md5sum))
    288 IF_MDEV(APPLET(mdev, _BB_DIR_SBIN, _BB_SUID_DROP))
    289 IF_MICROCOM(APPLET(microcom, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    290 IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, _BB_DIR_BIN, _BB_SUID_DROP, mkdir))
    291 IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_vfat))
    292 IF_MKFS_EXT2(APPLET_ODDNAME(mke2fs, mkfs_ext2, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext2))
    293 IF_MKFIFO(APPLET_NOEXEC(mkfifo, mkfifo, _BB_DIR_USR_BIN, _BB_SUID_DROP, mkfifo))
    294 IF_MKFS_EXT2(APPLET_ODDNAME(mkfs.ext2, mkfs_ext2, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext2))
    295 //IF_MKE2FS(APPLET_ODDNAME(mkfs.ext3, mke2fs, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext3))
    296 IF_MKFS_MINIX(APPLET_ODDNAME(mkfs.minix, mkfs_minix, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_minix))
    297 IF_MKFS_REISER(APPLET_ODDNAME(mkfs.reiser, mkfs_reiser, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_reiser))
    298 IF_MKFS_VFAT(APPLET_ODDNAME(mkfs.vfat, mkfs_vfat, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_vfat))
    299 IF_MKNOD(APPLET_NOEXEC(mknod, mknod, _BB_DIR_BIN, _BB_SUID_DROP, mknod))
    300 IF_CRYPTPW(APPLET_ODDNAME(mkpasswd, cryptpw, _BB_DIR_USR_BIN, _BB_SUID_DROP, mkpasswd))
    301 IF_MKSWAP(APPLET(mkswap, _BB_DIR_SBIN, _BB_SUID_DROP))
    302 IF_MKTEMP(APPLET(mktemp, _BB_DIR_BIN, _BB_SUID_DROP))
    303 IF_MORE(APPLET(more, _BB_DIR_BIN, _BB_SUID_DROP))
    304 IF_MOUNT(APPLET(mount, _BB_DIR_BIN, IF_DESKTOP(_BB_SUID_MAYBE) IF_NOT_DESKTOP(_BB_SUID_DROP)))
    305 IF_MOUNTPOINT(APPLET(mountpoint, _BB_DIR_BIN, _BB_SUID_DROP))
    306 IF_MT(APPLET(mt, _BB_DIR_BIN, _BB_SUID_DROP))
    307 IF_MV(APPLET(mv, _BB_DIR_BIN, _BB_SUID_DROP))
    308 IF_NAMEIF(APPLET(nameif, _BB_DIR_SBIN, _BB_SUID_DROP))
    309 IF_NC(APPLET(nc, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    310 IF_NETSTAT(APPLET(netstat, _BB_DIR_BIN, _BB_SUID_DROP))
    311 IF_NICE(APPLET(nice, _BB_DIR_BIN, _BB_SUID_DROP))
    312 IF_NMETER(APPLET(nmeter, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    313 IF_NOHUP(APPLET(nohup, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    314 IF_NSLOOKUP(APPLET(nslookup, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    315 IF_NTPD(APPLET(ntpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    316 IF_OD(APPLET(od, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    317 IF_OPENVT(APPLET(openvt, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    318 //IF_PARSE(APPLET(parse, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    319 IF_PASSWD(APPLET(passwd, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    320 IF_PGREP(APPLET(pgrep, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    321 IF_PIDOF(APPLET(pidof, _BB_DIR_BIN, _BB_SUID_DROP))
    322 IF_PING(APPLET(ping, _BB_DIR_BIN, _BB_SUID_MAYBE))
    323 IF_PING6(APPLET(ping6, _BB_DIR_BIN, _BB_SUID_MAYBE))
    324 IF_PIPE_PROGRESS(APPLET(pipe_progress, _BB_DIR_BIN, _BB_SUID_DROP))
    325 IF_PIVOT_ROOT(APPLET(pivot_root, _BB_DIR_SBIN, _BB_SUID_DROP))
    326 IF_PKILL(APPLET_ODDNAME(pkill, pgrep, _BB_DIR_USR_BIN, _BB_SUID_DROP, pkill))
    327 IF_POPMAILDIR(APPLET(popmaildir, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    328 IF_PRINTENV(APPLET_NOFORK(printenv, printenv, _BB_DIR_BIN, _BB_SUID_DROP, printenv))
    329 IF_PRINTF(APPLET_NOFORK(printf, printf, _BB_DIR_USR_BIN, _BB_SUID_DROP, printf))
    330 IF_PS(APPLET(ps, _BB_DIR_BIN, _BB_SUID_DROP))
    331 IF_PSCAN(APPLET(pscan, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    332 IF_PWD(APPLET_NOFORK(pwd, pwd, _BB_DIR_BIN, _BB_SUID_DROP, pwd))
    333 IF_RAIDAUTORUN(APPLET(raidautorun, _BB_DIR_SBIN, _BB_SUID_DROP))
    334 IF_RDATE(APPLET(rdate, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    335 IF_RDEV(APPLET(rdev, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    336 IF_READAHEAD(APPLET(readahead, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    337 IF_READLINK(APPLET(readlink, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    338 IF_READPROFILE(APPLET(readprofile, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    339 IF_REALPATH(APPLET(realpath, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    340 IF_REFORMIME(APPLET(reformime, _BB_DIR_BIN, _BB_SUID_DROP))
    341 IF_RENICE(APPLET(renice, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    342 IF_RESET(APPLET(reset, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    343 IF_RESIZE(APPLET(resize, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    344 IF_RESTORECON(APPLET_ODDNAME(restorecon, setfiles, _BB_DIR_SBIN, _BB_SUID_DROP, restorecon))
    345 IF_RFKILL(APPLET(rfkill, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    346 IF_RM(APPLET_NOFORK(rm, rm, _BB_DIR_BIN, _BB_SUID_DROP, rm))
    347 IF_RMDIR(APPLET_NOFORK(rmdir, rmdir, _BB_DIR_BIN, _BB_SUID_DROP, rmdir))
    348 IF_ROUTE(APPLET(route, _BB_DIR_SBIN, _BB_SUID_DROP))
    349 IF_RPM(APPLET(rpm, _BB_DIR_BIN, _BB_SUID_DROP))
    350 IF_RPM2CPIO(APPLET(rpm2cpio, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    351 IF_RTCWAKE(APPLET(rtcwake, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    352 IF_RUN_PARTS(APPLET_ODDNAME(run-parts, run_parts, _BB_DIR_BIN, _BB_SUID_DROP, run_parts))
    353 IF_RUNCON(APPLET(runcon, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    354 IF_RUNLEVEL(APPLET(runlevel, _BB_DIR_SBIN, _BB_SUID_DROP))
    355 IF_RUNSV(APPLET(runsv, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    356 IF_RUNSVDIR(APPLET(runsvdir, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    357 IF_RX(APPLET(rx, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    358 IF_SCRIPT(APPLET(script, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    359 IF_SCRIPTREPLAY(APPLET(scriptreplay, _BB_DIR_BIN, _BB_SUID_DROP))
    360 IF_SED(APPLET(sed, _BB_DIR_BIN, _BB_SUID_DROP))
    361 IF_SELINUXENABLED(APPLET(selinuxenabled, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    362 IF_SENDMAIL(APPLET(sendmail, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    363 IF_SEQ(APPLET_NOFORK(seq, seq, _BB_DIR_USR_BIN, _BB_SUID_DROP, seq))
    364 IF_SESTATUS(APPLET(sestatus, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    365 IF_SETARCH(APPLET(setarch, _BB_DIR_BIN, _BB_SUID_DROP))
    366 IF_SETCONSOLE(APPLET(setconsole, _BB_DIR_SBIN, _BB_SUID_DROP))
    367 IF_SETENFORCE(APPLET(setenforce, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    368 IF_SETFILES(APPLET(setfiles, _BB_DIR_SBIN, _BB_SUID_DROP))
    369 IF_SETFONT(APPLET(setfont, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    370 IF_SETKEYCODES(APPLET(setkeycodes, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    371 IF_SETLOGCONS(APPLET(setlogcons, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    372 IF_SETSEBOOL(APPLET(setsebool, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    373 IF_SETSID(APPLET(setsid, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    374 IF_SETUIDGID(APPLET_ODDNAME(setuidgid, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, setuidgid))
    375 IF_SHA1SUM(APPLET_NOEXEC(sha1sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha1sum))
    376 IF_SHA256SUM(APPLET_NOEXEC(sha256sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha256sum))
    377 IF_SHA512SUM(APPLET_NOEXEC(sha512sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha512sum))
    378 IF_SHOWKEY(APPLET(showkey, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    379 IF_SLATTACH(APPLET(slattach, _BB_DIR_SBIN, _BB_SUID_DROP))
    380 /* Do not make this applet NOFORK. It breaks ^C-ing of pauses in shells */
    381 IF_SLEEP(APPLET(sleep, _BB_DIR_BIN, _BB_SUID_DROP))
    382 IF_SOFTLIMIT(APPLET_ODDNAME(softlimit, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, softlimit))
    383 IF_SORT(APPLET_NOEXEC(sort, sort, _BB_DIR_USR_BIN, _BB_SUID_DROP, sort))
    384 IF_SPLIT(APPLET(split, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    385 IF_START_STOP_DAEMON(APPLET_ODDNAME(start-stop-daemon, start_stop_daemon, _BB_DIR_SBIN, _BB_SUID_DROP, start_stop_daemon))
    386 IF_STAT(APPLET(stat, _BB_DIR_BIN, _BB_SUID_DROP))
    387 IF_STRINGS(APPLET(strings, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    388 IF_STTY(APPLET(stty, _BB_DIR_BIN, _BB_SUID_DROP))
    389 IF_SU(APPLET(su, _BB_DIR_BIN, _BB_SUID_REQUIRE))
    390 IF_SULOGIN(APPLET(sulogin, _BB_DIR_SBIN, _BB_SUID_DROP))
    391 IF_SUM(APPLET(sum, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    392 IF_SV(APPLET(sv, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    393 IF_SVLOGD(APPLET(svlogd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    394 IF_SWAPONOFF(APPLET_ODDNAME(swapoff, swap_on_off, _BB_DIR_SBIN, _BB_SUID_DROP, swapoff))
    395 IF_SWAPONOFF(APPLET_ODDNAME(swapon, swap_on_off, _BB_DIR_SBIN, _BB_SUID_DROP, swapon))
    396 IF_SWITCH_ROOT(APPLET(switch_root, _BB_DIR_SBIN, _BB_SUID_DROP))
    397 IF_SYNC(APPLET_NOFORK(sync, sync, _BB_DIR_BIN, _BB_SUID_DROP, sync))
    398 IF_BB_SYSCTL(APPLET(sysctl, _BB_DIR_SBIN, _BB_SUID_DROP))
    399 IF_SYSLOGD(APPLET(syslogd, _BB_DIR_SBIN, _BB_SUID_DROP))
    400 IF_TAC(APPLET_NOEXEC(tac, tac, _BB_DIR_USR_BIN, _BB_SUID_DROP, tac))
    401 IF_TAIL(APPLET(tail, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    402 IF_TAR(APPLET(tar, _BB_DIR_BIN, _BB_SUID_DROP))
    403 IF_TASKSET(APPLET(taskset, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    404 /* IF_TC(APPLET(tc, _BB_DIR_SBIN, _BB_SUID_DROP)) */
    405 IF_TCPSVD(APPLET_ODDNAME(tcpsvd, tcpudpsvd, _BB_DIR_USR_BIN, _BB_SUID_DROP, tcpsvd))
    406 IF_TEE(APPLET(tee, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    407 IF_TELNET(APPLET(telnet, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    408 IF_TELNETD(APPLET(telnetd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    409 IF_TEST(APPLET_NOFORK(test, test, _BB_DIR_USR_BIN, _BB_SUID_DROP, test))
     260IF_IPADDR(APPLET(ipaddr, BB_DIR_SBIN, BB_SUID_DROP))
     261IF_IPCALC(APPLET(ipcalc, BB_DIR_BIN, BB_SUID_DROP))
     262IF_IPCRM(APPLET(ipcrm, BB_DIR_USR_BIN, BB_SUID_DROP))
     263IF_IPCS(APPLET(ipcs, BB_DIR_USR_BIN, BB_SUID_DROP))
     264IF_IPLINK(APPLET(iplink, BB_DIR_SBIN, BB_SUID_DROP))
     265IF_IPROUTE(APPLET(iproute, BB_DIR_SBIN, BB_SUID_DROP))
     266IF_IPRULE(APPLET(iprule, BB_DIR_SBIN, BB_SUID_DROP))
     267IF_IPTUNNEL(APPLET(iptunnel, BB_DIR_SBIN, BB_SUID_DROP))
     268IF_KBD_MODE(APPLET(kbd_mode, BB_DIR_BIN, BB_SUID_DROP))
     269IF_KILL(APPLET(kill, BB_DIR_BIN, BB_SUID_DROP))
     270IF_KILLALL(APPLET_ODDNAME(killall, kill, BB_DIR_USR_BIN, BB_SUID_DROP, killall))
     271IF_KILLALL5(APPLET_ODDNAME(killall5, kill, BB_DIR_USR_SBIN, BB_SUID_DROP, killall5))
     272IF_KLOGD(APPLET(klogd, BB_DIR_SBIN, BB_SUID_DROP))
     273IF_LAST(APPLET(last, BB_DIR_USR_BIN, BB_SUID_DROP))
     274//IF_LENGTH(APPLET_NOFORK(length, length, BB_DIR_USR_BIN, BB_SUID_DROP, length))
     275IF_LESS(APPLET(less, BB_DIR_USR_BIN, BB_SUID_DROP))
     276IF_SETARCH(APPLET_ODDNAME(linux32, setarch, BB_DIR_BIN, BB_SUID_DROP, linux32))
     277IF_SETARCH(APPLET_ODDNAME(linux64, setarch, BB_DIR_BIN, BB_SUID_DROP, linux64))
     278IF_LN(APPLET_NOEXEC(ln, ln, BB_DIR_BIN, BB_SUID_DROP, ln))
     279IF_LOAD_POLICY(APPLET(load_policy, BB_DIR_USR_SBIN, BB_SUID_DROP))
     280IF_LOADFONT(APPLET(loadfont, BB_DIR_USR_SBIN, BB_SUID_DROP))
     281IF_LOADKMAP(APPLET(loadkmap, BB_DIR_SBIN, BB_SUID_DROP))
     282IF_LOGGER(APPLET(logger, BB_DIR_USR_BIN, BB_SUID_DROP))
     283/* Needs to be run by root or be suid root - needs to change uid and gid: */
     284IF_LOGIN(APPLET(login, BB_DIR_BIN, BB_SUID_REQUIRE))
     285IF_LOGNAME(APPLET_NOFORK(logname, logname, BB_DIR_USR_BIN, BB_SUID_DROP, logname))
     286IF_LOGREAD(APPLET(logread, BB_DIR_SBIN, BB_SUID_DROP))
     287IF_LOSETUP(APPLET(losetup, BB_DIR_SBIN, BB_SUID_DROP))
     288IF_LPD(APPLET(lpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     289IF_LPQ(APPLET_ODDNAME(lpq, lpqr, BB_DIR_USR_BIN, BB_SUID_DROP, lpq))
     290IF_LPR(APPLET_ODDNAME(lpr, lpqr, BB_DIR_USR_BIN, BB_SUID_DROP, lpr))
     291IF_LS(APPLET_NOEXEC(ls, ls, BB_DIR_BIN, BB_SUID_DROP, ls))
     292IF_LSATTR(APPLET(lsattr, BB_DIR_BIN, BB_SUID_DROP))
     293IF_LSPCI(APPLET(lspci, BB_DIR_USR_BIN, BB_SUID_DROP))
     294IF_LSUSB(APPLET(lsusb, BB_DIR_USR_BIN, BB_SUID_DROP))
     295IF_UNLZMA(APPLET_ODDNAME(lzcat, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzcat))
     296IF_LZMA(APPLET_ODDNAME(lzma, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzma))
     297IF_LZOP(APPLET(lzop, BB_DIR_BIN, BB_SUID_DROP))
     298IF_LZOP(APPLET_ODDNAME(lzopcat, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, lzopcat))
     299IF_MAKEDEVS(APPLET(makedevs, BB_DIR_SBIN, BB_SUID_DROP))
     300IF_MAKEMIME(APPLET(makemime, BB_DIR_BIN, BB_SUID_DROP))
     301IF_MAN(APPLET(man, BB_DIR_SBIN, BB_SUID_DROP))
     302IF_MATCHPATHCON(APPLET(matchpathcon, BB_DIR_USR_SBIN, BB_SUID_DROP))
     303IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, md5sum))
     304IF_MICROCOM(APPLET(microcom, BB_DIR_USR_BIN, BB_SUID_DROP))
     305IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, BB_DIR_BIN, BB_SUID_DROP, mkdir))
     306IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat))
     307IF_MKFS_EXT2(APPLET_ODDNAME(mke2fs, mkfs_ext2, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext2))
     308IF_MKFIFO(APPLET_NOEXEC(mkfifo, mkfifo, BB_DIR_USR_BIN, BB_SUID_DROP, mkfifo))
     309IF_MKFS_EXT2(APPLET_ODDNAME(mkfs.ext2, mkfs_ext2, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext2))
     310//IF_MKE2FS(APPLET_ODDNAME(mkfs.ext3, mke2fs, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext3))
     311IF_MKFS_MINIX(APPLET_ODDNAME(mkfs.minix, mkfs_minix, BB_DIR_SBIN, BB_SUID_DROP, mkfs_minix))
     312IF_MKFS_REISER(APPLET_ODDNAME(mkfs.reiser, mkfs_reiser, BB_DIR_SBIN, BB_SUID_DROP, mkfs_reiser))
     313IF_MKFS_VFAT(APPLET_ODDNAME(mkfs.vfat, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat))
     314IF_MKNOD(APPLET_NOEXEC(mknod, mknod, BB_DIR_BIN, BB_SUID_DROP, mknod))
     315IF_CRYPTPW(APPLET_ODDNAME(mkpasswd, cryptpw, BB_DIR_USR_BIN, BB_SUID_DROP, mkpasswd))
     316IF_MKSWAP(APPLET(mkswap, BB_DIR_SBIN, BB_SUID_DROP))
     317IF_MKTEMP(APPLET(mktemp, BB_DIR_BIN, BB_SUID_DROP))
     318IF_MORE(APPLET(more, BB_DIR_BIN, BB_SUID_DROP))
     319/* On full-blown systems, requires suid for user mounts.
     320 * But it's not unthinkable to have it available in non-suid flavor on some systems,
     321 * for viewing mount table.
     322 * Therefore we use BB_SUID_MAYBE instead of BB_SUID_REQUIRE: */
     323IF_MOUNT(APPLET(mount, BB_DIR_BIN, IF_DESKTOP(BB_SUID_MAYBE) IF_NOT_DESKTOP(BB_SUID_DROP)))
     324IF_MOUNTPOINT(APPLET(mountpoint, BB_DIR_BIN, BB_SUID_DROP))
     325IF_MT(APPLET(mt, BB_DIR_BIN, BB_SUID_DROP))
     326IF_MV(APPLET(mv, BB_DIR_BIN, BB_SUID_DROP))
     327IF_NAMEIF(APPLET(nameif, BB_DIR_SBIN, BB_SUID_DROP))
     328IF_NC(APPLET(nc, BB_DIR_USR_BIN, BB_SUID_DROP))
     329IF_NETSTAT(APPLET(netstat, BB_DIR_BIN, BB_SUID_DROP))
     330IF_NICE(APPLET(nice, BB_DIR_BIN, BB_SUID_DROP))
     331IF_NOHUP(APPLET(nohup, BB_DIR_USR_BIN, BB_SUID_DROP))
     332IF_NSLOOKUP(APPLET(nslookup, BB_DIR_USR_BIN, BB_SUID_DROP))
     333IF_NTPD(APPLET(ntpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     334IF_OD(APPLET(od, BB_DIR_USR_BIN, BB_SUID_DROP))
     335IF_OPENVT(APPLET(openvt, BB_DIR_USR_BIN, BB_SUID_DROP))
     336//IF_PARSE(APPLET(parse, BB_DIR_USR_BIN, BB_SUID_DROP))
     337/* Needs to be run by root or be suid root - needs to change /etc/{passwd,shadow}: */
     338IF_PASSWD(APPLET(passwd, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
     339IF_PGREP(APPLET(pgrep, BB_DIR_USR_BIN, BB_SUID_DROP))
     340IF_PIDOF(APPLET(pidof, BB_DIR_BIN, BB_SUID_DROP))
     341IF_PIPE_PROGRESS(APPLET(pipe_progress, BB_DIR_BIN, BB_SUID_DROP))
     342IF_PIVOT_ROOT(APPLET(pivot_root, BB_DIR_SBIN, BB_SUID_DROP))
     343IF_PKILL(APPLET_ODDNAME(pkill, pgrep, BB_DIR_USR_BIN, BB_SUID_DROP, pkill))
     344IF_POPMAILDIR(APPLET(popmaildir, BB_DIR_USR_SBIN, BB_SUID_DROP))
     345IF_PRINTENV(APPLET_NOFORK(printenv, printenv, BB_DIR_BIN, BB_SUID_DROP, printenv))
     346IF_PRINTF(APPLET_NOFORK(printf, printf, BB_DIR_USR_BIN, BB_SUID_DROP, printf))
     347IF_PS(APPLET(ps, BB_DIR_BIN, BB_SUID_DROP))
     348IF_PSCAN(APPLET(pscan, BB_DIR_USR_BIN, BB_SUID_DROP))
     349IF_PWD(APPLET_NOFORK(pwd, pwd, BB_DIR_BIN, BB_SUID_DROP, pwd))
     350IF_RAIDAUTORUN(APPLET(raidautorun, BB_DIR_SBIN, BB_SUID_DROP))
     351IF_RDATE(APPLET(rdate, BB_DIR_USR_SBIN, BB_SUID_DROP))
     352IF_RDEV(APPLET(rdev, BB_DIR_USR_SBIN, BB_SUID_DROP))
     353IF_READAHEAD(APPLET(readahead, BB_DIR_USR_SBIN, BB_SUID_DROP))
     354IF_READLINK(APPLET(readlink, BB_DIR_USR_BIN, BB_SUID_DROP))
     355IF_READPROFILE(APPLET(readprofile, BB_DIR_USR_SBIN, BB_SUID_DROP))
     356IF_REALPATH(APPLET(realpath, BB_DIR_USR_BIN, BB_SUID_DROP))
     357IF_REFORMIME(APPLET(reformime, BB_DIR_BIN, BB_SUID_DROP))
     358IF_RENICE(APPLET(renice, BB_DIR_USR_BIN, BB_SUID_DROP))
     359IF_RESET(APPLET(reset, BB_DIR_USR_BIN, BB_SUID_DROP))
     360IF_RESIZE(APPLET(resize, BB_DIR_USR_BIN, BB_SUID_DROP))
     361IF_RESTORECON(APPLET_ODDNAME(restorecon, setfiles, BB_DIR_SBIN, BB_SUID_DROP, restorecon))
     362IF_RFKILL(APPLET(rfkill, BB_DIR_USR_SBIN, BB_SUID_DROP))
     363IF_RM(APPLET_NOFORK(rm, rm, BB_DIR_BIN, BB_SUID_DROP, rm))
     364IF_RMDIR(APPLET_NOFORK(rmdir, rmdir, BB_DIR_BIN, BB_SUID_DROP, rmdir))
     365IF_ROUTE(APPLET(route, BB_DIR_SBIN, BB_SUID_DROP))
     366IF_RPM(APPLET(rpm, BB_DIR_BIN, BB_SUID_DROP))
     367IF_RPM2CPIO(APPLET(rpm2cpio, BB_DIR_USR_BIN, BB_SUID_DROP))
     368IF_RTCWAKE(APPLET(rtcwake, BB_DIR_USR_SBIN, BB_SUID_DROP))
     369IF_RUN_PARTS(APPLET_ODDNAME(run-parts, run_parts, BB_DIR_BIN, BB_SUID_DROP, run_parts))
     370IF_RUNCON(APPLET(runcon, BB_DIR_USR_BIN, BB_SUID_DROP))
     371IF_RUNLEVEL(APPLET(runlevel, BB_DIR_SBIN, BB_SUID_DROP))
     372IF_RUNSV(APPLET(runsv, BB_DIR_USR_BIN, BB_SUID_DROP))
     373IF_RUNSVDIR(APPLET(runsvdir, BB_DIR_USR_BIN, BB_SUID_DROP))
     374IF_RX(APPLET(rx, BB_DIR_USR_BIN, BB_SUID_DROP))
     375IF_SCRIPT(APPLET(script, BB_DIR_USR_BIN, BB_SUID_DROP))
     376IF_SCRIPTREPLAY(APPLET(scriptreplay, BB_DIR_BIN, BB_SUID_DROP))
     377IF_SED(APPLET(sed, BB_DIR_BIN, BB_SUID_DROP))
     378IF_SELINUXENABLED(APPLET(selinuxenabled, BB_DIR_USR_SBIN, BB_SUID_DROP))
     379IF_SENDMAIL(APPLET(sendmail, BB_DIR_USR_SBIN, BB_SUID_DROP))
     380IF_SEQ(APPLET_NOFORK(seq, seq, BB_DIR_USR_BIN, BB_SUID_DROP, seq))
     381IF_SESTATUS(APPLET(sestatus, BB_DIR_USR_SBIN, BB_SUID_DROP))
     382IF_SETARCH(APPLET(setarch, BB_DIR_BIN, BB_SUID_DROP))
     383IF_SETCONSOLE(APPLET(setconsole, BB_DIR_SBIN, BB_SUID_DROP))
     384IF_SETENFORCE(APPLET(setenforce, BB_DIR_USR_SBIN, BB_SUID_DROP))
     385IF_SETFILES(APPLET(setfiles, BB_DIR_SBIN, BB_SUID_DROP))
     386IF_SETFONT(APPLET(setfont, BB_DIR_USR_SBIN, BB_SUID_DROP))
     387IF_SETKEYCODES(APPLET(setkeycodes, BB_DIR_USR_BIN, BB_SUID_DROP))
     388IF_SETLOGCONS(APPLET(setlogcons, BB_DIR_USR_SBIN, BB_SUID_DROP))
     389IF_SETSEBOOL(APPLET(setsebool, BB_DIR_USR_SBIN, BB_SUID_DROP))
     390IF_SETSID(APPLET(setsid, BB_DIR_USR_BIN, BB_SUID_DROP))
     391IF_SETUIDGID(APPLET_ODDNAME(setuidgid, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, setuidgid))
     392IF_SHA1SUM(APPLET_NOEXEC(sha1sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha1sum))
     393IF_SHA3SUM(APPLET_NOEXEC(sha3sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha3sum))
     394IF_SHA256SUM(APPLET_NOEXEC(sha256sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha256sum))
     395IF_SHA512SUM(APPLET_NOEXEC(sha512sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha512sum))
     396IF_SHOWKEY(APPLET(showkey, BB_DIR_USR_BIN, BB_SUID_DROP))
     397IF_SLATTACH(APPLET(slattach, BB_DIR_SBIN, BB_SUID_DROP))
     398/* Do not make this applet NOFORK. It breaks ^C-ing of pauses in shells: */
     399IF_SLEEP(APPLET(sleep, BB_DIR_BIN, BB_SUID_DROP))
     400IF_SOFTLIMIT(APPLET_ODDNAME(softlimit, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, softlimit))
     401IF_SORT(APPLET_NOEXEC(sort, sort, BB_DIR_USR_BIN, BB_SUID_DROP, sort))
     402IF_SPLIT(APPLET(split, BB_DIR_USR_BIN, BB_SUID_DROP))
     403IF_START_STOP_DAEMON(APPLET_ODDNAME(start-stop-daemon, start_stop_daemon, BB_DIR_SBIN, BB_SUID_DROP, start_stop_daemon))
     404IF_STAT(APPLET(stat, BB_DIR_BIN, BB_SUID_DROP))
     405IF_STRINGS(APPLET(strings, BB_DIR_USR_BIN, BB_SUID_DROP))
     406IF_STTY(APPLET(stty, BB_DIR_BIN, BB_SUID_DROP))
     407/* Needs to be run by root or be suid root - needs to change uid and gid: */
     408IF_SU(APPLET(su, BB_DIR_BIN, BB_SUID_REQUIRE))
     409IF_SULOGIN(APPLET(sulogin, BB_DIR_SBIN, BB_SUID_DROP))
     410IF_SUM(APPLET(sum, BB_DIR_USR_BIN, BB_SUID_DROP))
     411IF_SV(APPLET(sv, BB_DIR_USR_BIN, BB_SUID_DROP))
     412IF_SVLOGD(APPLET(svlogd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     413IF_SWAPONOFF(APPLET_ODDNAME(swapoff, swap_on_off, BB_DIR_SBIN, BB_SUID_DROP, swapoff))
     414IF_SWAPONOFF(APPLET_ODDNAME(swapon, swap_on_off, BB_DIR_SBIN, BB_SUID_DROP, swapon))
     415IF_SWITCH_ROOT(APPLET(switch_root, BB_DIR_SBIN, BB_SUID_DROP))
     416IF_SYNC(APPLET_NOFORK(sync, sync, BB_DIR_BIN, BB_SUID_DROP, sync))
     417IF_BB_SYSCTL(APPLET(sysctl, BB_DIR_SBIN, BB_SUID_DROP))
     418IF_SYSLOGD(APPLET(syslogd, BB_DIR_SBIN, BB_SUID_DROP))
     419IF_TAC(APPLET_NOEXEC(tac, tac, BB_DIR_USR_BIN, BB_SUID_DROP, tac))
     420IF_TAIL(APPLET(tail, BB_DIR_USR_BIN, BB_SUID_DROP))
     421IF_TAR(APPLET(tar, BB_DIR_BIN, BB_SUID_DROP))
     422IF_TASKSET(APPLET(taskset, BB_DIR_USR_BIN, BB_SUID_DROP))
     423/* IF_TC(APPLET(tc, BB_DIR_SBIN, BB_SUID_DROP)) */
     424IF_TCPSVD(APPLET_ODDNAME(tcpsvd, tcpudpsvd, BB_DIR_USR_BIN, BB_SUID_DROP, tcpsvd))
     425IF_TEE(APPLET(tee, BB_DIR_USR_BIN, BB_SUID_DROP))
     426IF_TELNET(APPLET(telnet, BB_DIR_USR_BIN, BB_SUID_DROP))
     427IF_TELNETD(APPLET(telnetd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     428IF_TEST(APPLET_NOFORK(test, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
    410429#if ENABLE_FEATURE_TFTP_GET || ENABLE_FEATURE_TFTP_PUT
    411 IF_TFTP(APPLET(tftp, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    412 IF_TFTPD(APPLET(tftpd, _BB_DIR_USR_BIN, _BB_SUID_DROP))
     430IF_TFTP(APPLET(tftp, BB_DIR_USR_BIN, BB_SUID_DROP))
     431IF_TFTPD(APPLET(tftpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
    413432#endif
    414 IF_TIME(APPLET(time, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    415 IF_TIMEOUT(APPLET(timeout, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    416 IF_TOP(APPLET(top, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    417 IF_TOUCH(APPLET_NOFORK(touch, touch, _BB_DIR_BIN, _BB_SUID_DROP, touch))
    418 IF_TR(APPLET(tr, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    419 IF_TRACEROUTE(APPLET(traceroute, _BB_DIR_USR_BIN, _BB_SUID_MAYBE))
    420 IF_TRACEROUTE6(APPLET(traceroute6, _BB_DIR_USR_BIN, _BB_SUID_MAYBE))
    421 IF_TRUE(APPLET_NOFORK(true, true, _BB_DIR_BIN, _BB_SUID_DROP, true))
    422 IF_TTY(APPLET(tty, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    423 IF_TTYSIZE(APPLET(ttysize, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    424 IF_TUNCTL(APPLET(tunctl, _BB_DIR_SBIN, _BB_SUID_DROP))
    425 IF_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP))
    426 IF_UDHCPC(APPLET(udhcpc, _BB_DIR_SBIN, _BB_SUID_DROP))
    427 IF_UDHCPD(APPLET(udhcpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    428 IF_UDPSVD(APPLET_ODDNAME(udpsvd, tcpudpsvd, _BB_DIR_USR_BIN, _BB_SUID_DROP, udpsvd))
    429 IF_UMOUNT(APPLET(umount, _BB_DIR_BIN, _BB_SUID_DROP))
    430 IF_UNAME(APPLET(uname, _BB_DIR_BIN, _BB_SUID_DROP))
    431 IF_UNCOMPRESS(APPLET(uncompress, _BB_DIR_BIN, _BB_SUID_DROP))
    432 IF_UNEXPAND(APPLET_ODDNAME(unexpand, expand, _BB_DIR_USR_BIN, _BB_SUID_DROP, unexpand))
    433 IF_UNIQ(APPLET(uniq, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    434 IF_UNIX2DOS(APPLET_NOEXEC(unix2dos, dos2unix, _BB_DIR_USR_BIN, _BB_SUID_DROP, unix2dos))
    435 IF_UNXZ(APPLET(unxz, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    436 IF_UNLZMA(APPLET(unlzma, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    437 IF_LZOP(APPLET_ODDNAME(unlzop, lzop, _BB_DIR_USR_BIN, _BB_SUID_DROP, unlzop))
    438 IF_UNZIP(APPLET(unzip, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    439 IF_UPTIME(APPLET(uptime, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    440 IF_USLEEP(APPLET_NOFORK(usleep, usleep, _BB_DIR_BIN, _BB_SUID_DROP, usleep))
    441 IF_UUDECODE(APPLET(uudecode, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    442 IF_UUENCODE(APPLET(uuencode, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    443 IF_VCONFIG(APPLET(vconfig, _BB_DIR_SBIN, _BB_SUID_DROP))
    444 IF_VI(APPLET(vi, _BB_DIR_BIN, _BB_SUID_DROP))
    445 IF_VLOCK(APPLET(vlock, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    446 IF_VOLNAME(APPLET(volname, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    447 IF_WALL(APPLET(wall, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    448 IF_WATCH(APPLET(watch, _BB_DIR_BIN, _BB_SUID_DROP))
    449 IF_WATCHDOG(APPLET(watchdog, _BB_DIR_SBIN, _BB_SUID_DROP))
    450 IF_WC(APPLET(wc, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    451 IF_WGET(APPLET(wget, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    452 IF_WHICH(APPLET(which, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    453 IF_WHO(APPLET(who, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    454 IF_WHOAMI(APPLET_NOFORK(whoami, whoami, _BB_DIR_USR_BIN, _BB_SUID_DROP, whoami))
    455 IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, _BB_DIR_USR_BIN, _BB_SUID_DROP, xzcat))
    456 IF_XZ(APPLET_ODDNAME(xz, unxz, _BB_DIR_USR_BIN, _BB_SUID_DROP, xz))
    457 IF_YES(APPLET_NOFORK(yes, yes, _BB_DIR_USR_BIN, _BB_SUID_DROP, yes))
    458 IF_GUNZIP(APPLET_ODDNAME(zcat, gunzip, _BB_DIR_BIN, _BB_SUID_DROP, zcat))
    459 IF_ZCIP(APPLET(zcip, _BB_DIR_SBIN, _BB_SUID_DROP))
     433IF_TIME(APPLET(time, BB_DIR_USR_BIN, BB_SUID_DROP))
     434IF_TIMEOUT(APPLET(timeout, BB_DIR_USR_BIN, BB_SUID_DROP))
     435IF_TOP(APPLET(top, BB_DIR_USR_BIN, BB_SUID_DROP))
     436IF_TR(APPLET(tr, BB_DIR_USR_BIN, BB_SUID_DROP))
     437/* Needs socket(AF_INET, SOCK_RAW, IPPROTO_ICMP), therefore BB_SUID_MAYBE: */
     438IF_TRACEROUTE(APPLET(traceroute, BB_DIR_USR_BIN, BB_SUID_MAYBE))
     439IF_TRACEROUTE6(APPLET(traceroute6, BB_DIR_USR_BIN, BB_SUID_MAYBE))
     440IF_TRUE(APPLET_NOFORK(true, true, BB_DIR_BIN, BB_SUID_DROP, true))
     441IF_TTY(APPLET(tty, BB_DIR_USR_BIN, BB_SUID_DROP))
     442IF_TTYSIZE(APPLET(ttysize, BB_DIR_USR_BIN, BB_SUID_DROP))
     443IF_TUNCTL(APPLET(tunctl, BB_DIR_SBIN, BB_SUID_DROP))
     444IF_TUNE2FS(APPLET(tune2fs, BB_DIR_SBIN, BB_SUID_DROP))
     445IF_UDHCPC(APPLET(udhcpc, BB_DIR_SBIN, BB_SUID_DROP))
     446IF_UDHCPD(APPLET(udhcpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     447IF_UDPSVD(APPLET_ODDNAME(udpsvd, tcpudpsvd, BB_DIR_USR_BIN, BB_SUID_DROP, udpsvd))
     448IF_UMOUNT(APPLET(umount, BB_DIR_BIN, BB_SUID_DROP))
     449IF_UNAME(APPLET(uname, BB_DIR_BIN, BB_SUID_DROP))
     450IF_UNCOMPRESS(APPLET(uncompress, BB_DIR_BIN, BB_SUID_DROP))
     451IF_UNEXPAND(APPLET_ODDNAME(unexpand, expand, BB_DIR_USR_BIN, BB_SUID_DROP, unexpand))
     452IF_UNIQ(APPLET(uniq, BB_DIR_USR_BIN, BB_SUID_DROP))
     453IF_UNIX2DOS(APPLET_NOEXEC(unix2dos, dos2unix, BB_DIR_USR_BIN, BB_SUID_DROP, unix2dos))
     454IF_UNXZ(APPLET(unxz, BB_DIR_USR_BIN, BB_SUID_DROP))
     455IF_UNLZMA(APPLET(unlzma, BB_DIR_USR_BIN, BB_SUID_DROP))
     456IF_LZOP(APPLET_ODDNAME(unlzop, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, unlzop))
     457IF_UNZIP(APPLET(unzip, BB_DIR_USR_BIN, BB_SUID_DROP))
     458IF_UPTIME(APPLET(uptime, BB_DIR_USR_BIN, BB_SUID_DROP))
     459IF_USLEEP(APPLET_NOFORK(usleep, usleep, BB_DIR_BIN, BB_SUID_DROP, usleep))
     460IF_UUDECODE(APPLET(uudecode, BB_DIR_USR_BIN, BB_SUID_DROP))
     461IF_UUENCODE(APPLET(uuencode, BB_DIR_USR_BIN, BB_SUID_DROP))
     462IF_VCONFIG(APPLET(vconfig, BB_DIR_SBIN, BB_SUID_DROP))
     463/* Needs to be run by root or be suid root - needs to change uid and gid: */
     464IF_VLOCK(APPLET(vlock, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
     465IF_VOLNAME(APPLET(volname, BB_DIR_USR_BIN, BB_SUID_DROP))
     466/* Needs to be run by root or be suid root - needs to write to /dev/TTY: */
     467IF_WALL(APPLET(wall, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
     468IF_WATCH(APPLET(watch, BB_DIR_BIN, BB_SUID_DROP))
     469IF_WATCHDOG(APPLET(watchdog, BB_DIR_SBIN, BB_SUID_DROP))
     470IF_WC(APPLET(wc, BB_DIR_USR_BIN, BB_SUID_DROP))
     471IF_WGET(APPLET(wget, BB_DIR_USR_BIN, BB_SUID_DROP))
     472IF_WHICH(APPLET(which, BB_DIR_USR_BIN, BB_SUID_DROP))
     473IF_WHOAMI(APPLET_NOFORK(whoami, whoami, BB_DIR_USR_BIN, BB_SUID_DROP, whoami))
     474IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xzcat))
     475IF_XZ(APPLET_ODDNAME(xz, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xz))
     476IF_YES(APPLET_NOFORK(yes, yes, BB_DIR_USR_BIN, BB_SUID_DROP, yes))
     477IF_GUNZIP(APPLET_ODDNAME(zcat, gunzip, BB_DIR_BIN, BB_SUID_DROP, zcat))
     478IF_ZCIP(APPLET(zcip, BB_DIR_SBIN, BB_SUID_DROP))
    460479
    461480#if !defined(PROTOTYPES) && !defined(NAME_MAIN_CNAME) && !defined(MAKE_USAGE)
  • branches/3.2/mindi-busybox/include/usage.h

    r2725 r3233  
    1414#define BB_USAGE_H 1
    1515
    16 
    1716#define NOUSAGE_STR "\b"
    1817
     18
     19#define ar_trivial_usage \
     20       "[-o] [-v] [-p] [-t] [-x] ARCHIVE FILES" \
     21
     22#define ar_full_usage "\n\n" \
     23       "Extract or list FILES from an ar archive\n" \
     24     "\n    -o  Preserve original dates" \
     25     "\n    -p  Extract to stdout" \
     26     "\n    -t  List" \
     27     "\n    -x  Extract" \
     28     "\n    -v  Verbose" \
     29
     30#define uncompress_trivial_usage \
     31       "[-cf] [FILE]..." \
     32
     33#define uncompress_full_usage "\n\n" \
     34       "Decompress .Z file[s]\n" \
     35     "\n    -c  Write to stdout" \
     36     "\n    -f  Overwrite" \
     37
     38#define gunzip_trivial_usage \
     39       "[-cft] [FILE]..." \
     40
     41#define gunzip_full_usage "\n\n" \
     42       "Decompress FILEs (or stdin)\n" \
     43     "\n    -c  Write to stdout" \
     44     "\n    -f  Force" \
     45     "\n    -t  Test file integrity" \
     46
     47#define gunzip_example_usage \
     48       "$ ls -la /tmp/BusyBox*\n" \
     49       "-rw-rw-r--    1 andersen andersen   557009 Apr 11 10:55 /tmp/BusyBox-0.43.tar.gz\n" \
     50       "$ gunzip /tmp/BusyBox-0.43.tar.gz\n" \
     51       "$ ls -la /tmp/BusyBox*\n" \
     52       "-rw-rw-r--    1 andersen andersen  1761280 Apr 14 17:47 /tmp/BusyBox-0.43.tar\n" \
     53
     54#define zcat_trivial_usage \
     55       "FILE" \
     56
     57#define zcat_full_usage "\n\n" \
     58       "Decompress to stdout" \
    1959
    2060#define bunzip2_trivial_usage \
     
    2363#define bunzip2_full_usage "\n\n" \
    2464       "Decompress FILEs (or stdin)\n" \
    25      "\nOptions:" \
    2665     "\n    -c  Write to stdout" \
    2766     "\n    -f  Force" \
     
    3372       "Decompress to stdout" \
    3473
     74#define unlzma_trivial_usage \
     75       "[-cf] [FILE]..." \
     76
     77#define unlzma_full_usage "\n\n" \
     78       "Decompress FILE (or stdin)\n" \
     79     "\n    -c  Write to stdout" \
     80     "\n    -f  Force" \
     81
     82#define lzma_trivial_usage \
     83       "-d [-cf] [FILE]..." \
     84
     85#define lzma_full_usage "\n\n" \
     86       "Decompress FILE (or stdin)\n" \
     87     "\n    -d  Decompress" \
     88     "\n    -c  Write to stdout" \
     89     "\n    -f  Force" \
     90
     91#define lzcat_trivial_usage \
     92       "FILE" \
     93
     94#define lzcat_full_usage "\n\n" \
     95       "Decompress to stdout" \
     96
     97#define unxz_trivial_usage \
     98       "[-cf] [FILE]..." \
     99
     100#define unxz_full_usage "\n\n" \
     101       "Decompress FILE (or stdin)\n" \
     102     "\n    -c  Write to stdout" \
     103     "\n    -f  Force" \
     104
     105#define xz_trivial_usage \
     106       "-d [-cf] [FILE]..." \
     107
     108#define xz_full_usage "\n\n" \
     109       "Decompress FILE (or stdin)\n" \
     110     "\n    -d  Decompress" \
     111     "\n    -c  Write to stdout" \
     112     "\n    -f  Force" \
     113
     114#define xzcat_trivial_usage \
     115       "FILE" \
     116
     117#define xzcat_full_usage "\n\n" \
     118       "Decompress to stdout" \
     119
     120#define bzip2_trivial_usage \
     121       "[OPTIONS] [FILE]..." \
     122
     123#define bzip2_full_usage "\n\n" \
     124       "Compress FILEs (or stdin) with bzip2 algorithm\n" \
     125     "\n    -1..9   Compression level" \
     126     "\n    -d  Decompress" \
     127     "\n    -c  Write to stdout" \
     128     "\n    -f  Force" \
     129
     130#define cpio_trivial_usage \
     131       "[-dmvu] [-F FILE]" IF_FEATURE_CPIO_O(" [-H newc]") \
     132       " [-ti"IF_FEATURE_CPIO_O("o")"]" IF_FEATURE_CPIO_P(" [-p DIR]") \
     133       " [EXTR_FILE]..." \
     134
     135#define cpio_full_usage "\n\n" \
     136       "Extract or list files from a cpio archive" \
     137    IF_FEATURE_CPIO_O(", or" \
     138     "\ncreate an archive" IF_FEATURE_CPIO_P(" (-o) or copy files (-p)") \
     139        " using file list on stdin" \
     140    ) \
     141     "\n" \
     142     "\nMain operation mode:" \
     143     "\n    -t  List" \
     144     "\n    -i  Extract EXTR_FILEs (or all)" \
     145    IF_FEATURE_CPIO_O( \
     146     "\n    -o  Create (requires -H newc)" \
     147    ) \
     148    IF_FEATURE_CPIO_P( \
     149     "\n    -p DIR  Copy files to DIR" \
     150    ) \
     151     "\n    -d  Make leading directories" \
     152     "\n    -m  Preserve mtime" \
     153     "\n    -v  Verbose" \
     154     "\n    -u  Overwrite" \
     155     "\n    -F FILE Input (-t,-i,-p) or output (-o) file" \
     156    IF_FEATURE_CPIO_O( \
     157     "\n    -H newc Archive format" \
     158    ) \
     159
     160#define dpkg_trivial_usage \
     161       "[-ilCPru] [-F OPT] PACKAGE" \
     162
     163#define dpkg_full_usage "\n\n" \
     164       "Install, remove and manage Debian packages\n" \
     165    IF_LONG_OPTS( \
     166     "\n    -i,--install    Install the package" \
     167     "\n    -l,--list   List of installed packages" \
     168     "\n    --configure Configure an unpackaged package" \
     169     "\n    -P,--purge  Purge all files of a package" \
     170     "\n    -r,--remove Remove all but the configuration files for a package" \
     171     "\n    --unpack    Unpack a package, but don't configure it" \
     172     "\n    --force-depends Ignore dependency problems" \
     173     "\n    --force-confnew Overwrite existing config files when installing" \
     174     "\n    --force-confold Keep old config files when installing" \
     175    ) \
     176    IF_NOT_LONG_OPTS( \
     177     "\n    -i      Install the package" \
     178     "\n    -l      List of installed packages" \
     179     "\n    -C      Configure an unpackaged package" \
     180     "\n    -P      Purge all files of a package" \
     181     "\n    -r      Remove all but the configuration files for a package" \
     182     "\n    -u      Unpack a package, but don't configure it" \
     183     "\n    -F depends  Ignore dependency problems" \
     184     "\n    -F confnew  Overwrite existing config files when installing" \
     185     "\n    -F confold  Keep old config files when installing" \
     186    ) \
     187
     188#define dpkg_deb_trivial_usage \
     189       "[-cefxX] FILE [argument" \
     190
     191#define dpkg_deb_full_usage "\n\n" \
     192       "Perform actions on Debian packages (.debs)\n" \
     193     "\n    -c  List contents of filesystem tree" \
     194     "\n    -e  Extract control files to [argument] directory" \
     195     "\n    -f  Display control field name starting with [argument]" \
     196     "\n    -x  Extract packages filesystem tree to directory" \
     197     "\n    -X  Verbose extract" \
     198
     199#define dpkg_deb_example_usage \
     200       "$ dpkg-deb -X ./busybox_0.48-1_i386.deb /tmp\n" \
     201
     202#define gzip_trivial_usage \
     203       "[-cfd] [FILE]..." \
     204
     205#define gzip_full_usage "\n\n" \
     206       "Compress FILEs (or stdin)\n" \
     207     "\n    -d  Decompress" \
     208     "\n    -c  Write to stdout" \
     209     "\n    -f  Force" \
     210
     211#define gzip_example_usage \
     212       "$ ls -la /tmp/busybox*\n" \
     213       "-rw-rw-r--    1 andersen andersen  1761280 Apr 14 17:47 /tmp/busybox.tar\n" \
     214       "$ gzip /tmp/busybox.tar\n" \
     215       "$ ls -la /tmp/busybox*\n" \
     216       "-rw-rw-r--    1 andersen andersen   554058 Apr 14 17:49 /tmp/busybox.tar.gz\n" \
     217
     218#define lzop_trivial_usage \
     219       "[-cfvd123456789CF] [FILE]..." \
     220
     221#define lzop_full_usage "\n\n" \
     222       "    -1..9   Compression level" \
     223     "\n    -d  Decompress" \
     224     "\n    -c  Write to stdout" \
     225     "\n    -f  Force" \
     226     "\n    -v  Verbose" \
     227     "\n    -F  Don't store or verify checksum" \
     228     "\n    -C  Also write checksum of compressed block" \
     229
     230#define lzopcat_trivial_usage \
     231       "[-vCF] [FILE]..." \
     232
     233#define lzopcat_full_usage "\n\n" \
     234       "    -v  Verbose" \
     235     "\n    -F  Don't store or verify checksum" \
     236
     237#define unlzop_trivial_usage \
     238       "[-cfvCF] [FILE]..." \
     239
     240#define unlzop_full_usage "\n\n" \
     241       "    -c  Write to stdout" \
     242     "\n    -f  Force" \
     243     "\n    -v  Verbose" \
     244     "\n    -F  Don't store or verify checksum" \
     245
     246#define rpm2cpio_trivial_usage \
     247       "package.rpm" \
     248
     249#define rpm2cpio_full_usage "\n\n" \
     250       "Output a cpio archive of the rpm file" \
     251
     252#define rpm_trivial_usage \
     253       "-i PACKAGE.rpm; rpm -qp[ildc] PACKAGE.rpm" \
     254
     255#define rpm_full_usage "\n\n" \
     256       "Manipulate RPM packages\n" \
     257     "\nCommands:" \
     258     "\n    -i  Install package" \
     259     "\n    -qp Query package" \
     260     "\n    -i  Show information" \
     261     "\n    -l  List contents" \
     262     "\n    -d  List documents" \
     263     "\n    -c  List config files" \
     264
    35265#define tar_trivial_usage \
    36        "-[" IF_FEATURE_TAR_CREATE("c") "xt" IF_FEATURE_SEAMLESS_GZ("z") \
    37     IF_FEATURE_SEAMLESS_BZ2("j") IF_FEATURE_SEAMLESS_LZMA("a") \
    38     IF_FEATURE_SEAMLESS_Z("Z") IF_FEATURE_TAR_NOPRESERVE_TIME("m") "vO] " \
    39     IF_FEATURE_TAR_FROM("[-X FILE] ") \
    40        "[-f TARFILE] [-C DIR] [FILE]..." \
     266    "-[" IF_FEATURE_TAR_CREATE("c") "xt" \
     267    IF_FEATURE_SEAMLESS_Z("Z") \
     268    IF_FEATURE_SEAMLESS_GZ("z") \
     269    IF_FEATURE_SEAMLESS_XZ("J") \
     270    IF_FEATURE_SEAMLESS_BZ2("j") \
     271    IF_FEATURE_SEAMLESS_LZMA("a") \
     272    IF_FEATURE_TAR_CREATE("h") \
     273    IF_FEATURE_TAR_NOPRESERVE_TIME("m") \
     274    "vO] " \
     275    IF_FEATURE_TAR_FROM("[-X FILE] [-T FILE] ") \
     276    "[-f TARFILE] [-C DIR] [FILE]..." \
    41277
    42278#define tar_full_usage "\n\n" \
     
    50286     "\n    x   Extract" \
    51287     "\n    t   List" \
    52      "\nOptions:" \
    53288     "\n    f   Name of TARFILE ('-' for stdin/out)" \
    54289     "\n    C   Change to DIR before operation" \
    55290     "\n    v   Verbose" \
     291    IF_FEATURE_SEAMLESS_Z( \
     292     "\n    Z   (De)compress using compress" \
     293    ) \
    56294    IF_FEATURE_SEAMLESS_GZ( \
    57295     "\n    z   (De)compress using gzip" \
    58296    ) \
     297    IF_FEATURE_SEAMLESS_XZ( \
     298     "\n    J   (De)compress using xz" \
     299    ) \
    59300    IF_FEATURE_SEAMLESS_BZ2( \
    60301     "\n    j   (De)compress using bzip2" \
     
    62303    IF_FEATURE_SEAMLESS_LZMA( \
    63304     "\n    a   (De)compress using lzma" \
    64     ) \
    65     IF_FEATURE_SEAMLESS_Z( \
    66      "\n    Z   (De)compress using compress" \
    67305    ) \
    68306     "\n    O   Extract to stdout" \
     
    85323       "$ tar -cf /tmp/tarball.tar /usr/local\n" \
    86324
     325#define unzip_trivial_usage \
     326       "[-lnopq] FILE[.zip] [FILE]... [-x FILE...] [-d DIR]" \
     327
     328#define unzip_full_usage "\n\n" \
     329       "Extract FILEs from ZIP archive\n" \
     330     "\n    -l  List contents (with -q for short form)" \
     331     "\n    -n  Never overwrite files (default: ask)" \
     332     "\n    -o  Overwrite" \
     333     "\n    -p  Print to stdout" \
     334     "\n    -q  Quiet" \
     335     "\n    -x FILE Exclude FILEs" \
     336     "\n    -d DIR  Extract into DIR" \
     337
     338#define chvt_trivial_usage \
     339       "N" \
     340
     341#define chvt_full_usage "\n\n" \
     342       "Change the foreground virtual terminal to /dev/ttyN" \
     343
     344#define clear_trivial_usage \
     345       "" \
     346
     347#define clear_full_usage "\n\n" \
     348       "Clear screen" \
     349
     350#define deallocvt_trivial_usage \
     351       "[N]" \
     352
     353#define deallocvt_full_usage "\n\n" \
     354       "Deallocate unused virtual terminal /dev/ttyN" \
     355
     356#define dumpkmap_trivial_usage \
     357       "> keymap" \
     358
     359#define dumpkmap_full_usage "\n\n" \
     360       "Print a binary keyboard translation table to stdout" \
     361
     362#define dumpkmap_example_usage \
     363       "$ dumpkmap > keymap\n" \
     364
     365#define fgconsole_trivial_usage \
     366    "" \
     367
     368#define fgconsole_full_usage "\n\n" \
     369    "Get active console" \
     370
     371#define kbd_mode_trivial_usage \
     372       "[-a|k|s|u] [-C TTY]" \
     373
     374#define kbd_mode_full_usage "\n\n" \
     375       "Report or set the keyboard mode\n" \
     376     "\n    -a  Default (ASCII)" \
     377     "\n    -k  Medium-raw (keyboard)" \
     378     "\n    -s  Raw (scancode)" \
     379     "\n    -u  Unicode (utf-8)" \
     380     "\n    -C TTY  Affect TTY instead of /dev/tty" \
     381
     382#define loadfont_trivial_usage \
     383       "< font" \
     384
     385#define loadfont_full_usage "\n\n" \
     386       "Load a console font from stdin" \
     387
     388#define loadfont_example_usage \
     389       "$ loadfont < /etc/i18n/fontname\n" \
     390
     391#define setfont_trivial_usage \
     392       "FONT [-m MAPFILE] [-C TTY]" \
     393
     394#define setfont_full_usage "\n\n" \
     395       "Load a console font\n" \
     396     "\n    -m MAPFILE  Load console screen map" \
     397     "\n    -C TTY      Affect TTY instead of /dev/tty" \
     398
     399#define setfont_example_usage \
     400       "$ setfont -m koi8-r /etc/i18n/fontname\n" \
     401
     402#define loadkmap_trivial_usage \
     403       "< keymap" \
     404
     405#define loadkmap_full_usage "\n\n" \
     406       "Load a binary keyboard translation table from stdin\n" \
     407
     408#define loadkmap_example_usage \
     409       "$ loadkmap < /etc/i18n/lang-keymap\n" \
     410
     411#define openvt_trivial_usage \
     412       "[-c N] [-sw] [PROG ARGS]" \
     413
     414#define openvt_full_usage "\n\n" \
     415       "Start PROG on a new virtual terminal\n" \
     416     "\n    -c N    Use specified VT" \
     417     "\n    -s  Switch to the VT" \
     418     "\n    -w  Wait for PROG to exit" \
     419
     420#define openvt_example_usage \
     421       "openvt 2 /bin/ash\n" \
     422
     423#define reset_trivial_usage \
     424       "" \
     425
     426#define reset_full_usage "\n\n" \
     427       "Reset the screen" \
     428
     429#define resize_trivial_usage \
     430       "" \
     431
     432#define resize_full_usage "\n\n" \
     433       "Resize the screen" \
     434
     435#define setconsole_trivial_usage \
     436       "[-r" IF_FEATURE_SETCONSOLE_LONG_OPTIONS("|--reset") "] [DEVICE]" \
     437
     438#define setconsole_full_usage "\n\n" \
     439       "Redirect system console output to DEVICE (default: /dev/tty)\n" \
     440     "\n    -r  Reset output to /dev/console" \
     441
     442#define setkeycodes_trivial_usage \
     443       "SCANCODE KEYCODE..." \
     444
     445#define setkeycodes_full_usage "\n\n" \
     446       "Set entries into the kernel's scancode-to-keycode map,\n" \
     447       "allowing unusual keyboards to generate usable keycodes.\n\n" \
     448       "SCANCODE may be either xx or e0xx (hexadecimal),\n" \
     449       "and KEYCODE is given in decimal." \
     450
     451#define setkeycodes_example_usage \
     452       "$ setkeycodes e030 127\n" \
     453
     454#define setlogcons_trivial_usage \
     455       "N" \
     456
     457#define setlogcons_full_usage "\n\n" \
     458       "Redirect the kernel output to console N (0 for current)" \
     459
     460#define showkey_trivial_usage \
     461       "[-a | -k | -s]" \
     462
     463#define showkey_full_usage "\n\n" \
     464       "Show keys pressed\n" \
     465     "\n    -a  Display decimal/octal/hex values of the keys" \
     466     "\n    -k  Display interpreted keycodes (default)" \
     467     "\n    -s  Display raw scan-codes" \
     468
     469#define basename_trivial_usage \
     470       "FILE [SUFFIX]" \
     471
     472#define basename_full_usage "\n\n" \
     473       "Strip directory path and .SUFFIX from FILE\n" \
     474
     475#define basename_example_usage \
     476       "$ basename /usr/local/bin/foo\n" \
     477       "foo\n" \
     478       "$ basename /usr/local/bin/\n" \
     479       "bin\n" \
     480       "$ basename /foo/bar.txt .txt\n" \
     481       "bar" \
     482
     483#define cal_trivial_usage \
     484       "[-jy] [[MONTH] YEAR]" \
     485
     486#define cal_full_usage "\n\n" \
     487       "Display a calendar\n" \
     488     "\n    -j  Use julian dates" \
     489     "\n    -y  Display the entire year" \
     490
     491#define cat_trivial_usage \
     492       "[FILE]..." \
     493
     494#define cat_full_usage "\n\n" \
     495       "Concatenate FILEs and print them to stdout" \
     496
     497#define cat_example_usage \
     498       "$ cat /proc/uptime\n" \
     499       "110716.72 17.67" \
     500
     501#define catv_trivial_usage \
     502       "[-etv] [FILE]..." \
     503
     504#define catv_full_usage "\n\n" \
     505       "Display nonprinting characters as ^x or M-x\n" \
     506     "\n    -e  End each line with $" \
     507     "\n    -t  Show tabs as ^I" \
     508     "\n    -v  Don't use ^x or M-x escapes" \
     509
     510#define chgrp_trivial_usage \
     511       "[-RhLHP"IF_DESKTOP("cvf")"]... GROUP FILE..." \
     512
     513#define chgrp_full_usage "\n\n" \
     514       "Change the group membership of each FILE to GROUP\n" \
     515     "\n    -R  Recurse" \
     516     "\n    -h  Affect symlinks instead of symlink targets" \
     517     "\n    -L  Traverse all symlinks to directories" \
     518     "\n    -H  Traverse symlinks on command line only" \
     519     "\n    -P  Don't traverse symlinks (default)" \
     520    IF_DESKTOP( \
     521     "\n    -c  List changed files" \
     522     "\n    -v  Verbose" \
     523     "\n    -f  Hide errors" \
     524    ) \
     525
     526#define chgrp_example_usage \
     527       "$ ls -l /tmp/foo\n" \
     528       "-r--r--r--    1 andersen andersen        0 Apr 12 18:25 /tmp/foo\n" \
     529       "$ chgrp root /tmp/foo\n" \
     530       "$ ls -l /tmp/foo\n" \
     531       "-r--r--r--    1 andersen root            0 Apr 12 18:25 /tmp/foo\n" \
     532
     533#define chmod_trivial_usage \
     534       "[-R"IF_DESKTOP("cvf")"] MODE[,MODE]... FILE..." \
     535
     536#define chmod_full_usage "\n\n" \
     537       "Each MODE is one or more of the letters ugoa, one of the\n" \
     538       "symbols +-= and one or more of the letters rwxst\n" \
     539     "\n    -R  Recurse" \
     540    IF_DESKTOP( \
     541     "\n    -c  List changed files" \
     542     "\n    -v  List all files" \
     543     "\n    -f  Hide errors" \
     544    ) \
     545
     546#define chmod_example_usage \
     547       "$ ls -l /tmp/foo\n" \
     548       "-rw-rw-r--    1 root     root            0 Apr 12 18:25 /tmp/foo\n" \
     549       "$ chmod u+x /tmp/foo\n" \
     550       "$ ls -l /tmp/foo\n" \
     551       "-rwxrw-r--    1 root     root            0 Apr 12 18:25 /tmp/foo*\n" \
     552       "$ chmod 444 /tmp/foo\n" \
     553       "$ ls -l /tmp/foo\n" \
     554       "-r--r--r--    1 root     root            0 Apr 12 18:25 /tmp/foo\n" \
     555
     556#define chown_trivial_usage \
     557       "[-RhLHP"IF_DESKTOP("cvf")"]... OWNER[<.|:>[GROUP]] FILE..." \
     558
     559#define chown_full_usage "\n\n" \
     560       "Change the owner and/or group of each FILE to OWNER and/or GROUP\n" \
     561     "\n    -R  Recurse" \
     562     "\n    -h  Affect symlinks instead of symlink targets" \
     563     "\n    -L  Traverse all symlinks to directories" \
     564     "\n    -H  Traverse symlinks on command line only" \
     565     "\n    -P  Don't traverse symlinks (default)" \
     566    IF_DESKTOP( \
     567     "\n    -c  List changed files" \
     568     "\n    -v  List all files" \
     569     "\n    -f  Hide errors" \
     570    ) \
     571
     572#define chown_example_usage \
     573       "$ ls -l /tmp/foo\n" \
     574       "-r--r--r--    1 andersen andersen        0 Apr 12 18:25 /tmp/foo\n" \
     575       "$ chown root /tmp/foo\n" \
     576       "$ ls -l /tmp/foo\n" \
     577       "-r--r--r--    1 root     andersen        0 Apr 12 18:25 /tmp/foo\n" \
     578       "$ chown root.root /tmp/foo\n" \
     579       "ls -l /tmp/foo\n" \
     580       "-r--r--r--    1 root     root            0 Apr 12 18:25 /tmp/foo\n" \
     581
     582#define chroot_trivial_usage \
     583       "NEWROOT [PROG ARGS]" \
     584
     585#define chroot_full_usage "\n\n" \
     586       "Run PROG with root directory set to NEWROOT" \
     587
     588#define chroot_example_usage \
     589       "$ ls -l /bin/ls\n" \
     590       "lrwxrwxrwx    1 root     root          12 Apr 13 00:46 /bin/ls -> /BusyBox\n" \
     591       "# mount /dev/hdc1 /mnt -t minix\n" \
     592       "# chroot /mnt\n" \
     593       "# ls -l /bin/ls\n" \
     594       "-rwxr-xr-x    1 root     root        40816 Feb  5 07:45 /bin/ls*\n" \
     595
     596#define cksum_trivial_usage \
     597       "FILES..." \
     598
     599#define cksum_full_usage "\n\n" \
     600       "Calculate the CRC32 checksums of FILES" \
     601
     602#define comm_trivial_usage \
     603       "[-123] FILE1 FILE2" \
     604
     605#define comm_full_usage "\n\n" \
     606       "Compare FILE1 with FILE2\n" \
     607     "\n    -1  Suppress lines unique to FILE1" \
     608     "\n    -2  Suppress lines unique to FILE2" \
     609     "\n    -3  Suppress lines common to both files" \
     610
     611#define cp_trivial_usage \
     612       "[OPTIONS] SOURCE... DEST" \
     613
     614#define cp_full_usage "\n\n" \
     615       "Copy SOURCE(s) to DEST\n" \
     616     "\n    -a  Same as -dpR" \
     617    IF_SELINUX( \
     618     "\n    -c  Preserve security context" \
     619    ) \
     620     "\n    -R,-r   Recurse" \
     621     "\n    -d,-P   Preserve symlinks (default if -R)" \
     622     "\n    -L  Follow all symlinks" \
     623     "\n    -H  Follow symlinks on command line" \
     624     "\n    -p  Preserve file attributes if possible" \
     625     "\n    -f  Overwrite" \
     626     "\n    -i  Prompt before overwrite" \
     627     "\n    -l,-s   Create (sym)links" \
     628
     629#define cut_trivial_usage \
     630       "[OPTIONS] [FILE]..." \
     631
     632#define cut_full_usage "\n\n" \
     633       "Print selected fields from each input FILE to stdout\n" \
     634     "\n    -b LIST Output only bytes from LIST" \
     635     "\n    -c LIST Output only characters from LIST" \
     636     "\n    -d CHAR Use CHAR instead of tab as the field delimiter" \
     637     "\n    -s  Output only the lines containing delimiter" \
     638     "\n    -f N    Print only these fields" \
     639     "\n    -n  Ignored" \
     640
     641#define cut_example_usage \
     642       "$ echo \"Hello world\" | cut -f 1 -d ' '\n" \
     643       "Hello\n" \
     644       "$ echo \"Hello world\" | cut -f 2 -d ' '\n" \
     645       "world\n" \
     646
    87647#define date_trivial_usage \
    88648       "[OPTIONS] [+FMT] [TIME]" \
     
    90650#define date_full_usage "\n\n" \
    91651       "Display time (using +FMT), or set time\n" \
    92      "\nOptions:" \
    93652    IF_NOT_LONG_OPTS( \
    94653     "\n    [-s] TIME   Set time to TIME" \
     
    122681     "\n    YYYY-MM-DD hh:mm[:ss]" \
    123682     "\n    [[[[[YY]YY]MM]DD]hh]mm[.ss]" \
     683    IF_FEATURE_DATE_COMPAT( \
     684     "\n    'date TIME' form accepts MMDDhhmm[[YY]YY][.ss] instead" \
     685    ) \
    124686
    125687#define date_example_usage \
     
    127689       "Wed Apr 12 18:52:41 MDT 2000\n" \
    128690
     691#define dd_trivial_usage \
     692       "[if=FILE] [of=FILE] " IF_FEATURE_DD_IBS_OBS("[ibs=N] [obs=N] ") "[bs=N] [count=N] [skip=N]\n" \
     693       "    [seek=N]" IF_FEATURE_DD_IBS_OBS(" [conv=notrunc|noerror|sync|fsync]") \
     694
     695#define dd_full_usage "\n\n" \
     696       "Copy a file with converting and formatting\n" \
     697     "\n    if=FILE     Read from FILE instead of stdin" \
     698     "\n    of=FILE     Write to FILE instead of stdout" \
     699     "\n    bs=N        Read and write N bytes at a time" \
     700    IF_FEATURE_DD_IBS_OBS( \
     701     "\n    ibs=N       Read N bytes at a time" \
     702    ) \
     703    IF_FEATURE_DD_IBS_OBS( \
     704     "\n    obs=N       Write N bytes at a time" \
     705    ) \
     706     "\n    count=N     Copy only N input blocks" \
     707     "\n    skip=N      Skip N input blocks" \
     708     "\n    seek=N      Skip N output blocks" \
     709    IF_FEATURE_DD_IBS_OBS( \
     710     "\n    conv=notrunc    Don't truncate output file" \
     711     "\n    conv=noerror    Continue after read errors" \
     712     "\n    conv=sync   Pad blocks with zeros" \
     713     "\n    conv=fsync  Physically write data out before finishing" \
     714    ) \
     715     "\n" \
     716     "\nNumbers may be suffixed by c (x1), w (x2), b (x512), kD (x1000), k (x1024)," \
     717     "\nMD (x1000000), M (x1048576), GD (x1000000000) or G (x1073741824)" \
     718
     719#define dd_example_usage \
     720       "$ dd if=/dev/zero of=/dev/ram1 bs=1M count=4\n" \
     721       "4+0 records in\n" \
     722       "4+0 records out\n" \
     723
     724#define df_trivial_usage \
     725    "[-Pk" \
     726    IF_FEATURE_HUMAN_READABLE("mh") \
     727    IF_FEATURE_DF_FANCY("ai] [-B SIZE") \
     728    "] [FILESYSTEM]..." \
     729
     730#define df_full_usage "\n\n" \
     731       "Print filesystem usage statistics\n" \
     732     "\n    -P  POSIX output format" \
     733     "\n    -k  1024-byte blocks (default)" \
     734    IF_FEATURE_HUMAN_READABLE( \
     735     "\n    -m  1M-byte blocks" \
     736     "\n    -h  Human readable (e.g. 1K 243M 2G)" \
     737    ) \
     738    IF_FEATURE_DF_FANCY( \
     739     "\n    -a  Show all filesystems" \
     740     "\n    -i  Inodes" \
     741     "\n    -B SIZE Blocksize" \
     742    ) \
     743
     744#define df_example_usage \
     745       "$ df\n" \
     746       "Filesystem           1K-blocks      Used Available Use% Mounted on\n" \
     747       "/dev/sda3              8690864   8553540    137324  98% /\n" \
     748       "/dev/sda1                64216     36364     27852  57% /boot\n" \
     749       "$ df /dev/sda3\n" \
     750       "Filesystem           1K-blocks      Used Available Use% Mounted on\n" \
     751       "/dev/sda3              8690864   8553540    137324  98% /\n" \
     752       "$ POSIXLY_CORRECT=sure df /dev/sda3\n" \
     753       "Filesystem         512B-blocks      Used Available Use% Mounted on\n" \
     754       "/dev/sda3             17381728  17107080    274648  98% /\n" \
     755       "$ POSIXLY_CORRECT=yep df -P /dev/sda3\n" \
     756       "Filesystem          512-blocks      Used Available Capacity Mounted on\n" \
     757       "/dev/sda3             17381728  17107080    274648      98% /\n" \
     758
     759#define dirname_trivial_usage \
     760       "FILENAME" \
     761
     762#define dirname_full_usage "\n\n" \
     763       "Strip non-directory suffix from FILENAME" \
     764
     765#define dirname_example_usage \
     766       "$ dirname /tmp/foo\n" \
     767       "/tmp\n" \
     768       "$ dirname /tmp/foo/\n" \
     769       "/tmp\n" \
     770
     771#define dos2unix_trivial_usage \
     772       "[-ud] [FILE]" \
     773
     774#define dos2unix_full_usage "\n\n" \
     775       "Convert FILE in-place from DOS to Unix format.\n" \
     776       "When no file is given, use stdin/stdout.\n" \
     777     "\n    -u  dos2unix" \
     778     "\n    -d  unix2dos" \
     779
     780#define unix2dos_trivial_usage \
     781       "[-ud] [FILE]" \
     782
     783#define unix2dos_full_usage "\n\n" \
     784       "Convert FILE in-place from Unix to DOS format.\n" \
     785       "When no file is given, use stdin/stdout.\n" \
     786     "\n    -u  dos2unix" \
     787     "\n    -d  unix2dos" \
     788
     789#define du_trivial_usage \
     790       "[-aHLdclsx" IF_FEATURE_HUMAN_READABLE("hm") "k] [FILE]..." \
     791
     792#define du_full_usage "\n\n" \
     793       "Summarize disk space used for each FILE and/or directory\n" \
     794     "\n    -a  Show file sizes too" \
     795     "\n    -L  Follow all symlinks" \
     796     "\n    -H  Follow symlinks on command line" \
     797     "\n    -d N    Limit output to directories (and files with -a) of depth < N" \
     798     "\n    -c  Show grand total" \
     799     "\n    -l  Count sizes many times if hard linked" \
     800     "\n    -s  Display only a total for each argument" \
     801     "\n    -x  Skip directories on different filesystems" \
     802    IF_FEATURE_HUMAN_READABLE( \
     803     "\n    -h  Sizes in human readable format (e.g., 1K 243M 2G)" \
     804     "\n    -m  Sizes in megabytes" \
     805    ) \
     806     "\n    -k  Sizes in kilobytes" IF_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(" (default)") \
     807    IF_NOT_FEATURE_DU_DEFAULT_BLOCKSIZE_1K( \
     808     "\n        Default unit is 512 bytes" \
     809    ) \
     810
     811#define du_example_usage \
     812       "$ du\n" \
     813       "16      ./CVS\n" \
     814       "12      ./kernel-patches/CVS\n" \
     815       "80      ./kernel-patches\n" \
     816       "12      ./tests/CVS\n" \
     817       "36      ./tests\n" \
     818       "12      ./scripts/CVS\n" \
     819       "16      ./scripts\n" \
     820       "12      ./docs/CVS\n" \
     821       "104     ./docs\n" \
     822       "2417    .\n" \
     823
     824#define echo_trivial_usage \
     825    IF_FEATURE_FANCY_ECHO("[-neE] ") "[ARG]..." \
     826
     827#define echo_full_usage "\n\n" \
     828       "Print the specified ARGs to stdout" \
     829    IF_FEATURE_FANCY_ECHO( "\n" \
     830     "\n    -n  Suppress trailing newline" \
     831     "\n    -e  Interpret backslash escapes (i.e., \\t=tab)" \
     832     "\n    -E  Don't interpret backslash escapes (default)" \
     833    ) \
     834
     835#define echo_example_usage \
     836       "$ echo \"Erik is cool\"\n" \
     837       "Erik is cool\n" \
     838    IF_FEATURE_FANCY_ECHO("$ echo -e \"Erik\\nis\\ncool\"\n" \
     839       "Erik\n" \
     840       "is\n" \
     841       "cool\n" \
     842       "$ echo \"Erik\\nis\\ncool\"\n" \
     843       "Erik\\nis\\ncool\n") \
     844
     845#define env_trivial_usage \
     846       "[-iu] [-] [name=value]... [PROG ARGS]" \
     847
     848#define env_full_usage "\n\n" \
     849       "Print the current environment or run PROG after setting up\n" \
     850       "the specified environment\n" \
     851     "\n    -, -i   Start with an empty environment" \
     852     "\n    -u  Remove variable from the environment" \
     853
     854#define expand_trivial_usage \
     855       "[-i] [-t N] [FILE]..." \
     856
     857#define expand_full_usage "\n\n" \
     858       "Convert tabs to spaces, writing to stdout\n" \
     859    IF_FEATURE_EXPAND_LONG_OPTIONS( \
     860     "\n    -i,--initial    Don't convert tabs after non blanks" \
     861     "\n    -t,--tabs=N Tabstops every N chars" \
     862    ) \
     863    IF_NOT_FEATURE_EXPAND_LONG_OPTIONS( \
     864     "\n    -i  Don't convert tabs after non blanks" \
     865     "\n    -t  Tabstops every N chars" \
     866    ) \
     867
     868#define unexpand_trivial_usage \
     869       "[-fa][-t N] [FILE]..." \
     870
     871#define unexpand_full_usage "\n\n" \
     872       "Convert spaces to tabs, writing to stdout\n" \
     873    IF_FEATURE_UNEXPAND_LONG_OPTIONS( \
     874     "\n    -a,--all    Convert all blanks" \
     875     "\n    -f,--first-only Convert only leading blanks" \
     876     "\n    -t,--tabs=N Tabstops every N chars" \
     877    ) \
     878    IF_NOT_FEATURE_UNEXPAND_LONG_OPTIONS( \
     879     "\n    -a  Convert all blanks" \
     880     "\n    -f  Convert only leading blanks" \
     881     "\n    -t N    Tabstops every N chars" \
     882    ) \
     883
     884#define expr_trivial_usage \
     885       "EXPRESSION" \
     886
     887#define expr_full_usage "\n\n" \
     888       "Print the value of EXPRESSION to stdout\n" \
     889    "\n" \
     890       "EXPRESSION may be:\n" \
     891       "    ARG1 | ARG2 ARG1 if it is neither null nor 0, otherwise ARG2\n" \
     892       "    ARG1 & ARG2 ARG1 if neither argument is null or 0, otherwise 0\n" \
     893       "    ARG1 < ARG2 1 if ARG1 is less than ARG2, else 0. Similarly:\n" \
     894       "    ARG1 <= ARG2\n" \
     895       "    ARG1 = ARG2\n" \
     896       "    ARG1 != ARG2\n" \
     897       "    ARG1 >= ARG2\n" \
     898       "    ARG1 > ARG2\n" \
     899       "    ARG1 + ARG2 Sum of ARG1 and ARG2. Similarly:\n" \
     900       "    ARG1 - ARG2\n" \
     901       "    ARG1 * ARG2\n" \
     902       "    ARG1 / ARG2\n" \
     903       "    ARG1 % ARG2\n" \
     904       "    STRING : REGEXP     Anchored pattern match of REGEXP in STRING\n" \
     905       "    match STRING REGEXP Same as STRING : REGEXP\n" \
     906       "    substr STRING POS LENGTH Substring of STRING, POS counted from 1\n" \
     907       "    index STRING CHARS  Index in STRING where any CHARS is found, or 0\n" \
     908       "    length STRING       Length of STRING\n" \
     909       "    quote TOKEN     Interpret TOKEN as a string, even if\n" \
     910       "                it is a keyword like 'match' or an\n" \
     911       "                operator like '/'\n" \
     912       "    (EXPRESSION)        Value of EXPRESSION\n" \
     913       "\n" \
     914       "Beware that many operators need to be escaped or quoted for shells.\n" \
     915       "Comparisons are arithmetic if both ARGs are numbers, else\n" \
     916       "lexicographical. Pattern matches return the string matched between\n" \
     917       "\\( and \\) or null; if \\( and \\) are not used, they return the number\n" \
     918       "of characters matched or 0." \
     919
     920#define false_trivial_usage \
     921       "" \
     922
     923#define false_full_usage "\n\n" \
     924       "Return an exit code of FALSE (1)" \
     925
     926#define false_example_usage \
     927       "$ false\n" \
     928       "$ echo $?\n" \
     929       "1\n" \
     930
     931#define fold_trivial_usage \
     932       "[-bs] [-w WIDTH] [FILE]..." \
     933
     934#define fold_full_usage "\n\n" \
     935       "Wrap input lines in each FILE (or stdin), writing to stdout\n" \
     936     "\n    -b  Count bytes rather than columns" \
     937     "\n    -s  Break at spaces" \
     938     "\n    -w  Use WIDTH columns instead of 80" \
     939
     940#define fsync_trivial_usage \
     941       "[-d] FILE..." \
     942
     943#define fsync_full_usage "\n\n" \
     944       "Write files' buffered blocks to disk\n" \
     945     "\n    -d  Avoid syncing metadata" \
     946
     947#define head_trivial_usage \
     948       "[OPTIONS] [FILE]..." \
     949
     950#define head_full_usage "\n\n" \
     951       "Print first 10 lines of each FILE (or stdin) to stdout.\n" \
     952       "With more than one FILE, precede each with a filename header.\n" \
     953     "\n    -n N[kbm]   Print first N lines" \
     954    IF_FEATURE_FANCY_HEAD( \
     955     "\n    -c N[kbm]   Print first N bytes" \
     956     "\n    -q      Never print headers" \
     957     "\n    -v      Always print headers" \
     958    ) \
     959     "\n" \
     960     "\nN may be suffixed by k (x1024), b (x512), or m (x1024^2)." \
     961
     962#define head_example_usage \
     963       "$ head -n 2 /etc/passwd\n" \
     964       "root:x:0:0:root:/root:/bin/bash\n" \
     965       "daemon:x:1:1:daemon:/usr/sbin:/bin/sh\n" \
     966
     967#define hostid_trivial_usage \
     968       "" \
     969
     970#define hostid_full_usage "\n\n" \
     971       "Print out a unique 32-bit identifier for the machine" \
     972
     973#define id_trivial_usage \
     974       "[OPTIONS] [USER]" \
     975
     976#define id_full_usage "\n\n" \
     977       "Print information about USER or the current user\n" \
     978    IF_SELINUX( \
     979     "\n    -Z  Security context" \
     980    ) \
     981     "\n    -u  User ID" \
     982     "\n    -g  Group ID" \
     983     "\n    -G  Supplementary group IDs" \
     984     "\n    -n  Print names instead of numbers" \
     985     "\n    -r  Print real ID instead of effective ID" \
     986
     987#define id_example_usage \
     988       "$ id\n" \
     989       "uid=1000(andersen) gid=1000(andersen)\n" \
     990
     991#define groups_trivial_usage \
     992       "[USER]" \
     993
     994#define groups_full_usage "\n\n" \
     995       "Print the group memberships of USER or for the current process" \
     996
     997#define groups_example_usage \
     998       "$ groups\n" \
     999       "andersen lp dialout cdrom floppy\n" \
     1000
     1001#define install_trivial_usage \
     1002    "[-cdDsp] [-o USER] [-g GRP] [-m MODE] [SOURCE]... DEST" \
     1003
     1004#define install_full_usage "\n\n" \
     1005       "Copy files and set attributes\n" \
     1006     "\n    -c  Just copy (default)" \
     1007     "\n    -d  Create directories" \
     1008     "\n    -D  Create leading target directories" \
     1009     "\n    -s  Strip symbol table" \
     1010     "\n    -p  Preserve date" \
     1011     "\n    -o USER Set ownership" \
     1012     "\n    -g GRP  Set group ownership" \
     1013     "\n    -m MODE Set permissions" \
     1014    IF_SELINUX( \
     1015     "\n    -Z  Set security context" \
     1016    ) \
     1017
     1018#define ln_trivial_usage \
     1019       "[OPTIONS] TARGET... LINK|DIR" \
     1020
     1021#define ln_full_usage "\n\n" \
     1022       "Create a link LINK or DIR/TARGET to the specified TARGET(s)\n" \
     1023     "\n    -s  Make symlinks instead of hardlinks" \
     1024     "\n    -f  Remove existing destinations" \
     1025     "\n    -n  Don't dereference symlinks - treat like normal file" \
     1026     "\n    -b  Make a backup of the target (if exists) before link operation" \
     1027     "\n    -S suf  Use suffix instead of ~ when making backup files" \
     1028     "\n    -T  2nd arg must be a DIR" \
     1029     "\n    -v  Verbose" \
     1030
     1031#define ln_example_usage \
     1032       "$ ln -s BusyBox /tmp/ls\n" \
     1033       "$ ls -l /tmp/ls\n" \
     1034       "lrwxrwxrwx    1 root     root            7 Apr 12 18:39 ls -> BusyBox*\n" \
     1035
     1036#define logname_trivial_usage \
     1037       "" \
     1038
     1039#define logname_full_usage "\n\n" \
     1040       "Print the name of the current user" \
     1041
     1042#define logname_example_usage \
     1043       "$ logname\n" \
     1044       "root\n" \
     1045
     1046#define ls_trivial_usage \
     1047    "[-1AaCxd" \
     1048    IF_FEATURE_LS_FOLLOWLINKS("LH") \
     1049    IF_FEATURE_LS_RECURSIVE("R") \
     1050    IF_FEATURE_LS_FILETYPES("Fp") "lins" \
     1051    IF_FEATURE_LS_TIMESTAMPS("e") \
     1052    IF_FEATURE_HUMAN_READABLE("h") \
     1053    IF_FEATURE_LS_SORTFILES("rSXv") \
     1054    IF_FEATURE_LS_TIMESTAMPS("ctu") \
     1055    IF_SELINUX("kKZ") "]" \
     1056    IF_FEATURE_AUTOWIDTH(" [-w WIDTH]") " [FILE]..." \
     1057
     1058#define ls_full_usage "\n\n" \
     1059       "List directory contents\n" \
     1060     "\n    -1  One column output" \
     1061     "\n    -a  Include entries which start with ." \
     1062     "\n    -A  Like -a, but exclude . and .." \
     1063     "\n    -C  List by columns" \
     1064     "\n    -x  List by lines" \
     1065     "\n    -d  List directory entries instead of contents" \
     1066    IF_FEATURE_LS_FOLLOWLINKS( \
     1067     "\n    -L  Follow symlinks" \
     1068     "\n    -H  Follow symlinks on command line" \
     1069    ) \
     1070    IF_FEATURE_LS_RECURSIVE( \
     1071     "\n    -R  Recurse" \
     1072    ) \
     1073    IF_FEATURE_LS_FILETYPES( \
     1074     "\n    -p  Append / to dir entries" \
     1075     "\n    -F  Append indicator (one of */=@|) to entries" \
     1076    ) \
     1077     "\n    -l  Long listing format" \
     1078     "\n    -i  List inode numbers" \
     1079     "\n    -n  List numeric UIDs and GIDs instead of names" \
     1080     "\n    -s  List allocated blocks" \
     1081    IF_FEATURE_LS_TIMESTAMPS( \
     1082     "\n    -e  List full date and time" \
     1083    ) \
     1084    IF_FEATURE_HUMAN_READABLE( \
     1085     "\n    -h  List sizes in human readable format (1K 243M 2G)" \
     1086    ) \
     1087    IF_FEATURE_LS_SORTFILES( \
     1088     "\n    -r  Sort in reverse order" \
     1089     "\n    -S  Sort by size" \
     1090     "\n    -X  Sort by extension" \
     1091     "\n    -v  Sort by version" \
     1092    ) \
     1093    IF_FEATURE_LS_TIMESTAMPS( \
     1094     "\n    -c  With -l: sort by ctime" \
     1095     "\n    -t  With -l: sort by mtime" \
     1096     "\n    -u  With -l: sort by atime" \
     1097    ) \
     1098    IF_SELINUX( \
     1099     "\n    -k  List security context" \
     1100     "\n    -K  List security context in long format" \
     1101     "\n    -Z  List security context and permission" \
     1102    ) \
     1103    IF_FEATURE_AUTOWIDTH( \
     1104     "\n    -w N    Assume the terminal is N columns wide" \
     1105    ) \
     1106    IF_FEATURE_LS_COLOR( \
     1107     "\n    --color[={always,never,auto}]   Control coloring" \
     1108    ) \
     1109
     1110#define md5sum_trivial_usage \
     1111    IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..." \
     1112
     1113#define md5sum_full_usage "\n\n" \
     1114       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums" \
     1115    IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \
     1116     "\n    -c  Check sums against list in FILEs" \
     1117     "\n    -s  Don't output anything, status code shows success" \
     1118     "\n    -w  Warn about improperly formatted checksum lines" \
     1119    ) \
     1120
     1121#define md5sum_example_usage \
     1122       "$ md5sum < busybox\n" \
     1123       "6fd11e98b98a58f64ff3398d7b324003\n" \
     1124       "$ md5sum busybox\n" \
     1125       "6fd11e98b98a58f64ff3398d7b324003  busybox\n" \
     1126       "$ md5sum -c -\n" \
     1127       "6fd11e98b98a58f64ff3398d7b324003  busybox\n" \
     1128       "busybox: OK\n" \
     1129       "^D\n" \
     1130
     1131#define sha1sum_trivial_usage \
     1132    IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..." \
     1133
     1134#define sha1sum_full_usage "\n\n" \
     1135       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums" \
     1136    IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \
     1137     "\n    -c  Check sums against list in FILEs" \
     1138     "\n    -s  Don't output anything, status code shows success" \
     1139     "\n    -w  Warn about improperly formatted checksum lines" \
     1140    ) \
     1141
     1142#define sha256sum_trivial_usage \
     1143    IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..." \
     1144
     1145#define sha256sum_full_usage "\n\n" \
     1146       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums" \
     1147    IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \
     1148     "\n    -c  Check sums against list in FILEs" \
     1149     "\n    -s  Don't output anything, status code shows success" \
     1150     "\n    -w  Warn about improperly formatted checksum lines" \
     1151    ) \
     1152
     1153#define sha512sum_trivial_usage \
     1154    IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..." \
     1155
     1156#define sha512sum_full_usage "\n\n" \
     1157       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums" \
     1158    IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \
     1159     "\n    -c  Check sums against list in FILEs" \
     1160     "\n    -s  Don't output anything, status code shows success" \
     1161     "\n    -w  Warn about improperly formatted checksum lines" \
     1162    ) \
     1163
     1164#define sha3sum_trivial_usage \
     1165    IF_FEATURE_MD5_SHA1_SUM_CHECK("[-c[sw]] ")"[FILE]..." \
     1166
     1167#define sha3sum_full_usage "\n\n" \
     1168       "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA3-512 checksums" \
     1169    IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \
     1170     "\n    -c  Check sums against list in FILEs" \
     1171     "\n    -s  Don't output anything, status code shows success" \
     1172     "\n    -w  Warn about improperly formatted checksum lines" \
     1173    ) \
     1174
     1175#define mkdir_trivial_usage \
     1176       "[OPTIONS] DIRECTORY..." \
     1177
     1178#define mkdir_full_usage "\n\n" \
     1179       "Create DIRECTORY\n" \
     1180     "\n    -m MODE Mode" \
     1181     "\n    -p  No error if exists; make parent directories as needed" \
     1182    IF_SELINUX( \
     1183     "\n    -Z  Set security context" \
     1184    ) \
     1185
     1186#define mkdir_example_usage \
     1187       "$ mkdir /tmp/foo\n" \
     1188       "$ mkdir /tmp/foo\n" \
     1189       "/tmp/foo: File exists\n" \
     1190       "$ mkdir /tmp/foo/bar/baz\n" \
     1191       "/tmp/foo/bar/baz: No such file or directory\n" \
     1192       "$ mkdir -p /tmp/foo/bar/baz\n" \
     1193
     1194#define mkfifo_trivial_usage \
     1195       "[-m MODE] " IF_SELINUX("[-Z] ") "NAME" \
     1196
     1197#define mkfifo_full_usage "\n\n" \
     1198       "Create named pipe\n" \
     1199     "\n    -m MODE Mode (default a=rw)" \
     1200    IF_SELINUX( \
     1201     "\n    -Z  Set security context" \
     1202    ) \
     1203
     1204#define mknod_trivial_usage \
     1205       "[-m MODE] " IF_SELINUX("[-Z] ") "NAME TYPE MAJOR MINOR" \
     1206
     1207#define mknod_full_usage "\n\n" \
     1208       "Create a special file (block, character, or pipe)\n" \
     1209     "\n    -m MODE Creation mode (default a=rw)" \
     1210    IF_SELINUX( \
     1211     "\n    -Z  Set security context" \
     1212    ) \
     1213     "\nTYPE:" \
     1214     "\n    b   Block device" \
     1215     "\n    c or u  Character device" \
     1216     "\n    p   Named pipe (MAJOR and MINOR are ignored)" \
     1217
     1218#define mknod_example_usage \
     1219       "$ mknod /dev/fd0 b 2 0\n" \
     1220       "$ mknod -m 644 /tmp/pipe p\n" \
     1221
    1291222#define mv_trivial_usage \
    1301223       "[-fin] SOURCE DEST\n" \
     
    1331226#define mv_full_usage "\n\n" \
    1341227       "Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY\n" \
    135      "\nOptions:" \
    1361228     "\n    -f  Don't prompt before overwriting" \
    1371229     "\n    -i  Interactive, prompt before overwrite" \
     
    1411233       "$ mv /tmp/foo /bin/bar\n" \
    1421234
     1235#define nice_trivial_usage \
     1236       "[-n ADJUST] [PROG ARGS]" \
     1237
     1238#define nice_full_usage "\n\n" \
     1239       "Change scheduling priority, run PROG\n" \
     1240     "\n    -n ADJUST   Adjust priority by ADJUST" \
     1241
     1242#define nohup_trivial_usage \
     1243       "PROG ARGS" \
     1244
     1245#define nohup_full_usage "\n\n" \
     1246       "Run PROG immune to hangups, with output to a non-tty" \
     1247
     1248#define nohup_example_usage \
     1249       "$ nohup make &" \
     1250
     1251#if ENABLE_DESKTOP \
     1252
     1253#define od_trivial_usage \
     1254       "[-abcdfhilovxs] [-t TYPE] [-A RADIX] [-N SIZE] [-j SKIP] [-S MINSTR] [-w WIDTH] [FILE]..." \
     1255
     1256#define od_full_usage "\n\n" \
     1257       "Print FILEs (or stdin) unambiguously, as octal bytes by default" \
     1258
     1259#endif \
     1260
     1261#if !ENABLE_DESKTOP \
     1262
     1263#define od_trivial_usage \
     1264       "[-aBbcDdeFfHhIiLlOovXx] [FILE]" \
     1265
     1266#define od_full_usage "\n\n" \
     1267       "Print FILE (or stdin) unambiguously, as octal bytes by default" \
     1268
     1269#endif \
     1270
     1271#define printenv_trivial_usage \
     1272       "[VARIABLE]..." \
     1273
     1274#define printenv_full_usage "\n\n" \
     1275       "Print environment VARIABLEs.\n" \
     1276       "If no VARIABLE specified, print all." \
     1277
     1278#define printf_trivial_usage \
     1279       "FORMAT [ARG]..." \
     1280
     1281#define printf_full_usage "\n\n" \
     1282       "Format and print ARG(s) according to FORMAT (a-la C printf)" \
     1283
     1284#define printf_example_usage \
     1285       "$ printf \"Val=%d\\n\" 5\n" \
     1286       "Val=5\n" \
     1287
     1288#define pwd_trivial_usage \
     1289       "" \
     1290
     1291#define pwd_full_usage "\n\n" \
     1292       "Print the full filename of the current working directory" \
     1293
     1294#define pwd_example_usage \
     1295       "$ pwd\n" \
     1296       "/root\n" \
     1297
     1298#define readlink_trivial_usage \
     1299    IF_FEATURE_READLINK_FOLLOW("[-fnv] ") "FILE" \
     1300
     1301#define readlink_full_usage "\n\n" \
     1302       "Display the value of a symlink" \
     1303    IF_FEATURE_READLINK_FOLLOW( "\n" \
     1304     "\n    -f  Canonicalize by following all symlinks" \
     1305     "\n    -n  Don't add newline" \
     1306     "\n    -v  Verbose" \
     1307    ) \
     1308
     1309#define realpath_trivial_usage \
     1310       "FILE..." \
     1311
     1312#define realpath_full_usage "\n\n" \
     1313       "Return the absolute pathnames of given FILE" \
     1314
     1315#define rm_trivial_usage \
     1316       "[-irf] FILE..." \
     1317
     1318#define rm_full_usage "\n\n" \
     1319       "Remove (unlink) FILEs\n" \
     1320     "\n    -i  Always prompt before removing" \
     1321     "\n    -f  Never prompt" \
     1322     "\n    -R,-r   Recurse" \
     1323
     1324#define rm_example_usage \
     1325       "$ rm -rf /tmp/foo\n" \
     1326
     1327#define rmdir_trivial_usage \
     1328       "[OPTIONS] DIRECTORY..." \
     1329
     1330#define rmdir_full_usage "\n\n" \
     1331       "Remove DIRECTORY if it is empty\n" \
     1332    IF_FEATURE_RMDIR_LONG_OPTIONS( \
     1333     "\n    -p|--parents    Include parents" \
     1334     "\n    --ignore-fail-on-non-empty" \
     1335    ) \
     1336    IF_NOT_FEATURE_RMDIR_LONG_OPTIONS( \
     1337     "\n    -p  Include parents" \
     1338    ) \
     1339
     1340#define rmdir_example_usage \
     1341       "# rmdir /tmp/foo\n" \
     1342
     1343#define seq_trivial_usage \
     1344       "[-w] [-s SEP] [FIRST [INC]] LAST" \
     1345
     1346#define seq_full_usage "\n\n" \
     1347       "Print numbers from FIRST to LAST, in steps of INC.\n" \
     1348       "FIRST, INC default to 1.\n" \
     1349     "\n    -w  Pad to last with leading zeros" \
     1350     "\n    -s SEP  String separator" \
     1351
     1352#define sleep_trivial_usage \
     1353    IF_FEATURE_FANCY_SLEEP("[") "N" IF_FEATURE_FANCY_SLEEP("]...") \
     1354
     1355#define sleep_full_usage "\n\n" \
     1356    IF_NOT_FEATURE_FANCY_SLEEP("Pause for N seconds") \
     1357    IF_FEATURE_FANCY_SLEEP( \
     1358       "Pause for a time equal to the total of the args given, where each arg can\n" \
     1359       "have an optional suffix of (s)econds, (m)inutes, (h)ours, or (d)ays") \
     1360
     1361#define sleep_example_usage \
     1362       "$ sleep 2\n" \
     1363       "[2 second delay results]\n" \
     1364    IF_FEATURE_FANCY_SLEEP( \
     1365       "$ sleep 1d 3h 22m 8s\n" \
     1366       "[98528 second delay results]\n") \
     1367
     1368#define sort_trivial_usage \
     1369       "[-nru" \
     1370    IF_FEATURE_SORT_BIG("gMcszbdfimSTokt] [-o FILE] [-k start[.offset][opts][,end[.offset][opts]] [-t CHAR") \
     1371       "] [FILE]..." \
     1372
     1373#define sort_full_usage "\n\n" \
     1374       "Sort lines of text\n" \
     1375    IF_FEATURE_SORT_BIG( \
     1376     "\n    -b  Ignore leading blanks" \
     1377     "\n    -c  Check whether input is sorted" \
     1378     "\n    -d  Dictionary order (blank or alphanumeric only)" \
     1379     "\n    -f  Ignore case" \
     1380     "\n    -g  General numerical sort" \
     1381     "\n    -i  Ignore unprintable characters" \
     1382     "\n    -k  Sort key" \
     1383     "\n    -M  Sort month" \
     1384    ) \
     1385     "\n    -n  Sort numbers" \
     1386    IF_FEATURE_SORT_BIG( \
     1387     "\n    -o  Output to file" \
     1388     "\n    -k  Sort by key" \
     1389     "\n    -t CHAR Key separator" \
     1390    ) \
     1391     "\n    -r  Reverse sort order" \
     1392    IF_FEATURE_SORT_BIG( \
     1393     "\n    -s  Stable (don't sort ties alphabetically)" \
     1394    ) \
     1395     "\n    -u  Suppress duplicate lines" \
     1396    IF_FEATURE_SORT_BIG( \
     1397     "\n    -z  Lines are terminated by NUL, not newline" \
     1398     "\n    -mST    Ignored for GNU compatibility") \
     1399
     1400#define sort_example_usage \
     1401       "$ echo -e \"e\\nf\\nb\\nd\\nc\\na\" | sort\n" \
     1402       "a\n" \
     1403       "b\n" \
     1404       "c\n" \
     1405       "d\n" \
     1406       "e\n" \
     1407       "f\n" \
     1408    IF_FEATURE_SORT_BIG( \
     1409        "$ echo -e \"c 3\\nb 2\\nd 2\" | $SORT -k 2,2n -k 1,1r\n" \
     1410        "d 2\n" \
     1411        "b 2\n" \
     1412        "c 3\n" \
     1413    ) \
     1414       "" \
     1415
     1416#define split_trivial_usage \
     1417       "[OPTIONS] [INPUT [PREFIX]]" \
     1418
     1419#define split_full_usage "\n\n" \
     1420       "    -b N[k|m]   Split by N (kilo|mega)bytes" \
     1421     "\n    -l N        Split by N lines" \
     1422     "\n    -a N        Use N letters as suffix" \
     1423
     1424#define split_example_usage \
     1425       "$ split TODO foo\n" \
     1426       "$ cat TODO | split -a 2 -l 2 TODO_\n" \
     1427
     1428#define stat_trivial_usage \
     1429       "[OPTIONS] FILE..." \
     1430
     1431#define stat_full_usage "\n\n" \
     1432       "Display file (default) or filesystem status\n" \
     1433    IF_FEATURE_STAT_FORMAT( \
     1434     "\n    -c fmt  Use the specified format" \
     1435    ) \
     1436     "\n    -f  Display filesystem status" \
     1437     "\n    -L  Follow links" \
     1438     "\n    -t  Display info in terse form" \
     1439    IF_SELINUX( \
     1440     "\n    -Z  Print security context" \
     1441    ) \
     1442    IF_FEATURE_STAT_FORMAT( \
     1443       "\n\nValid format sequences for files:\n" \
     1444       " %a Access rights in octal\n" \
     1445       " %A Access rights in human readable form\n" \
     1446       " %b Number of blocks allocated (see %B)\n" \
     1447       " %B The size in bytes of each block reported by %b\n" \
     1448       " %d Device number in decimal\n" \
     1449       " %D Device number in hex\n" \
     1450       " %f Raw mode in hex\n" \
     1451       " %F File type\n" \
     1452       " %g Group ID of owner\n" \
     1453       " %G Group name of owner\n" \
     1454       " %h Number of hard links\n" \
     1455       " %i Inode number\n" \
     1456       " %n File name\n" \
     1457       " %N File name, with -> TARGET if symlink\n" \
     1458       " %o I/O block size\n" \
     1459       " %s Total size, in bytes\n" \
     1460       " %t Major device type in hex\n" \
     1461       " %T Minor device type in hex\n" \
     1462       " %u User ID of owner\n" \
     1463       " %U User name of owner\n" \
     1464       " %x Time of last access\n" \
     1465       " %X Time of last access as seconds since Epoch\n" \
     1466       " %y Time of last modification\n" \
     1467       " %Y Time of last modification as seconds since Epoch\n" \
     1468       " %z Time of last change\n" \
     1469       " %Z Time of last change as seconds since Epoch\n" \
     1470       "\nValid format sequences for file systems:\n" \
     1471       " %a Free blocks available to non-superuser\n" \
     1472       " %b Total data blocks in file system\n" \
     1473       " %c Total file nodes in file system\n" \
     1474       " %d Free file nodes in file system\n" \
     1475       " %f Free blocks in file system\n" \
     1476    IF_SELINUX( \
     1477       " %C Security context in selinux\n" \
     1478    ) \
     1479       " %i File System ID in hex\n" \
     1480       " %l Maximum length of filenames\n" \
     1481       " %n File name\n" \
     1482       " %s Block size (for faster transfer)\n" \
     1483       " %S Fundamental block size (for block counts)\n" \
     1484       " %t Type in hex\n" \
     1485       " %T Type in human readable form" \
     1486    ) \
     1487
     1488#define stty_trivial_usage \
     1489       "[-a|g] [-F DEVICE] [SETTING]..." \
     1490
     1491#define stty_full_usage "\n\n" \
     1492       "Without arguments, prints baud rate, line discipline,\n" \
     1493       "and deviations from stty sane\n" \
     1494     "\n    -F DEVICE   Open device instead of stdin" \
     1495     "\n    -a      Print all current settings in human-readable form" \
     1496     "\n    -g      Print in stty-readable form" \
     1497     "\n    [SETTING]   See manpage" \
     1498
     1499#define sum_trivial_usage \
     1500       "[-rs] [FILE]..." \
     1501
     1502#define sum_full_usage "\n\n" \
     1503       "Checksum and count the blocks in a file\n" \
     1504     "\n    -r  Use BSD sum algorithm (1K blocks)" \
     1505     "\n    -s  Use System V sum algorithm (512byte blocks)" \
     1506
     1507#define sync_trivial_usage \
     1508       "" \
     1509
     1510#define sync_full_usage "\n\n" \
     1511       "Write all buffered blocks to disk" \
     1512
     1513#define tac_trivial_usage \
     1514    "[FILE]..." \
     1515
     1516#define tac_full_usage "\n\n" \
     1517    "Concatenate FILEs and print them in reverse" \
     1518
     1519#define tail_trivial_usage \
     1520       "[OPTIONS] [FILE]..." \
     1521
     1522#define tail_full_usage "\n\n" \
     1523       "Print last 10 lines of each FILE (or stdin) to stdout.\n" \
     1524       "With more than one FILE, precede each with a filename header.\n" \
     1525     "\n    -f      Print data as file grows" \
     1526    IF_FEATURE_FANCY_TAIL( \
     1527     "\n    -s SECONDS  Wait SECONDS between reads with -f" \
     1528    ) \
     1529     "\n    -n N[kbm]   Print last N lines" \
     1530    IF_FEATURE_FANCY_TAIL( \
     1531     "\n    -c N[kbm]   Print last N bytes" \
     1532     "\n    -q      Never print headers" \
     1533     "\n    -v      Always print headers" \
     1534     "\n" \
     1535     "\nN may be suffixed by k (x1024), b (x512), or m (x1024^2)." \
     1536     "\nIf N starts with a '+', output begins with the Nth item from the start" \
     1537     "\nof each file, not from the end." \
     1538    ) \
     1539
     1540#define tail_example_usage \
     1541       "$ tail -n 1 /etc/resolv.conf\n" \
     1542       "nameserver 10.0.0.1\n" \
     1543
     1544#define tee_trivial_usage \
     1545       "[-ai] [FILE]..." \
     1546
     1547#define tee_full_usage "\n\n" \
     1548       "Copy stdin to each FILE, and also to stdout\n" \
     1549     "\n    -a  Append to the given FILEs, don't overwrite" \
     1550     "\n    -i  Ignore interrupt signals (SIGINT)" \
     1551
     1552#define tee_example_usage \
     1553       "$ echo \"Hello\" | tee /tmp/foo\n" \
     1554       "$ cat /tmp/foo\n" \
     1555       "Hello\n" \
     1556
     1557#define test_trivial_usage \
     1558       "EXPRESSION ]" \
     1559
     1560#define test_full_usage "\n\n" \
     1561       "Check file types, compare values etc. Return a 0/1 exit code\n" \
     1562       "depending on logical value of EXPRESSION" \
     1563
     1564#define test_example_usage \
     1565       "$ test 1 -eq 2\n" \
     1566       "$ echo $?\n" \
     1567       "1\n" \
     1568       "$ test 1 -eq 1\n" \
     1569       "$ echo $?\n" \
     1570       "0\n" \
     1571       "$ [ -d /etc ]\n" \
     1572       "$ echo $?\n" \
     1573       "0\n" \
     1574       "$ [ -d /junk ]\n" \
     1575       "$ echo $?\n" \
     1576       "1\n" \
     1577
     1578#define touch_trivial_usage \
     1579       "[-c]" IF_FEATURE_TOUCH_SUSV3(" [-d DATE] [-t DATE] [-r FILE]") " FILE..." \
     1580
     1581#define touch_full_usage "\n\n" \
     1582       "Update the last-modified date on the given FILE[s]\n" \
     1583     "\n    -c  Don't create files" \
     1584    IF_FEATURE_TOUCH_SUSV3( \
     1585     "\n    -d DT   Date/time to use" \
     1586     "\n    -t DT   Date/time to use" \
     1587     "\n    -r FILE Use FILE's date/time" \
     1588    ) \
     1589
     1590#define touch_example_usage \
     1591       "$ ls -l /tmp/foo\n" \
     1592       "/bin/ls: /tmp/foo: No such file or directory\n" \
     1593       "$ touch /tmp/foo\n" \
     1594       "$ ls -l /tmp/foo\n" \
     1595       "-rw-rw-r--    1 andersen andersen        0 Apr 15 01:11 /tmp/foo\n" \
     1596
     1597#define tr_trivial_usage \
     1598       "[-cds] STRING1 [STRING2]" \
     1599
     1600#define tr_full_usage "\n\n" \
     1601       "Translate, squeeze, or delete characters from stdin, writing to stdout\n" \
     1602     "\n    -c  Take complement of STRING1" \
     1603     "\n    -d  Delete input characters coded STRING1" \
     1604     "\n    -s  Squeeze multiple output characters of STRING2 into one character" \
     1605
     1606#define tr_example_usage \
     1607       "$ echo \"gdkkn vnqkc\" | tr [a-y] [b-z]\n" \
     1608       "hello world\n" \
     1609
     1610#define true_trivial_usage \
     1611       "" \
     1612
     1613#define true_full_usage "\n\n" \
     1614       "Return an exit code of TRUE (0)" \
     1615
     1616#define true_example_usage \
     1617       "$ true\n" \
     1618       "$ echo $?\n" \
     1619       "0\n" \
     1620
     1621#define tty_trivial_usage \
     1622       "" \
     1623
     1624#define tty_full_usage "\n\n" \
     1625       "Print file name of stdin's terminal" \
     1626    IF_INCLUDE_SUSv2( "\n" \
     1627     "\n    -s  Print nothing, only return exit status" \
     1628    ) \
     1629
     1630#define tty_example_usage \
     1631       "$ tty\n" \
     1632       "/dev/tty2\n" \
     1633
     1634#define uname_trivial_usage \
     1635       "[-amnrspv]" \
     1636
     1637#define uname_full_usage "\n\n" \
     1638       "Print system information\n" \
     1639     "\n    -a  Print all" \
     1640     "\n    -m  The machine (hardware) type" \
     1641     "\n    -n  Hostname" \
     1642     "\n    -r  OS release" \
     1643     "\n    -s  OS name (default)" \
     1644     "\n    -p  Processor type" \
     1645     "\n    -v  OS version" \
     1646
     1647#define uname_example_usage \
     1648       "$ uname -a\n" \
     1649       "Linux debian 2.4.23 #2 Tue Dec 23 17:09:10 MST 2003 i686 GNU/Linux\n" \
     1650
     1651#define uniq_trivial_usage \
     1652       "[-cdu][-f,s,w N] [INPUT [OUTPUT]]" \
     1653
     1654#define uniq_full_usage "\n\n" \
     1655       "Discard duplicate lines\n" \
     1656     "\n    -c  Prefix lines by the number of occurrences" \
     1657     "\n    -d  Only print duplicate lines" \
     1658     "\n    -u  Only print unique lines" \
     1659     "\n    -f N    Skip first N fields" \
     1660     "\n    -s N    Skip first N chars (after any skipped fields)" \
     1661     "\n    -w N    Compare N characters in line" \
     1662
     1663#define uniq_example_usage \
     1664       "$ echo -e \"a\\na\\nb\\nc\\nc\\na\" | sort | uniq\n" \
     1665       "a\n" \
     1666       "b\n" \
     1667       "c\n" \
     1668
     1669#define usleep_trivial_usage \
     1670       "N" \
     1671
     1672#define usleep_full_usage "\n\n" \
     1673       "Pause for N microseconds" \
     1674
     1675#define usleep_example_usage \
     1676       "$ usleep 1000000\n" \
     1677       "[pauses for 1 second]\n" \
     1678
     1679#define uudecode_trivial_usage \
     1680       "[-o OUTFILE] [INFILE]" \
     1681
     1682#define uudecode_full_usage "\n\n" \
     1683       "Uudecode a file\n" \
     1684       "Finds OUTFILE in uuencoded source unless -o is given" \
     1685
     1686#define uudecode_example_usage \
     1687       "$ uudecode -o busybox busybox.uu\n" \
     1688       "$ ls -l busybox\n" \
     1689       "-rwxr-xr-x   1 ams      ams        245264 Jun  7 21:35 busybox\n" \
     1690
    1431691#define base64_trivial_usage \
    1441692    "[-d] [FILE]" \
     
    1461694#define base64_full_usage "\n\n" \
    1471695       "Base64 encode or decode FILE to standard output" \
    148      "\nOptions:" \
    1491696     "\n    -d  Decode data" \
     1697
     1698#define uuencode_trivial_usage \
     1699       "[-m] [FILE] STORED_FILENAME" \
     1700
     1701#define uuencode_full_usage "\n\n" \
     1702       "Uuencode FILE (or stdin) to stdout\n" \
     1703     "\n    -m  Use base64 encoding per RFC1521" \
     1704
     1705#define uuencode_example_usage \
     1706       "$ uuencode busybox busybox\n" \
     1707       "begin 755 busybox\n" \
     1708       "<encoded file snipped>\n" \
     1709       "$ uudecode busybox busybox > busybox.uu\n" \
     1710       "$\n" \
    1501711
    1511712#define wc_trivial_usage \
     
    1541715#define wc_full_usage "\n\n" \
    1551716       "Count lines, words, and bytes for each FILE (or stdin)\n" \
    156      "\nOptions:" \
    1571717     "\n    -c  Count bytes" \
    1581718    IF_UNICODE_SUPPORT( \
     
    1671727       "     31      46    1365 /etc/passwd\n" \
    1681728
     1729#define whoami_trivial_usage \
     1730       "" \
     1731
     1732#define whoami_full_usage "\n\n" \
     1733       "Print the user name associated with the current effective user id" \
     1734
     1735#define users_trivial_usage \
     1736       "" \
     1737
     1738#define users_full_usage "\n\n" \
     1739       "Print the users currently logged on" \
     1740
     1741#define who_trivial_usage \
     1742       "[-a]" \
     1743
     1744#define who_full_usage "\n\n" \
     1745       "Show who is logged on\n" \
     1746     "\n    -a  Show all" \
     1747     "\n    -H  Print column headers" \
     1748
    1691749#define yes_trivial_usage \
    1701750       "[STRING]" \
     
    1731753       "Repeatedly output a line with STRING, or 'y'" \
    1741754
     1755#define mktemp_trivial_usage \
     1756       "[-dt] [-p DIR] [TEMPLATE]" \
     1757
     1758#define mktemp_full_usage "\n\n" \
     1759       "Create a temporary file with name based on TEMPLATE and print its name.\n" \
     1760       "TEMPLATE must end with XXXXXX (e.g. [/dir/]nameXXXXXX).\n" \
     1761       "Without TEMPLATE, -t tmp.XXXXXX is assumed.\n" \
     1762     "\n    -d  Make directory, not file" \
     1763     "\n    -q  Fail silently on errors" \
     1764     "\n    -t  Prepend base directory name to TEMPLATE" \
     1765     "\n    -p DIR  Use DIR as a base directory (implies -t)" \
     1766     "\n    -u  Do not create anything; print a name" \
     1767     "\n" \
     1768     "\nBase directory is: -p DIR, else $TMPDIR, else /tmp" \
     1769
     1770#define mktemp_example_usage \
     1771       "$ mktemp /tmp/temp.XXXXXX\n" \
     1772       "/tmp/temp.mWiLjM\n" \
     1773       "$ ls -la /tmp/temp.mWiLjM\n" \
     1774       "-rw-------    1 andersen andersen        0 Apr 25 17:10 /tmp/temp.mWiLjM\n" \
     1775
     1776#define pipe_progress_trivial_usage NOUSAGE_STR \
     1777
     1778#define pipe_progress_full_usage "" \
     1779
     1780#define run_parts_trivial_usage \
     1781       "[-t"IF_FEATURE_RUN_PARTS_FANCY("l")"] [-a ARG]... [-u MASK] DIRECTORY" \
     1782
     1783#define run_parts_full_usage "\n\n" \
     1784       "Run a bunch of scripts in DIRECTORY\n" \
     1785     "\n    -t  Dry run" \
     1786    IF_FEATURE_RUN_PARTS_FANCY( \
     1787     "\n    -l  Print names of matching files even if they are not executable" \
     1788    ) \
     1789     "\n    -a ARG  Pass ARG as argument to programs" \
     1790     "\n    -u MASK Set umask to MASK before running programs" \
     1791
     1792#define run_parts_example_usage \
     1793       "$ run-parts -a start /etc/init.d\n" \
     1794       "$ run-parts -a stop=now /etc/init.d\n\n" \
     1795       "Let's assume you have a script foo/dosomething:\n" \
     1796       "#!/bin/sh\n" \
     1797       "for i in $*; do eval $i; done; unset i\n" \
     1798       "case \"$1\" in\n" \
     1799       "start*) echo starting something;;\n" \
     1800       "stop*) set -x; shutdown -h $stop;;\n" \
     1801       "esac\n\n" \
     1802       "Running this yields:\n" \
     1803       "$run-parts -a stop=+4m foo/\n" \
     1804       "+ shutdown -h +4m" \
     1805
     1806#define start_stop_daemon_trivial_usage \
     1807       "[OPTIONS] [-S|-K] ... [-- ARGS...]" \
     1808
     1809#define start_stop_daemon_full_usage "\n\n" \
     1810       "Search for matching processes, and then\n" \
     1811       "-K: stop all matching processes.\n" \
     1812       "-S: start a process unless a matching process is found.\n" \
     1813    IF_FEATURE_START_STOP_DAEMON_LONG_OPTIONS( \
     1814     "\nProcess matching:" \
     1815     "\n    -u,--user USERNAME|UID  Match only this user's processes" \
     1816     "\n    -n,--name NAME      Match processes with NAME" \
     1817     "\n                in comm field in /proc/PID/stat" \
     1818     "\n    -x,--exec EXECUTABLE    Match processes with this command" \
     1819     "\n                in /proc/PID/{exe,cmdline}" \
     1820     "\n    -p,--pidfile FILE   Match a process with PID from the file" \
     1821     "\n    All specified conditions must match" \
     1822     "\n-S only:" \
     1823     "\n    -x,--exec EXECUTABLE    Program to run" \
     1824     "\n    -a,--startas NAME   Zeroth argument" \
     1825     "\n    -b,--background     Background" \
     1826    IF_FEATURE_START_STOP_DAEMON_FANCY( \
     1827     "\n    -N,--nicelevel N    Change nice level" \
     1828    ) \
     1829     "\n    -c,--chuid USER[:[GRP]] Change to user/group" \
     1830     "\n    -m,--make-pidfile   Write PID to the pidfile specified by -p" \
     1831     "\n-K only:" \
     1832     "\n    -s,--signal SIG     Signal to send" \
     1833     "\n    -t,--test       Match only, exit with 0 if a process is found" \
     1834     "\nOther:" \
     1835    IF_FEATURE_START_STOP_DAEMON_FANCY( \
     1836     "\n    -o,--oknodo     Exit with status 0 if nothing is done" \
     1837     "\n    -v,--verbose        Verbose" \
     1838    ) \
     1839     "\n    -q,--quiet      Quiet" \
     1840    ) \
     1841    IF_NOT_FEATURE_START_STOP_DAEMON_LONG_OPTIONS( \
     1842     "\nProcess matching:" \
     1843     "\n    -u USERNAME|UID Match only this user's processes" \
     1844     "\n    -n NAME     Match processes with NAME" \
     1845     "\n            in comm field in /proc/PID/stat" \
     1846     "\n    -x EXECUTABLE   Match processes with this command" \
     1847     "\n            command in /proc/PID/cmdline" \
     1848     "\n    -p FILE     Match a process with PID from the file" \
     1849     "\n    All specified conditions must match" \
     1850     "\n-S only:" \
     1851     "\n    -x EXECUTABLE   Program to run" \
     1852     "\n    -a NAME     Zeroth argument" \
     1853     "\n    -b      Background" \
     1854    IF_FEATURE_START_STOP_DAEMON_FANCY( \
     1855     "\n    -N N        Change nice level" \
     1856    ) \
     1857     "\n    -c USER[:[GRP]] Change to user/group" \
     1858     "\n    -m      Write PID to the pidfile specified by -p" \
     1859     "\n-K only:" \
     1860     "\n    -s SIG      Signal to send" \
     1861     "\n    -t      Match only, exit with 0 if a process is found" \
     1862     "\nOther:" \
     1863    IF_FEATURE_START_STOP_DAEMON_FANCY( \
     1864     "\n    -o      Exit with status 0 if nothing is done" \
     1865     "\n    -v      Verbose" \
     1866    ) \
     1867     "\n    -q      Quiet" \
     1868    ) \
     1869
     1870#define which_trivial_usage \
     1871       "[COMMAND]..." \
     1872
     1873#define which_full_usage "\n\n" \
     1874       "Locate a COMMAND" \
     1875
     1876#define which_example_usage \
     1877       "$ which login\n" \
     1878       "/bin/login\n" \
     1879
     1880#define chattr_trivial_usage \
     1881       "[-R] [-+=AacDdijsStTu] [-v VERSION] [FILE]..." \
     1882
     1883#define chattr_full_usage "\n\n" \
     1884       "Change file attributes on an ext2 fs\n" \
     1885     "\nModifiers:" \
     1886     "\n    -   Remove attributes" \
     1887     "\n    +   Add attributes" \
     1888     "\n    =   Set attributes" \
     1889     "\nAttributes:" \
     1890     "\n    A   Don't track atime" \
     1891     "\n    a   Append mode only" \
     1892     "\n    c   Enable compress" \
     1893     "\n    D   Write dir contents synchronously" \
     1894     "\n    d   Don't backup with dump" \
     1895     "\n    i   Cannot be modified (immutable)" \
     1896     "\n    j   Write all data to journal first" \
     1897     "\n    s   Zero disk storage when deleted" \
     1898     "\n    S   Write file contents synchronously" \
     1899     "\n    t   Disable tail-merging of partial blocks with other files" \
     1900     "\n    u   Allow file to be undeleted" \
     1901     "\n    -R  Recurse" \
     1902     "\n    -v  Set the file's version/generation number" \
     1903
     1904#define fsck_trivial_usage \
     1905       "[-ANPRTV] [-C FD] [-t FSTYPE] [FS_OPTS] [BLOCKDEV]..." \
     1906
     1907#define fsck_full_usage "\n\n" \
     1908       "Check and repair filesystems\n" \
     1909     "\n    -A  Walk /etc/fstab and check all filesystems" \
     1910     "\n    -N  Don't execute, just show what would be done" \
     1911     "\n    -P  With -A, check filesystems in parallel" \
     1912     "\n    -R  With -A, skip the root filesystem" \
     1913     "\n    -T  Don't show title on startup" \
     1914     "\n    -V  Verbose" \
     1915     "\n    -C n    Write status information to specified filedescriptor" \
     1916     "\n    -t TYPE List of filesystem types to check" \
     1917
     1918#define lsattr_trivial_usage \
     1919       "[-Radlv] [FILE]..." \
     1920
     1921#define lsattr_full_usage "\n\n" \
     1922       "List file attributes on an ext2 fs\n" \
     1923     "\n    -R  Recurse" \
     1924     "\n    -a  Don't hide entries starting with ." \
     1925     "\n    -d  List directory entries instead of contents" \
     1926     "\n    -l  List long flag names" \
     1927     "\n    -v  List the file's version/generation number" \
     1928
    1751929#define tune2fs_trivial_usage \
    176        "[-c MOUNT_CNT] " \
     1930       "[-c MAX_MOUNT_COUNT] " \
    1771931       "[-i DAYS] " \
     1932       "[-C MOUNT_COUNT] " \
    1781933       "[-L LABEL] " \
    1791934       "BLOCKDEV" \
     
    1811936#define tune2fs_full_usage "\n\n" \
    1821937       "Adjust filesystem options on ext[23] filesystems" \
     1938
     1939#define awk_trivial_usage \
     1940       "[OPTIONS] [AWK_PROGRAM] [FILE]..." \
     1941
     1942#define awk_full_usage "\n\n" \
     1943       "    -v VAR=VAL  Set variable" \
     1944     "\n    -F SEP      Use SEP as field separator" \
     1945     "\n    -f FILE     Read program from FILE" \
     1946
     1947#define cmp_trivial_usage \
     1948       "[-l] [-s] FILE1 [FILE2" IF_DESKTOP(" [SKIP1 [SKIP2]]") "]" \
     1949
     1950#define cmp_full_usage "\n\n" \
     1951       "Compare FILE1 with FILE2 (or stdin)\n" \
     1952     "\n    -l  Write the byte numbers (decimal) and values (octal)" \
     1953     "\n        for all differing bytes" \
     1954     "\n    -s  Quiet" \
     1955
     1956#define diff_trivial_usage \
     1957       "[-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2" \
     1958
     1959#define diff_full_usage "\n\n" \
     1960       "Compare files line by line and output the differences between them.\n" \
     1961       "This implementation supports unified diffs only.\n" \
     1962     "\n    -a  Treat all files as text" \
     1963     "\n    -b  Ignore changes in the amount of whitespace" \
     1964     "\n    -B  Ignore changes whose lines are all blank" \
     1965     "\n    -d  Try hard to find a smaller set of changes" \
     1966     "\n    -i  Ignore case differences" \
     1967     "\n    -L  Use LABEL instead of the filename in the unified header" \
     1968     "\n    -N  Treat absent files as empty" \
     1969     "\n    -q  Output only whether files differ" \
     1970     "\n    -r  Recurse" \
     1971     "\n    -S  Start with FILE when comparing directories" \
     1972     "\n    -T  Make tabs line up by prefixing a tab when necessary" \
     1973     "\n    -s  Report when two files are the same" \
     1974     "\n    -t  Expand tabs to spaces in output" \
     1975     "\n    -U  Output LINES lines of context" \
     1976     "\n    -w  Ignore all whitespace" \
     1977
     1978#define ed_trivial_usage "" \
     1979
     1980#define ed_full_usage "" \
    1831981
    1841982#define patch_trivial_usage \
     
    1911989     "\n    -R,--reverse        Reverse patch" \
    1921990     "\n    -N,--forward        Ignore already applied patches" \
    193      "\n    --dry-run       Don't actually change files" \
    1941991     "\n    -E,--remove-empty-files Remove output files if they become empty" \
    1951992    ) \
     
    2062003       "$ patch -p0 -i example.diff" \
    2072004
     2005#define sed_trivial_usage \
     2006       "[-inr] [-f FILE]... [-e CMD]... [FILE]...\n" \
     2007       "or: sed [-inr] CMD [FILE]..." \
     2008
     2009#define sed_full_usage "\n\n" \
     2010       "    -e CMD  Add CMD to sed commands to be executed" \
     2011     "\n    -f FILE Add FILE contents to sed commands to be executed" \
     2012     "\n    -i[SFX] Edit files in-place (otherwise sends to stdout)" \
     2013     "\n        Optionally back files up, appending SFX" \
     2014     "\n    -n  Suppress automatic printing of pattern space" \
     2015     "\n    -r  Use extended regex syntax" \
     2016     "\n" \
     2017     "\nIf no -e or -f, the first non-option argument is the sed command string." \
     2018     "\nRemaining arguments are input files (stdin if none)." \
     2019
     2020#define sed_example_usage \
     2021       "$ echo \"foo\" | sed -e 's/f[a-zA-Z]o/bar/g'\n" \
     2022       "bar\n" \
     2023
     2024#define vi_trivial_usage \
     2025       "[OPTIONS] [FILE]..." \
     2026
     2027#define vi_full_usage "\n\n" \
     2028       "Edit FILE\n" \
     2029    IF_FEATURE_VI_COLON( \
     2030     "\n    -c CMD  Initial command to run ($EXINIT also available)" \
     2031    ) \
     2032    IF_FEATURE_VI_READONLY( \
     2033     "\n    -R  Read-only" \
     2034    ) \
     2035     "\n    -H  List available features" \
     2036
    2082037#define find_trivial_usage \
    209        "[PATH]... [EXPRESSION]" \
     2038       "[PATH]... [OPTIONS] [ACTIONS]" \
    2102039
    2112040#define find_full_usage "\n\n" \
    212        "Search for files. The default PATH is the current directory,\n" \
    213        "default EXPRESSION is '-print'\n" \
    214      "\nEXPRESSION may consist of:" \
     2041       "Search for files and perform actions on them.\n" \
     2042       "First failed action stops processing of current file.\n" \
     2043       "Defaults: PATH is current directory, action is '-print'\n" \
    2152044     "\n    -follow     Follow symlinks" \
    2162045    IF_FEATURE_FIND_XDEV( \
     
    2192048    IF_FEATURE_FIND_MAXDEPTH( \
    2202049     "\n    -maxdepth N Descend at most N levels. -maxdepth 0 applies" \
    221      "\n            tests/actions to command line arguments only" \
    222     ) \
     2050     "\n            actions to command line arguments only" \
    2232051     "\n    -mindepth N Don't act on first N levels" \
    224      "\n    -name PATTERN   File name (w/o directory name) matches PATTERN" \
     2052    ) \
     2053    IF_FEATURE_FIND_DEPTH( \
     2054     "\n    -depth      Act on directory *after* traversing it" \
     2055    ) \
     2056     "\n" \
     2057     "\nActions:" \
     2058    IF_FEATURE_FIND_PAREN( \
     2059     "\n    ( ACTIONS ) Group actions for -o / -a" \
     2060    ) \
     2061    IF_FEATURE_FIND_NOT( \
     2062     "\n    ! ACT       Invert ACT's success/failure" \
     2063    ) \
     2064     "\n    ACT1 [-a] ACT2  If ACT1 fails, stop, else do ACT2" \
     2065     "\n    ACT1 -o ACT2    If ACT1 succeeds, stop, else do ACT2" \
     2066     "\n            Note: -a has higher priority than -o" \
     2067     "\n    -name PATTERN   Match file name (w/o directory name) to PATTERN" \
    2252068     "\n    -iname PATTERN  Case insensitive -name" \
    2262069    IF_FEATURE_FIND_PATH( \
    227      "\n    -path PATTERN   Path matches PATTERN" \
     2070     "\n    -path PATTERN   Match path to PATTERN" \
     2071     "\n    -ipath PATTERN  Case insensitive -path" \
    2282072    ) \
    2292073    IF_FEATURE_FIND_REGEX( \
    230      "\n    -regex PATTERN  Path matches regex PATTERN" \
     2074     "\n    -regex PATTERN  Match path to regex PATTERN" \
    2312075    ) \
    2322076    IF_FEATURE_FIND_TYPE( \
    233      "\n    -type X     File type is X (X is one of: f,d,l,b,c,...)" \
     2077     "\n    -type X     File type is X (one of: f,d,l,b,c,...)" \
    2342078    ) \
    2352079    IF_FEATURE_FIND_PERM( \
    236      "\n    -perm NNN   Permissions match any of (+NNN), all of (-NNN)," \
    237      "\n            or exactly NNN" \
     2080     "\n    -perm MASK  At least one mask bit (+MASK), all bits (-MASK)," \
     2081     "\n            or exactly MASK bits are set in file's mode" \
    2382082    ) \
    2392083    IF_FEATURE_FIND_MTIME( \
    240      "\n    -mtime DAYS Modified time is greater than (+N), less than (-N)," \
    241      "\n            or exactly N days" \
     2084     "\n    -mtime DAYS mtime is greater than (+N), less than (-N)," \
     2085     "\n            or exactly N days in the past" \
    2422086    ) \
    2432087    IF_FEATURE_FIND_MMIN( \
    244      "\n    -mmin MINS  Modified time is greater than (+N), less than (-N)," \
    245      "\n            or exactly N minutes" \
     2088     "\n    -mmin MINS  mtime is greater than (+N), less than (-N)," \
     2089     "\n            or exactly N minutes in the past" \
    2462090    ) \
    2472091    IF_FEATURE_FIND_NEWER( \
    248      "\n    -newer FILE Modified time is more recent than FILE's" \
     2092     "\n    -newer FILE mtime is more recent than FILE's" \
    2492093    ) \
    2502094    IF_FEATURE_FIND_INUM( \
     
    2522096    ) \
    2532097    IF_FEATURE_FIND_USER( \
    254      "\n    -user NAME  File is owned by user NAME (numeric user ID allowed)" \
     2098     "\n    -user NAME/ID   File is owned by given user" \
    2552099    ) \
    2562100    IF_FEATURE_FIND_GROUP( \
    257      "\n    -group NAME File belongs to group NAME (numeric group ID allowed)" \
    258     ) \
    259     IF_FEATURE_FIND_DEPTH( \
    260      "\n    -depth      Process directory name after traversing it" \
     2101     "\n    -group NAME/ID  File is owned by given group" \
    2612102    ) \
    2622103    IF_FEATURE_FIND_SIZE( \
     
    2682109     "\n            or exactly N" \
    2692110    ) \
    270      "\n    -print      Print (default and assumed)" \
     2111    IF_FEATURE_FIND_CONTEXT( \
     2112     "\n    -context CTX    File has specified security context" \
     2113    ) \
     2114    IF_FEATURE_FIND_PRUNE( \
     2115     "\n    -prune      If current file is directory, don't descend into it" \
     2116    ) \
     2117     "\nIf none of the following actions is specified, -print is assumed" \
     2118     "\n    -print      Print file name" \
    2712119    IF_FEATURE_FIND_PRINT0( \
    272      "\n    -print0     Delimit output with null characters rather than" \
    273      "\n            newlines" \
    274     ) \
    275     IF_FEATURE_FIND_CONTEXT( \
    276      "\n    -context    File has specified security context" \
     2120     "\n    -print0     Print file name, NUL terminated" \
    2772121    ) \
    2782122    IF_FEATURE_FIND_EXEC( \
    279      "\n    -exec CMD ARG ; Run CMD with all instances of {} replaced by the" \
    280      "\n            matching files" \
    281     ) \
    282     IF_FEATURE_FIND_PRUNE( \
    283      "\n    -prune      Stop traversing current subtree" \
     2123     "\n    -exec CMD ARG ; Run CMD with all instances of {} replaced by" \
     2124     "\n            file name. Fails if CMD exits with nonzero" \
    2842125    ) \
    2852126    IF_FEATURE_FIND_DELETE( \
    286      "\n    -delete     Delete files, turns on -depth option" \
    287     ) \
    288     IF_FEATURE_FIND_PAREN( \
    289      "\n    (EXPR)      Group an expression" \
     2127     "\n    -delete     Delete current file/directory. Turns on -depth option" \
    2902128    ) \
    2912129
     
    3052143#define grep_full_usage "\n\n" \
    3062144       "Search for PATTERN in FILEs (or stdin)\n" \
    307      "\nOptions:" \
    3082145     "\n    -H  Add 'filename:' prefix" \
    3092146     "\n    -h  Do not add 'filename:' prefix" \
     
    3192156     "\n    -i  Ignore case" \
    3202157     "\n    -w  Match whole words only" \
     2158     "\n    -x  Match whole lines only" \
    3212159     "\n    -F  PATTERN is a literal (not regexp)" \
    3222160    IF_FEATURE_GREP_EGREP_ALIAS( \
     
    3542192#define xargs_full_usage "\n\n" \
    3552193       "Run PROG on every item given by stdin\n" \
    356      "\nOptions:" \
    3572194    IF_FEATURE_XARGS_SUPPORT_CONFIRMATION( \
    3582195     "\n    -p  Ask user whether to run each command" \
     
    3792216#define bootchartd_full_usage "\n\n" \
    3802217       "Create /var/log/bootchart.tgz with boot chart data\n" \
    381      "\nOptions:" \
    3822218     "\nstart: start background logging; with PROG, run PROG, then kill logging with USR1" \
    3832219     "\nstop: send USR1 to all bootchartd processes" \
     
    3902226#define halt_full_usage "\n\n" \
    3912227       "Halt the system\n" \
    392      "\nOptions:" \
    3932228     "\n    -d SEC  Delay interval" \
    3942229     "\n    -n  Do not sync" \
     
    4032238#define poweroff_full_usage "\n\n" \
    4042239       "Halt and shut off power\n" \
    405      "\nOptions:" \
    4062240     "\n    -d SEC  Delay interval" \
    4072241     "\n    -n  Do not sync" \
     
    4132247#define reboot_full_usage "\n\n" \
    4142248       "Reboot the system\n" \
    415      "\nOptions:" \
    4162249     "\n    -d SEC  Delay interval" \
    4172250     "\n    -n  Do not sync" \
     
    5632396       "    n   Disallow write access to your terminal" \
    5642397
     2398#define parse_trivial_usage \
     2399       "[-x] [-n MAXTOKENS] [-m MINTOKENS] [-d DELIMS] [-f FLAGS] FILE..." \
     2400
     2401#define parse_full_usage "\n\n" \
     2402       "    -x  Suppress output (for benchmarking)" \
     2403
     2404#define addgroup_trivial_usage \
     2405       "[-g GID] " IF_FEATURE_ADDUSER_TO_GROUP("[USER] ") "GROUP" \
     2406
     2407#define addgroup_full_usage "\n\n" \
     2408       "Add a group " IF_FEATURE_ADDUSER_TO_GROUP("or add a user to a group") "\n" \
     2409     "\n    -g GID  Group id" \
     2410     "\n    -S  Create a system group" \
     2411
    5652412#define add_shell_trivial_usage \
    5662413       "SHELL..." \
     
    5752422       "Remove SHELLs from /etc/shells" \
    5762423
     2424#define adduser_trivial_usage \
     2425       "[OPTIONS] USER [GROUP]" \
     2426
     2427#define adduser_full_usage "\n\n" \
     2428       "Create new user, or add USER to GROUP\n" \
     2429     "\n    -h DIR      Home directory" \
     2430     "\n    -g GECOS    GECOS field" \
     2431     "\n    -s SHELL    Login shell" \
     2432     "\n    -G GRP      Add user to existing group" \
     2433     "\n    -S      Create a system user" \
     2434     "\n    -D      Don't assign a password" \
     2435     "\n    -H      Don't create home directory" \
     2436     "\n    -u UID      User id" \
     2437
     2438#define chpasswd_trivial_usage \
     2439    IF_LONG_OPTS("[--md5|--encrypted]") IF_NOT_LONG_OPTS("[-m|-e]") \
     2440
     2441#define chpasswd_full_usage "\n\n" \
     2442       "Read user:password from stdin and update /etc/passwd\n" \
     2443    IF_LONG_OPTS( \
     2444     "\n    -e,--encrypted  Supplied passwords are in encrypted form" \
     2445     "\n    -m,--md5    Use MD5 encryption instead of DES" \
     2446    ) \
     2447    IF_NOT_LONG_OPTS( \
     2448     "\n    -e  Supplied passwords are in encrypted form" \
     2449     "\n    -m  Use MD5 encryption instead of DES" \
     2450    ) \
     2451
     2452#define cryptpw_trivial_usage \
     2453       "[OPTIONS] [PASSWORD] [SALT]" \
     2454
     2455#define cryptpw_full_usage "\n\n" \
     2456       "Crypt PASSWORD using crypt(3)\n" \
     2457    IF_LONG_OPTS( \
     2458     "\n    -P,--password-fd=N  Read password from fd N" \
     2459     "\n    -m,--method=TYPE    Encryption method" \
     2460     "\n    -S,--salt=SALT" \
     2461    ) \
     2462    IF_NOT_LONG_OPTS( \
     2463     "\n    -P N    Read password from fd N" \
     2464     "\n    -m TYPE Encryption method TYPE" \
     2465     "\n    -S SALT" \
     2466    ) \
     2467
     2468#define mkpasswd_trivial_usage \
     2469       "[OPTIONS] [PASSWORD] [SALT]" \
     2470
     2471#define mkpasswd_full_usage "\n\n" \
     2472       "Crypt PASSWORD using crypt(3)\n" \
     2473    IF_LONG_OPTS( \
     2474     "\n    -P,--password-fd=N  Read password from fd N" \
     2475     "\n    -m,--method=TYPE    Encryption method" \
     2476     "\n    -S,--salt=SALT" \
     2477    ) \
     2478    IF_NOT_LONG_OPTS( \
     2479     "\n    -P N    Read password from fd N" \
     2480     "\n    -m TYPE Encryption method TYPE" \
     2481     "\n    -S SALT" \
     2482    ) \
     2483
     2484#define deluser_trivial_usage \
     2485       "USER" \
     2486
     2487#define deluser_full_usage "\n\n" \
     2488       "Delete USER from the system" \
     2489
     2490#define delgroup_trivial_usage \
     2491    IF_FEATURE_DEL_USER_FROM_GROUP("[USER] ")"GROUP" \
     2492
     2493#define delgroup_full_usage "\n\n" \
     2494       "Delete group GROUP from the system" \
     2495    IF_FEATURE_DEL_USER_FROM_GROUP(" or user USER from group GROUP") \
     2496
     2497#define getty_trivial_usage \
     2498       "[OPTIONS] BAUD_RATE[,BAUD_RATE]... TTY [TERMTYPE]" \
     2499
     2500#define getty_full_usage "\n\n" \
     2501       "Open TTY, prompt for login name, then invoke /bin/login\n" \
     2502     "\n    -h      Enable hardware RTS/CTS flow control" \
     2503     "\n    -L      Set CLOCAL (ignore Carrier Detect state)" \
     2504     "\n    -m      Get baud rate from modem's CONNECT status message" \
     2505     "\n    -n      Don't prompt for login name" \
     2506     "\n    -w      Wait for CR or LF before sending /etc/issue" \
     2507     "\n    -i      Don't display /etc/issue" \
     2508     "\n    -f ISSUE_FILE   Display ISSUE_FILE instead of /etc/issue" \
     2509     "\n    -l LOGIN    Invoke LOGIN instead of /bin/login" \
     2510     "\n    -t SEC      Terminate after SEC if no login name is read" \
     2511     "\n    -I INITSTR  Send INITSTR before anything else" \
     2512     "\n    -H HOST     Log HOST into the utmp file as the hostname" \
     2513     "\n" \
     2514     "\nBAUD_RATE of 0 leaves it unchanged" \
     2515
     2516#define login_trivial_usage \
     2517       "[-p] [-h HOST] [[-f] USER]" \
     2518
     2519#define login_full_usage "\n\n" \
     2520       "Begin a new session on the system\n" \
     2521     "\n    -f  Don't authenticate (user already authenticated)" \
     2522     "\n    -h  Name of the remote host" \
     2523     "\n    -p  Preserve environment" \
     2524
     2525#define passwd_trivial_usage \
     2526       "[OPTIONS] [USER]" \
     2527
     2528#define passwd_full_usage "\n\n" \
     2529       "Change USER's password (default: current user)" \
     2530     "\n" \
     2531     "\n    -a ALG  Encryption method" \
     2532     "\n    -d  Set password to ''" \
     2533     "\n    -l  Lock (disable) account" \
     2534     "\n    -u  Unlock (enable) account" \
     2535
     2536#define su_trivial_usage \
     2537       "[OPTIONS] [-] [USER]" \
     2538
     2539#define su_full_usage "\n\n" \
     2540       "Run shell under USER (by default, root)\n" \
     2541     "\n    -,-l    Clear environment, run shell as login shell" \
     2542     "\n    -p,-m   Do not set new $HOME, $SHELL, $USER, $LOGNAME" \
     2543     "\n    -c CMD  Command to pass to 'sh -c'" \
     2544     "\n    -s SH   Shell to use instead of user's default" \
     2545
     2546#define sulogin_trivial_usage \
     2547       "[-t N] [TTY]" \
     2548
     2549#define sulogin_full_usage "\n\n" \
     2550       "Single user login\n" \
     2551     "\n    -t N    Timeout" \
     2552
     2553#define vlock_trivial_usage \
     2554       "[-a]" \
     2555
     2556#define vlock_full_usage "\n\n" \
     2557       "Lock a virtual terminal. A password is required to unlock.\n" \
     2558     "\n    -a  Lock all VTs" \
     2559
     2560#define popmaildir_trivial_usage \
     2561       "[OPTIONS] MAILDIR [CONN_HELPER ARGS]" \
     2562
     2563#define popmaildir_full_usage "\n\n" \
     2564       "Fetch content of remote mailbox to local maildir\n" \
     2565     "\n    -s      Skip authorization" \
     2566     "\n    -T      Get messages with TOP instead of RETR" \
     2567     "\n    -k      Keep retrieved messages on the server" \
     2568     "\n    -t SEC      Network timeout" \
     2569    IF_FEATURE_POPMAILDIR_DELIVERY( \
     2570     "\n    -F \"PROG ARGS\"    Filter program (may be repeated)" \
     2571     "\n    -M \"PROG ARGS\"    Delivery program" \
     2572    ) \
     2573     "\n" \
     2574     "\nFetch from plain POP3 server:" \
     2575     "\npopmaildir -k DIR nc pop3.server.com 110 <user_and_pass.txt" \
     2576     "\nFetch from SSLed POP3 server and delete fetched emails:" \
     2577     "\npopmaildir DIR -- openssl s_client -quiet -connect pop3.server.com:995 <user_and_pass.txt" \
     2578
     2579#define popmaildir_example_usage \
     2580       "$ popmaildir -k ~/Maildir -- nc pop.drvv.ru 110 [<password_file]\n" \
     2581       "$ popmaildir ~/Maildir -- openssl s_client -quiet -connect pop.gmail.com:995 [<password_file]\n" \
     2582
     2583#define sendmail_trivial_usage \
     2584       "[OPTIONS] [RECIPIENT_EMAIL]..." \
     2585
     2586#define sendmail_full_usage "\n\n" \
     2587       "Read email from stdin and send it\n" \
     2588     "\nStandard options:" \
     2589     "\n    -t      Read additional recipients from message body" \
     2590     "\n    -f SENDER   Sender (required)" \
     2591     "\n    -o OPTIONS  Various options. -oi implied, others are ignored" \
     2592     "\n    -i      -oi synonym. implied and ignored" \
     2593     "\n" \
     2594     "\nBusybox specific options:" \
     2595     "\n    -v      Verbose" \
     2596     "\n    -w SECS     Network timeout" \
     2597     "\n    -H 'PROG ARGS'  Run connection helper" \
     2598     "\n            Examples:" \
     2599     "\n            -H 'exec openssl s_client -quiet -tls1 -starttls smtp" \
     2600     "\n                -connect smtp.gmail.com:25' <email.txt" \
     2601     "\n                [4<username_and_passwd.txt | -auUSER -apPASS]" \
     2602     "\n            -H 'exec openssl s_client -quiet -tls1" \
     2603     "\n                -connect smtp.gmail.com:465' <email.txt" \
     2604     "\n                [4<username_and_passwd.txt | -auUSER -apPASS]" \
     2605     "\n    -S HOST[:PORT]  Server" \
     2606     "\n    -auUSER     Username for AUTH LOGIN" \
     2607     "\n    -apPASS     Password for AUTH LOGIN" \
     2608     "\n" \
     2609     "\nOther options are silently ignored; -oi -t is implied" \
     2610    IF_MAKEMIME( \
     2611     "\nUse makemime to create emails with attachments" \
     2612    ) \
     2613
     2614#define adjtimex_trivial_usage \
     2615       "[-q] [-o OFF] [-f FREQ] [-p TCONST] [-t TICK]" \
     2616
     2617#define adjtimex_full_usage "\n\n" \
     2618       "Read and optionally set system timebase parameters. See adjtimex(2)\n" \
     2619     "\n    -q  Quiet" \
     2620     "\n    -o OFF  Time offset, microseconds" \
     2621     "\n    -f FREQ Frequency adjust, integer kernel units (65536 is 1ppm)" \
     2622     "\n        (positive values make clock run faster)" \
     2623     "\n    -t TICK Microseconds per tick, usually 10000" \
     2624     "\n    -p TCONST" \
     2625
     2626#define bbconfig_trivial_usage \
     2627       "" \
     2628
     2629#define bbconfig_full_usage "\n\n" \
     2630       "Print the config file used by busybox build" \
     2631
     2632#define beep_trivial_usage \
     2633       "-f FREQ -l LEN -d DELAY -r COUNT -n" \
     2634
     2635#define beep_full_usage "\n\n" \
     2636       "    -f  Frequency in Hz" \
     2637     "\n    -l  Length in ms" \
     2638     "\n    -d  Delay in ms" \
     2639     "\n    -r  Repetitions" \
     2640     "\n    -n  Start new tone" \
     2641
     2642#define chat_trivial_usage \
     2643       "EXPECT [SEND [EXPECT [SEND...]]]" \
     2644
     2645#define chat_full_usage "\n\n" \
     2646       "Useful for interacting with a modem connected to stdin/stdout.\n" \
     2647       "A script consists of one or more \"expect-send\" pairs of strings,\n" \
     2648       "each pair is a pair of arguments. Example:\n" \
     2649       "chat '' ATZ OK ATD123456 CONNECT '' ogin: pppuser word: ppppass '~'" \
     2650
     2651#define chrt_trivial_usage \
     2652       "[-prfom] [PRIO] [PID | PROG ARGS]" \
     2653
     2654#define chrt_full_usage "\n\n" \
     2655       "Change scheduling priority and class for a process\n" \
     2656     "\n    -p  Operate on PID" \
     2657     "\n    -r  Set SCHED_RR class" \
     2658     "\n    -f  Set SCHED_FIFO class" \
     2659     "\n    -o  Set SCHED_OTHER class" \
     2660     "\n    -m  Show min/max priorities" \
     2661
     2662#define chrt_example_usage \
     2663       "$ chrt -r 4 sleep 900; x=$!\n" \
     2664       "$ chrt -f -p 3 $x\n" \
     2665       "You need CAP_SYS_NICE privileges to set scheduling attributes of a process" \
     2666
    5772667#define conspy_trivial_usage \
    578     "[-vcsndf] [-x COL] [-y LINE] [CONSOLE_NO]" \
     2668    "[-vcsndfFQ] [-x COL] [-y LINE] [CONSOLE_NO]" \
    5792669
    5802670#define conspy_full_usage "\n\n" \
     
    5822672     "\nTo exit, quickly press ESC 3 times." \
    5832673     "\n" \
    584      "\nOptions:" \
    5852674     "\n    -v  Don't send keystrokes to the console" \
    586      "\n    -c  Create missing devices in /dev" \
     2675     "\n    -c  Create missing /dev/{tty,vcsa}N" \
    5872676     "\n    -s  Open a SHELL session" \
    5882677     "\n    -n  Black & white" \
    5892678     "\n    -d  Dump console to stdout" \
    5902679     "\n    -f  Follow cursor" \
     2680     "\n    -F  Assume console is on a framebuffer device" \
     2681     "\n    -Q  Disable exit on ESC-ESC-ESC" \
    5912682     "\n    -x COL  Starting column" \
    5922683     "\n    -y LINE Starting line" \
    5932684
     2685#define crond_trivial_usage \
     2686       "-fbS -l N " IF_FEATURE_CROND_D("-d N ") "-L LOGFILE -c DIR" \
     2687
     2688#define crond_full_usage "\n\n" \
     2689       "    -f  Foreground" \
     2690     "\n    -b  Background (default)" \
     2691     "\n    -S  Log to syslog (default)" \
     2692     "\n    -l  Set log level. 0 is the most verbose, default 8" \
     2693    IF_FEATURE_CROND_D( \
     2694     "\n    -d  Set log level, log to stderr" \
     2695    ) \
     2696     "\n    -L  Log to file" \
     2697     "\n    -c  Working dir" \
     2698
     2699#define crontab_trivial_usage \
     2700       "[-c DIR] [-u USER] [-ler]|[FILE]" \
     2701
     2702#define crontab_full_usage "\n\n" \
     2703       "    -c  Crontab directory" \
     2704     "\n    -u  User" \
     2705     "\n    -l  List crontab" \
     2706     "\n    -e  Edit crontab" \
     2707     "\n    -r  Delete crontab" \
     2708     "\n    FILE    Replace crontab by FILE ('-': stdin)" \
     2709
    5942710#define dc_trivial_usage \
    5952711       "EXPRESSION..." \
     
    5972713#define dc_full_usage "\n\n" \
    5982714       "Tiny RPN calculator. Operations:\n" \
    599        "+, add, -, sub, *, mul, /, div, %, mod, **, exp, and, or, not, eor,\n" \
     2715       "+, add, -, sub, *, mul, /, div, %, mod, "IF_FEATURE_DC_LIBM("**, exp, ")"and, or, not, xor,\n" \
    6002716       "p - print top of the stack (without popping),\n" \
    6012717       "f - print entire stack,\n" \
    6022718       "o - pop the value and set output radix (must be 10, 16, 8 or 2).\n" \
    603        "Examples: 'dc 2 2 add' -> 4, 'dc 8 8 * 2 2 + /' -> 16" \
     2719       "Examples: 'dc 2 2 add p' -> 4, 'dc 8 8 mul 2 2 + / p' -> 16" \
    6042720
    6052721#define dc_example_usage \
     
    6152731       "64\n" \
    6162732
     2733#define devfsd_trivial_usage \
     2734       "mntpnt [-v]" IF_DEVFSD_FG_NP("[-fg][-np]") \
     2735
     2736#define devfsd_full_usage "\n\n" \
     2737       "Manage devfs permissions and old device name symlinks\n" \
     2738     "\n    mntpnt  The mount point where devfs is mounted" \
     2739     "\n    -v  Print the protocol version numbers for devfsd" \
     2740     "\n        and the kernel-side protocol version and exit" \
     2741    IF_DEVFSD_FG_NP( \
     2742     "\n    -fg Run in foreground" \
     2743     "\n    -np Exit after parsing the configuration file" \
     2744     "\n        and processing synthetic REGISTER events," \
     2745     "\n        don't poll for events" \
     2746    ) \
     2747
     2748#define devmem_trivial_usage \
     2749    "ADDRESS [WIDTH [VALUE]]" \
     2750
     2751#define devmem_full_usage "\n\n" \
     2752       "Read/write from physical address\n" \
     2753     "\n    ADDRESS Address to act upon" \
     2754     "\n    WIDTH   Width (8/16/...)" \
     2755     "\n    VALUE   Data to be written" \
     2756
     2757#define eject_trivial_usage \
     2758       "[-t] [-T] [DEVICE]" \
     2759
     2760#define eject_full_usage "\n\n" \
     2761       "Eject DEVICE or default /dev/cdrom\n" \
     2762    IF_FEATURE_EJECT_SCSI( \
     2763     "\n    -s  SCSI device" \
     2764    ) \
     2765     "\n    -t  Close tray" \
     2766     "\n    -T  Open/close tray (toggle)" \
     2767
     2768#define fbsplash_trivial_usage \
     2769       "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD]" \
     2770
     2771#define fbsplash_full_usage "\n\n" \
     2772       "    -s  Image" \
     2773     "\n    -c  Hide cursor" \
     2774     "\n    -d  Framebuffer device (default /dev/fb0)" \
     2775     "\n    -i  Config file (var=value):" \
     2776     "\n            BAR_LEFT,BAR_TOP,BAR_WIDTH,BAR_HEIGHT" \
     2777     "\n            BAR_R,BAR_G,BAR_B" \
     2778     "\n    -f  Control pipe (else exit after drawing image)" \
     2779     "\n            commands: 'NN' (% for progress bar) or 'exit'" \
     2780
     2781#define flashcp_trivial_usage \
     2782       "-v FILE MTD_DEVICE" \
     2783
     2784#define flashcp_full_usage "\n\n" \
     2785       "Copy an image to MTD device\n" \
     2786     "\n    -v  Verbose" \
     2787
     2788#define flash_eraseall_trivial_usage \
     2789       "[-jq] MTD_DEVICE" \
     2790
     2791#define flash_eraseall_full_usage "\n\n" \
     2792       "Erase an MTD device\n" \
     2793     "\n    -j  Format the device for jffs2" \
     2794     "\n    -q  Don't display progress messages" \
     2795
     2796#define flash_lock_trivial_usage \
     2797       "MTD_DEVICE OFFSET SECTORS" \
     2798
     2799#define flash_lock_full_usage "\n\n" \
     2800       "Lock part or all of an MTD device. If SECTORS is -1, then all sectors\n" \
     2801       "will be locked, regardless of the value of OFFSET" \
     2802
     2803#define flash_unlock_trivial_usage \
     2804       "MTD_DEVICE" \
     2805
     2806#define flash_unlock_full_usage "\n\n" \
     2807       "Unlock an MTD device" \
     2808
     2809#define hdparm_trivial_usage \
     2810       "[OPTIONS] [DEVICE]" \
     2811
     2812#define hdparm_full_usage "\n\n" \
     2813       "    -a  Get/set fs readahead" \
     2814     "\n    -A  Set drive read-lookahead flag (0/1)" \
     2815     "\n    -b  Get/set bus state (0 == off, 1 == on, 2 == tristate)" \
     2816     "\n    -B  Set Advanced Power Management setting (1-255)" \
     2817     "\n    -c  Get/set IDE 32-bit IO setting" \
     2818     "\n    -C  Check IDE power mode status" \
     2819    IF_FEATURE_HDPARM_HDIO_GETSET_DMA( \
     2820     "\n    -d  Get/set using_dma flag") \
     2821     "\n    -D  Enable/disable drive defect-mgmt" \
     2822     "\n    -f  Flush buffer cache for device on exit" \
     2823     "\n    -g  Display drive geometry" \
     2824     "\n    -h  Display terse usage information" \
     2825    IF_FEATURE_HDPARM_GET_IDENTITY( \
     2826     "\n    -i  Display drive identification") \
     2827    IF_FEATURE_HDPARM_GET_IDENTITY( \
     2828     "\n    -I  Detailed/current information directly from drive") \
     2829     "\n    -k  Get/set keep_settings_over_reset flag (0/1)" \
     2830     "\n    -K  Set drive keep_features_over_reset flag (0/1)" \
     2831     "\n    -L  Set drive doorlock (0/1) (removable harddisks only)" \
     2832     "\n    -m  Get/set multiple sector count" \
     2833     "\n    -n  Get/set ignore-write-errors flag (0/1)" \
     2834     "\n    -p  Set PIO mode on IDE interface chipset (0,1,2,3,4,...)" \
     2835     "\n    -P  Set drive prefetch count" \
     2836     "\n    -Q  Get/set DMA tagged-queuing depth (if supported)" \
     2837     "\n    -r  Get/set readonly flag (DANGEROUS to set)" \
     2838    IF_FEATURE_HDPARM_HDIO_SCAN_HWIF( \
     2839     "\n    -R  Register an IDE interface (DANGEROUS)") \
     2840     "\n    -S  Set standby (spindown) timeout" \
     2841     "\n    -t  Perform device read timings" \
     2842     "\n    -T  Perform cache read timings" \
     2843     "\n    -u  Get/set unmaskirq flag (0/1)" \
     2844    IF_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF( \
     2845     "\n    -U  Unregister an IDE interface (DANGEROUS)") \
     2846     "\n    -v  Defaults; same as -mcudkrag for IDE drives" \
     2847     "\n    -V  Display program version and exit immediately" \
     2848    IF_FEATURE_HDPARM_HDIO_DRIVE_RESET( \
     2849     "\n    -w  Perform device reset (DANGEROUS)") \
     2850     "\n    -W  Set drive write-caching flag (0/1) (DANGEROUS)" \
     2851    IF_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( \
     2852     "\n    -x  Tristate device for hotswap (0/1) (DANGEROUS)") \
     2853     "\n    -X  Set IDE xfer mode (DANGEROUS)" \
     2854     "\n    -y  Put IDE drive in standby mode" \
     2855     "\n    -Y  Put IDE drive to sleep" \
     2856     "\n    -Z  Disable Seagate auto-powersaving mode" \
     2857     "\n    -z  Reread partition table" \
     2858
     2859#define inotifyd_trivial_usage \
     2860    "PROG FILE1[:MASK]..." \
     2861
     2862#define inotifyd_full_usage "\n\n" \
     2863       "Run PROG on filesystem changes." \
     2864     "\nWhen a filesystem event matching MASK occurs on FILEn," \
     2865     "\nPROG ACTUAL_EVENTS FILEn [SUBFILE] is run." \
     2866     "\nIf PROG is -, events are sent to stdout." \
     2867     "\nEvents:" \
     2868     "\n    a   File is accessed" \
     2869     "\n    c   File is modified" \
     2870     "\n    e   Metadata changed" \
     2871     "\n    w   Writable file is closed" \
     2872     "\n    0   Unwritable file is closed" \
     2873     "\n    r   File is opened" \
     2874     "\n    D   File is deleted" \
     2875     "\n    M   File is moved" \
     2876     "\n    u   Backing fs is unmounted" \
     2877     "\n    o   Event queue overflowed" \
     2878     "\n    x   File can't be watched anymore" \
     2879     "\nIf watching a directory:" \
     2880     "\n    m   Subfile is moved into dir" \
     2881     "\n    y   Subfile is moved out of dir" \
     2882     "\n    n   Subfile is created" \
     2883     "\n    d   Subfile is deleted" \
     2884     "\n" \
     2885     "\ninotifyd waits for PROG to exit." \
     2886     "\nWhen x event happens for all FILEs, inotifyd exits." \
     2887
     2888#define ionice_trivial_usage \
     2889    "[-c 1-3] [-n 0-7] [-p PID] [PROG]" \
     2890
     2891#define ionice_full_usage "\n\n" \
     2892       "Change I/O priority and class\n" \
     2893     "\n    -c  Class. 1:realtime 2:best-effort 3:idle" \
     2894     "\n    -n  Priority" \
     2895
     2896#define last_trivial_usage \
     2897       ""IF_FEATURE_LAST_FANCY("[-HW] [-f FILE]") \
     2898
     2899#define last_full_usage "\n\n" \
     2900       "Show listing of the last users that logged into the system" \
     2901    IF_FEATURE_LAST_FANCY( "\n" \
     2902     "\n    -W  Display with no host column truncation" \
     2903     "\n    -f FILE Read from FILE instead of /var/log/wtmp" \
     2904    ) \
     2905
     2906#define less_trivial_usage \
     2907       "[-E" IF_FEATURE_LESS_FLAGS("Mm") "Nh~I?] [FILE]..." \
     2908
     2909#define less_full_usage "\n\n" \
     2910       "View FILE (or stdin) one screenful at a time\n" \
     2911     "\n    -E  Quit once the end of a file is reached" \
     2912    IF_FEATURE_LESS_FLAGS( \
     2913     "\n    -M,-m   Display status line with line numbers" \
     2914     "\n        and percentage through the file" \
     2915    ) \
     2916     "\n    -N  Prefix line number to each line" \
     2917     "\n    -I  Ignore case in all searches" \
     2918     "\n    -~  Suppress ~s displayed past EOF" \
     2919
     2920#if ENABLE_FEATURE_MAKEDEVS_LEAF \
     2921
     2922#define makedevs_trivial_usage \
     2923       "NAME TYPE MAJOR MINOR FIRST LAST [s]" \
     2924
     2925#define makedevs_full_usage "\n\n" \
     2926       "Create a range of block or character special files" \
     2927     "\n" \
     2928     "\nTYPE is:" \
     2929     "\n    b   Block device" \
     2930     "\n    c   Character device" \
     2931     "\n    f   FIFO, MAJOR and MINOR are ignored" \
     2932     "\n" \
     2933     "\nFIRST..LAST specify numbers appended to NAME." \
     2934     "\nIf 's' is the last argument, the base device is created as well." \
     2935     "\n" \
     2936     "\nExamples:" \
     2937     "\n    makedevs /dev/ttyS c 4 66 2 63   ->  ttyS2-ttyS63" \
     2938     "\n    makedevs /dev/hda b 3 0 0 8 s    ->  hda,hda1-hda8" \
     2939
     2940#define makedevs_example_usage \
     2941       "# makedevs /dev/ttyS c 4 66 2 63\n" \
     2942       "[creates ttyS2-ttyS63]\n" \
     2943       "# makedevs /dev/hda b 3 0 0 8 s\n" \
     2944       "[creates hda,hda1-hda8]\n" \
     2945
     2946#endif \
     2947
     2948#if ENABLE_FEATURE_MAKEDEVS_TABLE \
     2949
     2950#define makedevs_trivial_usage \
     2951       "[-d device_table] rootdir" \
     2952
     2953#define makedevs_full_usage "\n\n" \
     2954       "Create a range of special files as specified in a device table.\n" \
     2955       "Device table entries take the form of:\n" \
     2956       "<name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>\n" \
     2957       "Where name is the file name, type can be one of:\n" \
     2958       "    f   Regular file\n" \
     2959       "    d   Directory\n" \
     2960       "    c   Character device\n" \
     2961       "    b   Block device\n" \
     2962       "    p   Fifo (named pipe)\n" \
     2963       "uid is the user id for the target file, gid is the group id for the\n" \
     2964       "target file. The rest of the entries (major, minor, etc) apply to\n" \
     2965       "to device special files. A '-' may be used for blank entries." \
     2966
     2967#define makedevs_example_usage \
     2968       "For example:\n" \
     2969       "<name>    <type> <mode><uid><gid><major><minor><start><inc><count>\n" \
     2970       "/dev         d   755    0    0    -      -      -      -    -\n" \
     2971       "/dev/console c   666    0    0    5      1      -      -    -\n" \
     2972       "/dev/null    c   666    0    0    1      3      0      0    -\n" \
     2973       "/dev/zero    c   666    0    0    1      5      0      0    -\n" \
     2974       "/dev/hda     b   640    0    0    3      0      0      0    -\n" \
     2975       "/dev/hda     b   640    0    0    3      1      1      1    15\n\n" \
     2976       "Will Produce:\n" \
     2977       "/dev\n" \
     2978       "/dev/console\n" \
     2979       "/dev/null\n" \
     2980       "/dev/zero\n" \
     2981       "/dev/hda\n" \
     2982       "/dev/hda[0-15]\n" \
     2983
     2984#endif \
     2985
     2986#define man_trivial_usage \
     2987       "[-aw] [MANPAGE]..." \
     2988
     2989#define man_full_usage "\n\n" \
     2990       "Format and display manual page\n" \
     2991     "\n    -a  Display all pages" \
     2992     "\n    -w  Show page locations" \
     2993
     2994#define microcom_trivial_usage \
     2995       "[-d DELAY] [-t TIMEOUT] [-s SPEED] [-X] TTY" \
     2996
     2997#define microcom_full_usage "\n\n" \
     2998       "Copy bytes for stdin to TTY and from TTY to stdout\n" \
     2999     "\n    -d  Wait up to DELAY ms for TTY output before sending every" \
     3000     "\n        next byte to it" \
     3001     "\n    -t  Exit if both stdin and TTY are silent for TIMEOUT ms" \
     3002     "\n    -s  Set serial line to SPEED" \
     3003     "\n    -X  Disable special meaning of NUL and Ctrl-X from stdin" \
     3004
     3005#define mountpoint_trivial_usage \
     3006       "[-q] <[-dn] DIR | -x DEVICE>" \
     3007
     3008#define mountpoint_full_usage "\n\n" \
     3009       "Check if the directory is a mountpoint\n" \
     3010     "\n    -q  Quiet" \
     3011     "\n    -d  Print major/minor device number of the filesystem" \
     3012     "\n    -n  Print device name of the filesystem" \
     3013     "\n    -x  Print major/minor device number of the blockdevice" \
     3014
     3015#define mountpoint_example_usage \
     3016       "$ mountpoint /proc\n" \
     3017       "/proc is not a mountpoint\n" \
     3018       "$ mountpoint /sys\n" \
     3019       "/sys is a mountpoint\n" \
     3020
     3021#define mt_trivial_usage \
     3022       "[-f device] opcode value" \
     3023
     3024#define mt_full_usage "\n\n" \
     3025       "Control magnetic tape drive operation\n" \
     3026       "\n" \
     3027       "Available Opcodes:\n" \
     3028       "\n" \
     3029       "bsf bsfm bsr bss datacompression drvbuffer eof eom erase\n" \
     3030       "fsf fsfm fsr fss load lock mkpart nop offline ras1 ras2\n" \
     3031       "ras3 reset retension rewind rewoffline seek setblk setdensity\n" \
     3032       "setpart tell unload unlock weof wset" \
     3033
    6173034#define nandwrite_trivial_usage \
    6183035    "[-p] [-s ADDR] MTD_DEVICE [FILE]" \
     
    6203037#define nandwrite_full_usage "\n\n" \
    6213038    "Write to the specified MTD device\n" \
    622      "\nOptions:" \
    6233039     "\n    -p  Pad to page size" \
    6243040     "\n    -s ADDR Start address" \
     
    6283044
    6293045#define nanddump_full_usage "\n\n" \
    630     "Dump the sepcified MTD device\n" \
    631      "\nOptions:" \
    632      "\n    -o  Omit oob data" \
     3046    "Dump the specified MTD device\n" \
     3047     "\n    -o  Dump oob data" \
    6333048     "\n    -b  Omit bad block from the dump" \
    6343049     "\n    -s ADDR Start address" \
    6353050     "\n    -l LEN  Length" \
    6363051     "\n    -f FILE Dump to file ('-' for stdout)" \
     3052
     3053#define raidautorun_trivial_usage \
     3054       "DEVICE" \
     3055
     3056#define raidautorun_full_usage "\n\n" \
     3057       "Tell the kernel to automatically search and start RAID arrays" \
     3058
     3059#define raidautorun_example_usage \
     3060       "$ raidautorun /dev/md0" \
     3061
     3062#define readahead_trivial_usage \
     3063       "[FILE]..." \
     3064
     3065#define readahead_full_usage "\n\n" \
     3066       "Preload FILEs to RAM" \
     3067
     3068#define rfkill_trivial_usage \
     3069       "COMMAND [INDEX|TYPE]" \
     3070
     3071#define rfkill_full_usage "\n\n" \
     3072       "Enable/disable wireless devices\n" \
     3073       "\nCommands:" \
     3074     "\n    list [INDEX|TYPE]   List current state" \
     3075     "\n    block INDEX|TYPE    Disable device" \
     3076     "\n    unblock INDEX|TYPE  Enable device" \
     3077     "\n" \
     3078     "\n    TYPE: all, wlan(wifi), bluetooth, uwb(ultrawideband)," \
     3079     "\n        wimax, wwan, gps, fm" \
     3080
     3081#define runlevel_trivial_usage \
     3082       "[FILE]" \
     3083
     3084#define runlevel_full_usage "\n\n" \
     3085       "Find the current and previous system runlevel\n" \
     3086       "\n" \
     3087       "If no utmp FILE exists or if no runlevel record can be found,\n" \
     3088       "print \"unknown\"" \
     3089
     3090#define runlevel_example_usage \
     3091       "$ runlevel /var/run/utmp\n" \
     3092       "N 2" \
     3093
     3094#define rx_trivial_usage \
     3095       "FILE" \
     3096
     3097#define rx_full_usage "\n\n" \
     3098       "Receive a file using the xmodem protocol" \
     3099
     3100#define rx_example_usage \
     3101       "$ rx /tmp/foo\n" \
     3102
     3103#define setsid_trivial_usage \
     3104       "PROG ARGS" \
     3105
     3106#define setsid_full_usage "\n\n" \
     3107       "Run PROG in a new session. PROG will have no controlling terminal\n" \
     3108       "and will not be affected by keyboard signals (Ctrl-C etc).\n" \
     3109       "See setsid(2) for details." \
     3110
     3111#define strings_trivial_usage \
     3112       "[-afo] [-n LEN] [FILE]..." \
     3113
     3114#define strings_full_usage "\n\n" \
     3115       "Display printable strings in a binary file\n" \
     3116     "\n    -a  Scan whole file (default)" \
     3117     "\n    -f  Precede strings with filenames" \
     3118     "\n    -n LEN  At least LEN characters form a string (default 4)" \
     3119     "\n    -o  Precede strings with decimal offsets" \
     3120
     3121#define taskset_trivial_usage \
     3122       "[-p] [MASK] [PID | PROG ARGS]" \
     3123
     3124#define taskset_full_usage "\n\n" \
     3125       "Set or get CPU affinity\n" \
     3126     "\n    -p  Operate on an existing PID" \
     3127
     3128#define taskset_example_usage \
     3129       "$ taskset 0x7 ./dgemm_test&\n" \
     3130       "$ taskset -p 0x1 $!\n" \
     3131       "pid 4790's current affinity mask: 7\n" \
     3132       "pid 4790's new affinity mask: 1\n" \
     3133       "$ taskset 0x7 /bin/sh -c './taskset -p 0x1 $$'\n" \
     3134       "pid 6671's current affinity mask: 1\n" \
     3135       "pid 6671's new affinity mask: 1\n" \
     3136       "$ taskset -p 1\n" \
     3137       "pid 1's current affinity mask: 3\n" \
     3138
     3139#define time_trivial_usage \
     3140       "[-v] PROG ARGS" \
     3141
     3142#define time_full_usage "\n\n" \
     3143       "Run PROG, display resource usage when it exits\n" \
     3144     "\n    -v  Verbose" \
     3145
     3146#define timeout_trivial_usage \
     3147       "[-t SECS] [-s SIG] PROG ARGS" \
     3148
     3149#define timeout_full_usage "\n\n" \
     3150       "Runs PROG. Sends SIG to it if it is not gone in SECS seconds.\n" \
     3151       "Defaults: SECS: 10, SIG: TERM." \
     3152
     3153#define ttysize_trivial_usage \
     3154       "[w] [h]" \
     3155
     3156#define ttysize_full_usage "\n\n" \
     3157       "Print dimension(s) of stdin's terminal, on error return 80x25" \
    6373158
    6383159#define ubiattach_trivial_usage \
     
    6533174     "\n    -d UBI_NUM  UBI device number" \
    6543175
     3176#define volname_trivial_usage \
     3177       "[DEVICE]" \
     3178
     3179#define volname_full_usage "\n\n" \
     3180       "Show CD volume name of the DEVICE (default /dev/cdrom)" \
     3181
     3182#define wall_trivial_usage \
     3183    "[FILE]" \
     3184
     3185#define wall_full_usage "\n\n" \
     3186    "Write content of FILE or stdin to all logged-in users" \
     3187
     3188#define wall_sample_usage \
     3189    "echo foo | wall\n" \
     3190    "wall ./mymessage" \
     3191
     3192#define watchdog_trivial_usage \
     3193       "[-t N[ms]] [-T N[ms]] [-F] DEV" \
     3194
     3195#define watchdog_full_usage "\n\n" \
     3196       "Periodically write to watchdog device DEV\n" \
     3197     "\n    -T N    Reboot after N seconds if not reset (default 60)" \
     3198     "\n    -t N    Reset every N seconds (default 30)" \
     3199     "\n    -F  Run in foreground" \
     3200     "\n" \
     3201     "\nUse 500ms to specify period in milliseconds" \
     3202
    6553203#if !ENABLE_MODPROBE_SMALL \
    6563204
    657 #define depmod_trivial_usage NOUSAGE_STR \
    658 
    659 #define depmod_full_usage "" \
     3205#define depmod_trivial_usage "[-n] [-b BASE] [VERSION] [MODFILES]..." \
     3206
     3207#define depmod_full_usage "\n\n" \
     3208       "Generate modules.dep, alias, and symbols files" \
     3209     "\n" \
     3210     "\n    -b BASE Use BASE/lib/modules/VERSION" \
     3211     "\n    -n  Dry run: print files to stdout" \
    6603212
    6613213#endif \
     
    6713223       "Load the specified kernel modules into the kernel" \
    6723224    IF_FEATURE_2_4_MODULES( "\n" \
    673      "\nOptions:" \
    6743225     "\n    -f  Force module to load into the wrong kernel version" \
    6753226     "\n    -k  Make module autoclean-able" \
     
    6993250
    7003251#define modinfo_full_usage "\n\n" \
    701        "Options:" \
    702      "\n    -a      Shortcut for '-F author'" \
     3252       "    -a      Shortcut for '-F author'" \
    7033253     "\n    -d      Shortcut for '-F description'" \
    7043254     "\n    -l      Shortcut for '-F license'" \
     
    7743324
    7753325#define modprobe_trivial_usage \
    776     "[-alrqvs" \
    777     IF_FEATURE_MODPROBE_BLACKLIST("b") \
    778     "] MODULE [symbol=value]..." \
     3326    "[-alrqvsD" IF_FEATURE_MODPROBE_BLACKLIST("b") "]" \
     3327    " MODULE [symbol=value]..." \
    7793328
    7803329#define modprobe_full_usage "\n\n" \
    781        "Options:" \
    782      "\n    -a  Load multiple MODULEs" \
     3330       "    -a  Load multiple MODULEs" \
    7833331     "\n    -l  List (MODULE is a pattern)" \
    7843332     "\n    -r  Remove MODULE (stacks) or do autoclean" \
     
    7863334     "\n    -v  Verbose" \
    7873335     "\n    -s  Log to syslog" \
     3336     "\n    -D  Show dependencies" \
    7883337    IF_FEATURE_MODPROBE_BLACKLIST( \
    7893338     "\n    -b  Apply blacklist to module names too" \
     
    8123361       "Load the specified kernel modules into the kernel" \
    8133362    IF_FEATURE_2_4_MODULES( "\n" \
    814      "\nOptions:" \
    8153363     "\n    -f  Force module to load into the wrong kernel version" \
    8163364     "\n    -k  Make module autoclean-able" \
     
    8293377#define rmmod_full_usage "\n\n" \
    8303378       "Unload kernel modules\n" \
    831      "\nOptions:" \
    8323379     "\n    -w  Wait until the module is no longer used" \
    8333380     "\n    -f  Force unload" \
     
    8413388
    8423389#define modprobe_full_usage "\n\n" \
    843        "Options:" \
    844      "\n    -r  Remove MODULE (stacks) or do autoclean" \
     3390       "    -r  Remove MODULE (stacks) or do autoclean" \
    8453391     "\n    -q  Quiet" \
    8463392     "\n    -v  Verbose" \
     
    8583404#define rmmod_full_usage "\n\n" \
    8593405       "Unload kernel modules\n" \
    860      "\nOptions:" \
    8613406     "\n    -w  Wait until the module is no longer used" \
    8623407     "\n    -f  Force unload" \
     
    8673412
    8683413#endif \
    869 
    870 #define nbdclient_trivial_usage \
    871        "HOST PORT BLOCKDEV" \
    872 
    873 #define nbdclient_full_usage "\n\n" \
    874        "Connect to HOST and provide a network block device on BLOCKDEV" \
    875 
    876 #if ENABLE_NC_110_COMPAT \
    877 
    878 #define nc_trivial_usage \
    879        "[OPTIONS] HOST PORT  - connect" \
    880     IF_NC_SERVER("\n" \
    881        "nc [OPTIONS] -l -p PORT [HOST] [PORT]  - listen" \
    882     ) \
    883 
    884 #define nc_full_usage "\n\n" \
    885        "Options:" \
    886      "\n    -e PROG Run PROG after connect (must be last)" \
    887     IF_NC_SERVER( \
    888      "\n    -l  Listen mode, for inbound connects" \
    889     ) \
    890      "\n    -p PORT Local port" \
    891      "\n    -s ADDR Local address" \
    892      "\n    -w SEC  Timeout for connects and final net reads" \
    893     IF_NC_EXTRA( \
    894      "\n    -i SEC  Delay interval for lines sent" /* ", ports scanned" */ \
    895     ) \
    896      "\n    -n  Don't do DNS resolution" \
    897      "\n    -u  UDP mode" \
    898      "\n    -v  Verbose" \
    899     IF_NC_EXTRA( \
    900      "\n    -o FILE Hex dump traffic" \
    901      "\n    -z  Zero-I/O mode (scanning)" \
    902     ) \
    903 
    904 #endif \
    905 
    906 #if !ENABLE_NC_110_COMPAT \
    907 
    908 #if ENABLE_NC_SERVER || ENABLE_NC_EXTRA \
    909 
    910 #define NC_OPTIONS_STR "\n\nOptions:" \
    911 
    912 #else \
    913 
    914 #define NC_OPTIONS_STR \
    915 
    916 #endif \
    917 
    918 #define nc_trivial_usage \
    919     IF_NC_EXTRA("[-iN] [-wN] ")IF_NC_SERVER("[-l] [-p PORT] ") \
    920        "["IF_NC_EXTRA("-f FILE|")"IPADDR PORT]"IF_NC_EXTRA(" [-e PROG]") \
    921 
    922 #define nc_full_usage "\n\n" \
    923        "Open a pipe to IP:PORT" IF_NC_EXTRA(" or FILE") \
    924     NC_OPTIONS_STR \
    925     IF_NC_EXTRA( \
    926      "\n    -e PROG Run PROG after connect" \
    927     IF_NC_SERVER( \
    928      "\n    -l  Listen mode, for inbound connects" \
    929     IF_NC_EXTRA( \
    930      "\n        (use -l twice with -e for persistent server)") \
    931      "\n    -p PORT Local port" \
    932     ) \
    933      "\n    -w SEC  Timeout for connect" \
    934      "\n    -i SEC  Delay interval for lines sent" \
    935      "\n    -f FILE Use file (ala /dev/ttyS0) instead of network" \
    936     ) \
    937 
    938 #define nc_notes_usage "" \
    939     IF_NC_EXTRA( \
    940        "To use netcat as a terminal emulator on a serial port:\n\n" \
    941        "$ stty 115200 -F /dev/ttyS0\n" \
    942        "$ stty raw -echo -ctlecho && nc -f /dev/ttyS0\n" \
    943     ) \
    944 
    945 #define nc_example_usage \
    946        "$ nc foobar.somedomain.com 25\n" \
    947        "220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n" \
    948        "help\n" \
    949        "214-Commands supported:\n" \
    950        "214-    HELO EHLO MAIL RCPT DATA AUTH\n" \
    951        "214     NOOP QUIT RSET HELP\n" \
    952        "quit\n" \
    953        "221 foobar closing connection\n" \
    954 
    955 #endif \
    956 
    957 #define netstat_trivial_usage \
    958        "[-"IF_ROUTE("r")"al] [-tuwx] [-en"IF_FEATURE_NETSTAT_WIDE("W")IF_FEATURE_NETSTAT_PRG("p")"]" \
    959 
    960 #define netstat_full_usage "\n\n" \
    961        "Display networking information\n" \
    962      "\nOptions:" \
    963     IF_ROUTE( \
    964      "\n    -r  Routing table" \
    965     ) \
    966      "\n    -a  All sockets" \
    967      "\n    -l  Listening sockets" \
    968      "\n        Else: connected sockets" \
    969      "\n    -t  TCP sockets" \
    970      "\n    -u  UDP sockets" \
    971      "\n    -w  Raw sockets" \
    972      "\n    -x  Unix sockets" \
    973      "\n        Else: all socket types" \
    974      "\n    -e  Other/more information" \
    975      "\n    -n  Don't resolve names" \
    976     IF_FEATURE_NETSTAT_WIDE( \
    977      "\n    -W  Wide display" \
    978     ) \
    979     IF_FEATURE_NETSTAT_PRG( \
    980      "\n    -p  Show PID/program name for sockets" \
    981     ) \
    982 
    983 #define iostat_trivial_usage \
    984        "[-c] [-d] [-t] [-z] [-k|-m] [ALL|BLOCKDEV...] [INTERVAL [COUNT]]" \
    985 
    986 #define iostat_full_usage "\n\n" \
    987        "Report CPU and I/O statistics\n" \
    988      "\nOptions:" \
    989      "\n    -c  Show CPU utilization" \
    990      "\n    -d  Show device utilization" \
    991      "\n    -t  Print current time" \
    992      "\n    -z  Omit devices with no activity" \
    993      "\n    -k  Use kb/s" \
    994      "\n    -m  Use Mb/s" \
    995 
    996 #define mpstat_trivial_usage \
    997        "[-A] [-I SUM|CPU|ALL|SCPU] [-u] [-P num|ALL] [INTERVAL [COUNT]]" \
    998 
    999 #define mpstat_full_usage "\n\n" \
    1000        "Per-processor statistics\n" \
    1001      "\nOptions:" \
    1002      "\n    -A          Same as -I ALL -u -P ALL" \
    1003      "\n    -I SUM|CPU|ALL|SCPU Report interrupt statistics" \
    1004      "\n    -P num|ALL      Processor to monitor" \
    1005      "\n    -u          Report CPU utilization" \
    1006 
    1007 #define pmap_trivial_usage \
    1008        "[-x][-q] PID" \
    1009 
    1010 #define pmap_full_usage "\n\n" \
    1011        "Display detailed precesses' memory usage\n" \
    1012        "\nOptions:" \
    1013        "\n     -x              show details" \
    1014        "\n     -q              quiet" \
    1015 
    1016 #define powertop_trivial_usage \
    1017        "" \
    1018 
    1019 #define powertop_full_usage "\n\n" \
    1020        "Analyze power consumption on Intel-based laptops\n" \
    1021 
    1022 #define smemcap_trivial_usage ">SMEMDATA.TAR" \
    1023 
    1024 #define smemcap_full_usage "\n\n" \
    1025        "Collect memory usage data in /proc and write it to stdout" \
    1026 
    1027 #define ash_trivial_usage NOUSAGE_STR \
    1028 
    1029 #define ash_full_usage "" \
    1030 
    1031 #define sh_trivial_usage NOUSAGE_STR \
    1032 
    1033 #define sh_full_usage "" \
    1034 
    1035 #define bash_trivial_usage NOUSAGE_STR \
    1036 
    1037 #define bash_full_usage "" \
    1038 
    1039 #define cttyhack_trivial_usage \
    1040        "PROG ARGS" \
    1041 
    1042 #define cttyhack_full_usage "\n\n" \
    1043        "Give PROG a controlling tty if possible." \
    1044      "\nExample for /etc/inittab (for busybox init):" \
    1045      "\n    ::respawn:/bin/cttyhack /bin/sh" \
    1046      "\nGiving controlling tty to shell running with PID 1:" \
    1047      "\n    $ exec cttyhack sh" \
    1048      "\nStarting interactive shell from boot shell script:" \
    1049      "\n    setsid cttyhack sh" \
    1050 
    1051 #define hush_trivial_usage NOUSAGE_STR \
    1052 
    1053 #define hush_full_usage "" \
    1054 
    1055 #define msh_trivial_usage NOUSAGE_STR \
    1056 
    1057 #define msh_full_usage "" \
    1058 
    1059 #define sh_trivial_usage NOUSAGE_STR \
    1060 
    1061 #define sh_full_usage "" \
    1062 
    1063 #define bash_trivial_usage NOUSAGE_STR \
    1064 
    1065 #define bash_full_usage "" \
    1066 
    1067 #define blockdev_trivial_usage \
    1068     "OPTION BLOCKDEV" \
    1069 
    1070 #define blockdev_full_usage "\n\n" \
    1071        "Options:" \
    1072      "\n    --setro     Set ro" \
    1073      "\n    --setrw     Set rw" \
    1074      "\n    --getro     Get ro" \
    1075      "\n    --getss     Get sector size" \
    1076      "\n    --getbsz    Get block size" \
    1077      "\n    --setbsz BYTES  Set block size" \
    1078      "\n    --getsize   Get device size in 512-byte sectors" \
    1079      "\n    --getsize64 Get device size in bytes" \
    1080      "\n    --flushbufs Flush buffers" \
    1081      "\n    --rereadpt  Reread partition table" \
    1082 
    1083 #define rev_trivial_usage \
    1084     "[FILE]..." \
    1085 
    1086 #define rev_full_usage "\n\n" \
    1087     "Reverse lines of FILE" \
    1088 
    1089 #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1 \
    1090 
    1091 # define IF_UDHCP_VERBOSE(...) __VA_ARGS__ \
    1092 
    1093 #else \
    1094 
    1095 # define IF_UDHCP_VERBOSE(...) \
    1096 
    1097 #endif \
    1098 
    1099 #define udhcpc_trivial_usage \
    1100        "[-fbnq"IF_UDHCP_VERBOSE("v")"oCR] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n" \
    1101        "    [-H HOSTNAME] [-V VENDOR] [-x OPT:VAL]... [-O OPT]..." IF_FEATURE_UDHCP_PORT(" [-P N]") \
    1102 
    1103 #define udhcpc_full_usage "\n" \
    1104     IF_LONG_OPTS( \
    1105      "\n    -i,--interface IFACE    Interface to use (default eth0)" \
    1106      "\n    -p,--pidfile FILE   Create pidfile" \
    1107      "\n    -s,--script PROG    Run PROG at DHCP events (default "CONFIG_UDHCPC_DEFAULT_SCRIPT")" \
    1108      "\n    -t,--retries N      Send up to N discover packets" \
    1109      "\n    -T,--timeout N      Pause between packets (default 3 seconds)" \
    1110      "\n    -A,--tryagain N     Wait N seconds after failure (default 20)" \
    1111      "\n    -f,--foreground     Run in foreground" \
    1112     USE_FOR_MMU( \
    1113      "\n    -b,--background     Background if lease is not obtained" \
    1114     ) \
    1115      "\n    -n,--now        Exit if lease is not obtained" \
    1116      "\n    -q,--quit       Exit after obtaining lease" \
    1117      "\n    -R,--release        Release IP on exit" \
    1118      "\n    -S,--syslog     Log to syslog too" \
    1119     IF_FEATURE_UDHCP_PORT( \
    1120      "\n    -P,--client-port N  Use port N (default 68)" \
    1121     ) \
    1122     IF_FEATURE_UDHCPC_ARPING( \
    1123      "\n    -a,--arping     Use arping to validate offered address" \
    1124     ) \
    1125      "\n    -O,--request-option OPT Request option OPT from server (cumulative)" \
    1126      "\n    -o,--no-default-options Don't request any options (unless -O is given)" \
    1127      "\n    -r,--request IP     Request this IP address" \
    1128      "\n    -x OPT:VAL      Include option OPT in sent packets (cumulative)" \
    1129      "\n                Examples of string, numeric, and hex byte opts:" \
    1130      "\n                -x hostname:bbox - option 12" \
    1131      "\n                -x lease:3600 - option 51 (lease time)" \
    1132      "\n                -x 0x3d:0100BEEFC0FFEE - option 61 (client id)" \
    1133      "\n    -F,--fqdn NAME      Ask server to update DNS mapping for NAME" \
    1134      "\n    -H,-h,--hostname NAME   Send NAME as client hostname (default none)" \
    1135      "\n    -V,--vendorclass VENDOR Vendor identifier (default 'udhcp VERSION')" \
    1136      "\n    -C,--clientid-none  Don't send MAC as client identifier" \
    1137     IF_UDHCP_VERBOSE( \
    1138      "\n    -v          Verbose" \
    1139     ) \
    1140     ) \
    1141     IF_NOT_LONG_OPTS( \
    1142      "\n    -i IFACE    Interface to use (default eth0)" \
    1143      "\n    -p FILE     Create pidfile" \
    1144      "\n    -s PROG     Run PROG at DHCP events (default "CONFIG_UDHCPC_DEFAULT_SCRIPT")" \
    1145      "\n    -t N        Send up to N discover packets" \
    1146      "\n    -T N        Pause between packets (default 3 seconds)" \
    1147      "\n    -A N        Wait N seconds (default 20) after failure" \
    1148      "\n    -f      Run in foreground" \
    1149     USE_FOR_MMU( \
    1150      "\n    -b      Background if lease is not obtained" \
    1151     ) \
    1152      "\n    -n      Exit if lease is not obtained" \
    1153      "\n    -q      Exit after obtaining lease" \
    1154      "\n    -R      Release IP on exit" \
    1155      "\n    -S      Log to syslog too" \
    1156     IF_FEATURE_UDHCP_PORT( \
    1157      "\n    -P N        Use port N (default 68)" \
    1158     ) \
    1159     IF_FEATURE_UDHCPC_ARPING( \
    1160      "\n    -a      Use arping to validate offered address" \
    1161     ) \
    1162      "\n    -O OPT      Request option OPT from server (cumulative)" \
    1163      "\n    -o      Don't request any options (unless -O is given)" \
    1164      "\n    -r IP       Request this IP address" \
    1165      "\n    -x OPT:VAL  Include option OPT in sent packets (cumulative)" \
    1166      "\n            Examples of string, numeric, and hex byte opts:" \
    1167      "\n            -x hostname:bbox - option 12" \
    1168      "\n            -x lease:3600 - option 51 (lease time)" \
    1169      "\n            -x 0x3d:0100BEEFC0FFEE - option 61 (client id)" \
    1170      "\n    -F NAME     Ask server to update DNS mapping for NAME" \
    1171      "\n    -H,-h NAME  Send NAME as client hostname (default none)" \
    1172      "\n    -V VENDOR   Vendor identifier (default 'udhcp VERSION')" \
    1173      "\n    -C      Don't send MAC as client identifier" \
    1174     IF_UDHCP_VERBOSE( \
    1175      "\n    -v      Verbose" \
    1176     ) \
    1177     ) \
    1178 
    1179 #define acpid_trivial_usage \
    1180        "[-d] [-c CONFDIR] [-l LOGFILE] [-a ACTIONFILE] [-M MAPFILE] [-e PROC_EVENT_FILE] [-p PIDFILE]"
    1181 #define acpid_full_usage "\n\n" \
    1182        "Listen to ACPI events and spawn specific helpers on event arrival\n" \
    1183      "\nOptions:" \
    1184      "\n    -c DIR  Config directory [/etc/acpi]" \
    1185      "\n    -d  Don't daemonize, (implies -f)" \
    1186      "\n    -e FILE /proc event file [/proc/acpi/event]" \
    1187      "\n    -f  Run in foreground" \
    1188      "\n    -l FILE Log file [/var/log/acpid.log]" \
    1189      "\n    -p FILE Pid file [/var/run/acpid.pid]" \
    1190      "\n    -a FILE Action file [/etc/acpid.conf]" \
    1191      "\n    -M FILE Map file [/etc/acpi.map]" \
    1192     IF_FEATURE_ACPID_COMPAT( \
    1193      "\n\nAccept and ignore compatibility options -g -m -s -S -v" \
    1194     )
    1195 
    1196 #define acpid_example_usage \
    1197        "Without -e option, acpid uses all /dev/input/event* files\n" \
    1198        "# acpid\n" \
    1199        "# acpid -l /var/log/my-acpi-log\n" \
    1200        "# acpid -e /proc/acpi/event\n"
    1201 
    1202 #define addgroup_trivial_usage \
    1203        "[-g GID] " IF_FEATURE_ADDUSER_TO_GROUP("[USER] ") "GROUP"
    1204 #define addgroup_full_usage "\n\n" \
    1205        "Add a group " IF_FEATURE_ADDUSER_TO_GROUP("or add a user to a group") "\n" \
    1206      "\nOptions:" \
    1207      "\n    -g GID  Group id" \
    1208      "\n    -S  Create a system group" \
    1209 
    1210 #define adduser_trivial_usage \
    1211        "[OPTIONS] USER"
    1212 #define adduser_full_usage "\n\n" \
    1213        "Add a user\n" \
    1214      "\nOptions:" \
    1215      "\n    -h DIR      Home directory" \
    1216      "\n    -g GECOS    GECOS field" \
    1217      "\n    -s SHELL    Login shell" \
    1218      "\n    -G GRP      Add user to existing group" \
    1219      "\n    -S      Create a system user" \
    1220      "\n    -D      Don't assign a password" \
    1221      "\n    -H      Don't create home directory" \
    1222      "\n    -u UID      User id" \
    1223 
    1224 #define adjtimex_trivial_usage \
    1225        "[-q] [-o OFF] [-f FREQ] [-p TCONST] [-t TICK]"
    1226 #define adjtimex_full_usage "\n\n" \
    1227        "Read and optionally set system timebase parameters. See adjtimex(2)\n" \
    1228      "\nOptions:" \
    1229      "\n    -q  Quiet" \
    1230      "\n    -o OFF  Time offset, microseconds" \
    1231      "\n    -f FREQ Frequency adjust, integer kernel units (65536 is 1ppm)" \
    1232      "\n        (positive values make clock run faster)" \
    1233      "\n    -t TICK Microseconds per tick, usually 10000" \
    1234      "\n    -p TCONST" \
    1235 
    1236 #define ar_trivial_usage \
    1237        "[-o] [-v] [-p] [-t] [-x] ARCHIVE FILES"
    1238 #define ar_full_usage "\n\n" \
    1239        "Extract or list FILES from an ar archive\n" \
    1240      "\nOptions:" \
    1241      "\n    -o  Preserve original dates" \
    1242      "\n    -p  Extract to stdout" \
    1243      "\n    -t  List" \
    1244      "\n    -x  Extract" \
    1245      "\n    -v  Verbose" \
    12463414
    12473415#define arp_trivial_usage \
     
    12503418     "\n[-v]    [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [temp]" \
    12513419     "\n[-v]    [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [netmask MASK] pub" \
    1252      "\n[-v]    [-H HWTYPE] [-i IF] -Ds HOSTNAME IFACE [netmask MASK] pub"
     3420     "\n[-v]    [-H HWTYPE] [-i IF] -Ds HOSTNAME IFACE [netmask MASK] pub" \
     3421
    12533422#define arp_full_usage "\n\n" \
    12543423       "Manipulate ARP cache\n" \
    1255      "\nOptions:" \
    12563424       "\n  -a      Display (all) hosts" \
    12573425       "\n  -s      Set new ARP entry" \
     
    12653433
    12663434#define arping_trivial_usage \
    1267        "[-fqbDUA] [-c CNT] [-w TIMEOUT] [-I IFACE] [-s SRC_IP] DST_IP"
     3435       "[-fqbDUA] [-c CNT] [-w TIMEOUT] [-I IFACE] [-s SRC_IP] DST_IP" \
     3436
    12683437#define arping_full_usage "\n\n" \
    12693438       "Send ARP requests/replies\n" \
    1270      "\nOptions:" \
    12713439     "\n    -f      Quit on first ARP reply" \
    12723440     "\n    -q      Quiet" \
     
    12813449     "\n    DST_IP      Target IP address" \
    12823450
    1283 #define awk_trivial_usage \
    1284        "[OPTIONS] [AWK_PROGRAM] [FILE]..."
    1285 #define awk_full_usage "\n\n" \
    1286        "Options:" \
    1287      "\n    -v VAR=VAL  Set variable" \
    1288      "\n    -F SEP      Use SEP as field separator" \
    1289      "\n    -f FILE     Read program from FILE" \
    1290 
    1291 #define basename_trivial_usage \
    1292        "FILE [SUFFIX]"
    1293 #define basename_full_usage "\n\n" \
    1294        "Strip directory path and .SUFFIX from FILE\n"
    1295 #define basename_example_usage \
    1296        "$ basename /usr/local/bin/foo\n" \
    1297        "foo\n" \
    1298        "$ basename /usr/local/bin/\n" \
    1299        "bin\n" \
    1300        "$ basename /foo/bar.txt .txt\n" \
    1301        "bar"
    1302 
    1303 #define beep_trivial_usage \
    1304        "-f FREQ -l LEN -d DELAY -r COUNT -n"
    1305 #define beep_full_usage "\n\n" \
    1306        "Options:" \
    1307      "\n    -f  Frequency in Hz" \
    1308      "\n    -l  Length in ms" \
    1309      "\n    -d  Delay in ms" \
    1310      "\n    -r  Repetitions" \
    1311      "\n    -n  Start new tone" \
    1312 
    1313 #define blkid_trivial_usage \
    1314        ""
    1315 #define blkid_full_usage "\n\n" \
    1316        "Print UUIDs of all filesystems"
    1317 
    13183451#define brctl_trivial_usage \
    1319        "COMMAND [BRIDGE [INTERFACE]]"
     3452       "COMMAND [BRIDGE [INTERFACE]]" \
     3453
    13203454#define brctl_full_usage "\n\n" \
    13213455       "Manage ethernet bridges\n" \
     
    13393473    ) \
    13403474
    1341 #define bzip2_trivial_usage \
    1342        "[OPTIONS] [FILE]..."
    1343 #define bzip2_full_usage "\n\n" \
    1344        "Compress FILEs (or stdin) with bzip2 algorithm\n" \
    1345      "\nOptions:" \
    1346      "\n    -1..9   Compression level" \
    1347      "\n    -d  Decompress" \
    1348      "\n    -c  Write to stdout" \
    1349      "\n    -f  Force" \
    1350 
    1351 #define busybox_notes_usage \
    1352        "Hello world!\n"
    1353 
    1354 #define lzop_trivial_usage \
    1355        "[-cfvd123456789CF] [FILE]..."
    1356 #define lzop_full_usage "\n\n" \
    1357        "Options:" \
    1358      "\n    -1..9   Compression level" \
    1359      "\n    -d  Decompress" \
    1360      "\n    -c  Write to stdout" \
    1361      "\n    -f  Force" \
     3475#define dnsd_trivial_usage \
     3476       "[-dvs] [-c CONFFILE] [-t TTL_SEC] [-p PORT] [-i ADDR]" \
     3477
     3478#define dnsd_full_usage "\n\n" \
     3479       "Small static DNS server daemon\n" \
     3480     "\n    -c FILE Config file" \
     3481     "\n    -t SEC  TTL" \
     3482     "\n    -p PORT Listen on PORT" \
     3483     "\n    -i ADDR Listen on ADDR" \
     3484     "\n    -d  Daemonize" \
    13623485     "\n    -v  Verbose" \
    1363      "\n    -F  Don't store or verify checksum" \
    1364      "\n    -C  Also write checksum of compressed block" \
    1365 
    1366 #define lzopcat_trivial_usage \
    1367        "[-vCF] [FILE]..."
    1368 #define lzopcat_full_usage "\n\n" \
    1369        "    -v  Verbose" \
    1370      "\n    -F  Don't store or verify checksum" \
    1371 
    1372 #define unlzop_trivial_usage \
    1373        "[-cfvCF] [FILE]..."
    1374 #define unlzop_full_usage "\n\n" \
    1375        "Options:" \
    1376      "\n    -c  Write to stdout" \
    1377      "\n    -f  Force" \
     3486     "\n    -s  Send successful replies only. Use this if you want" \
     3487     "\n        to use /etc/resolv.conf with two nameserver lines:" \
     3488     "\n            nameserver DNSD_SERVER" \
     3489     "\n            nameserver NORMAL_DNS_SERVER" \
     3490
     3491#define ether_wake_trivial_usage \
     3492       "[-b] [-i iface] [-p aa:bb:cc:dd[:ee:ff]] MAC" \
     3493
     3494#define ether_wake_full_usage "\n\n" \
     3495       "Send a magic packet to wake up sleeping machines.\n" \
     3496       "MAC must be a station address (00:11:22:33:44:55) or\n" \
     3497       "a hostname with a known 'ethers' entry.\n" \
     3498     "\n    -b      Send wake-up packet to the broadcast address" \
     3499     "\n    -i iface    Interface to use (default eth0)" \
     3500     "\n    -p pass     Append four or six byte password PW to the packet" \
     3501
     3502#define ftpd_trivial_usage \
     3503       "[-wvS] [-t N] [-T N] [DIR]" \
     3504
     3505#define ftpd_full_usage "\n\n" \
     3506       "Anonymous FTP server\n" \
     3507       "\n" \
     3508       "ftpd should be used as an inetd service.\n" \
     3509       "ftpd's line for inetd.conf:\n" \
     3510       "    21 stream tcp nowait root ftpd ftpd /files/to/serve\n" \
     3511       "It also can be ran from tcpsvd:\n" \
     3512       "    tcpsvd -vE 0.0.0.0 21 ftpd /files/to/serve\n" \
     3513     "\n    -w  Allow upload" \
     3514     "\n    -v  Log errors to stderr. -vv: verbose log" \
     3515     "\n    -S  Log errors to syslog. -SS: verbose log" \
     3516     "\n    -t,-T   Idle and absolute timeouts" \
     3517     "\n    DIR Change root to this directory" \
     3518
     3519#define ftpget_trivial_usage \
     3520       "[OPTIONS] HOST [LOCAL_FILE] REMOTE_FILE" \
     3521
     3522#define ftpget_full_usage "\n\n" \
     3523       "Download a file via FTP\n" \
     3524    IF_FEATURE_FTPGETPUT_LONG_OPTIONS( \
     3525     "\n    -c,--continue       Continue previous transfer" \
     3526     "\n    -v,--verbose        Verbose" \
     3527     "\n    -u,--username USER  Username" \
     3528     "\n    -p,--password PASS  Password" \
     3529     "\n    -P,--port NUM       Port" \
     3530    ) \
     3531    IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS( \
     3532     "\n    -c  Continue previous transfer" \
    13783533     "\n    -v  Verbose" \
    1379      "\n    -F  Don't store or verify checksum" \
    1380 
    1381 #define unlzma_trivial_usage \
    1382        "[-cf] [FILE]..."
    1383 #define unlzma_full_usage "\n\n" \
    1384        "Decompress FILE (or stdin)\n" \
    1385      "\nOptions:" \
    1386      "\n    -c  Write to stdout" \
    1387      "\n    -f  Force" \
    1388 
    1389 #define lzma_trivial_usage \
    1390        "-d [-cf] [FILE]..."
    1391 #define lzma_full_usage "\n\n" \
    1392        "Decompress FILE (or stdin)\n" \
    1393      "\nOptions:" \
    1394      "\n    -d  Decompress" \
    1395      "\n    -c  Write to stdout" \
    1396      "\n    -f  Force" \
    1397 
    1398 #define lzcat_trivial_usage \
    1399        "FILE"
    1400 #define lzcat_full_usage "\n\n" \
    1401        "Decompress to stdout"
    1402 
    1403 #define unxz_trivial_usage \
    1404        "[-cf] [FILE]..."
    1405 #define unxz_full_usage "\n\n" \
    1406        "Decompress FILE (or stdin)\n" \
    1407      "\nOptions:" \
    1408      "\n    -c  Write to stdout" \
    1409      "\n    -f  Force" \
    1410 
    1411 #define xz_trivial_usage \
    1412        "-d [-cf] [FILE]..."
    1413 #define xz_full_usage "\n\n" \
    1414        "Decompress FILE (or stdin)\n" \
    1415      "\nOptions:" \
    1416      "\n    -d  Decompress" \
    1417      "\n    -c  Write to stdout" \
    1418      "\n    -f  Force" \
    1419 
    1420 #define xzcat_trivial_usage \
    1421        "FILE"
    1422 #define xzcat_full_usage "\n\n" \
    1423        "Decompress to stdout"
    1424 
    1425 #define cal_trivial_usage \
    1426        "[-jy] [[MONTH] YEAR]"
    1427 #define cal_full_usage "\n\n" \
    1428        "Display a calendar\n" \
    1429      "\nOptions:" \
    1430      "\n    -j  Use julian dates" \
    1431      "\n    -y  Display the entire year" \
    1432 
    1433 #define cat_trivial_usage \
    1434        "[FILE]..."
    1435 #define cat_full_usage "\n\n" \
    1436        "Concatenate FILEs and print them to stdout" \
    1437 
    1438 #define cat_example_usage \
    1439        "$ cat /proc/uptime\n" \
    1440        "110716.72 17.67"
    1441 
    1442 #define catv_trivial_usage \
    1443        "[-etv] [FILE]..."
    1444 #define catv_full_usage "\n\n" \
    1445        "Display nonprinting characters as ^x or M-x\n" \
    1446      "\nOptions:" \
    1447      "\n    -e  End each line with $" \
    1448      "\n    -t  Show tabs as ^I" \
    1449      "\n    -v  Don't use ^x or M-x escapes" \
    1450 
    1451 #define chat_trivial_usage \
    1452        "EXPECT [SEND [EXPECT [SEND...]]]"
    1453 #define chat_full_usage "\n\n" \
    1454        "Useful for interacting with a modem connected to stdin/stdout.\n" \
    1455        "A script consists of one or more \"expect-send\" pairs of strings,\n" \
    1456        "each pair is a pair of arguments. Example:\n" \
    1457        "chat '' ATZ OK ATD123456 CONNECT '' ogin: pppuser word: ppppass '~'" \
    1458 
    1459 #define chattr_trivial_usage \
    1460        "[-R] [-+=AacDdijsStTu] [-v VERSION] [FILE]..."
    1461 #define chattr_full_usage "\n\n" \
    1462        "Change file attributes on an ext2 fs\n" \
    1463      "\nModifiers:" \
    1464      "\n    -   Remove attributes" \
    1465      "\n    +   Add attributes" \
    1466      "\n    =   Set attributes" \
    1467      "\nAttributes:" \
    1468      "\n    A   Don't track atime" \
    1469      "\n    a   Append mode only" \
    1470      "\n    c   Enable compress" \
    1471      "\n    D   Write dir contents synchronously" \
    1472      "\n    d   Don't backup with dump" \
    1473      "\n    i   Cannot be modified (immutable)" \
    1474      "\n    j   Write all data to journal first" \
    1475      "\n    s   Zero disk storage when deleted" \
    1476      "\n    S   Write file contents synchronously" \
    1477      "\n    t   Disable tail-merging of partial blocks with other files" \
    1478      "\n    u   Allow file to be undeleted" \
    1479      "\nOptions:" \
    1480      "\n    -R  Recurse" \
    1481      "\n    -v  Set the file's version/generation number" \
    1482 
    1483 #define chcon_trivial_usage \
    1484        "[OPTIONS] CONTEXT FILE..." \
    1485        "\n  chcon [OPTIONS] [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE..." \
    1486     IF_FEATURE_CHCON_LONG_OPTIONS( \
    1487        "\n  chcon [OPTIONS] --reference=RFILE FILE..." \
    1488     )
    1489 #define chcon_full_usage "\n\n" \
    1490        "Change the security context of each FILE to CONTEXT\n" \
    1491     IF_FEATURE_CHCON_LONG_OPTIONS( \
     3534     "\n    -u USER Username" \
     3535     "\n    -p PASS Password" \
     3536     "\n    -P NUM  Port" \
     3537    ) \
     3538
     3539#define ftpput_trivial_usage \
     3540       "[OPTIONS] HOST [REMOTE_FILE] LOCAL_FILE" \
     3541
     3542#define ftpput_full_usage "\n\n" \
     3543       "Upload a file to a FTP server\n" \
     3544    IF_FEATURE_FTPGETPUT_LONG_OPTIONS( \
    14923545     "\n    -v,--verbose        Verbose" \
    1493      "\n    -c,--changes        Report changes made" \
    1494      "\n    -h,--no-dereference Affect symlinks instead of their targets" \
    1495      "\n    -f,--silent,--quiet Suppress most error messages" \
    1496      "\n    --reference=RFILE   Use RFILE's group instead of using a CONTEXT value" \
    1497      "\n    -u,--user=USER      Set user/role/type/range in the target" \
    1498      "\n    -r,--role=ROLE      security context" \
    1499      "\n    -t,--type=TYPE" \
    1500      "\n    -l,--range=RANGE" \
    1501      "\n    -R,--recursive      Recurse" \
    1502     ) \
    1503     IF_NOT_FEATURE_CHCON_LONG_OPTIONS( \
     3546     "\n    -u,--username USER  Username" \
     3547     "\n    -p,--password PASS  Password" \
     3548     "\n    -P,--port NUM       Port" \
     3549    ) \
     3550    IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS( \
    15043551     "\n    -v  Verbose" \
    1505      "\n    -c  Report changes made" \
    1506      "\n    -h  Affect symlinks instead of their targets" \
    1507      "\n    -f  Suppress most error messages" \
    1508      "\n    -u USER Set user/role/type/range in the target security context" \
    1509      "\n    -r ROLE" \
    1510      "\n    -t TYPE" \
    1511      "\n    -l RNG" \
    1512      "\n    -R  Recurse" \
    1513     )
    1514 
    1515 #define chmod_trivial_usage \
    1516        "[-R"IF_DESKTOP("cvf")"] MODE[,MODE]... FILE..."
    1517 #define chmod_full_usage "\n\n" \
    1518        "Each MODE is one or more of the letters ugoa, one of the\n" \
    1519        "symbols +-= and one or more of the letters rwxst\n" \
    1520      "\nOptions:" \
    1521      "\n    -R  Recurse" \
    1522     IF_DESKTOP( \
    1523      "\n    -c  List changed files" \
    1524      "\n    -v  List all files" \
    1525      "\n    -f  Hide errors" \
    1526     )
    1527 #define chmod_example_usage \
    1528        "$ ls -l /tmp/foo\n" \
    1529        "-rw-rw-r--    1 root     root            0 Apr 12 18:25 /tmp/foo\n" \
    1530        "$ chmod u+x /tmp/foo\n" \
    1531        "$ ls -l /tmp/foo\n" \
    1532        "-rwxrw-r--    1 root     root            0 Apr 12 18:25 /tmp/foo*\n" \
    1533        "$ chmod 444 /tmp/foo\n" \
    1534        "$ ls -l /tmp/foo\n" \
    1535        "-r--r--r--    1 root     root            0 Apr 12 18:25 /tmp/foo\n"
    1536 
    1537 #define chgrp_trivial_usage \
    1538        "[-RhLHP"IF_DESKTOP("cvf")"]... GROUP FILE..."
    1539 #define chgrp_full_usage "\n\n" \
    1540        "Change the group membership of each FILE to GROUP\n" \
    1541      "\nOptions:" \
    1542      "\n    -R  Recurse" \
    1543      "\n    -h  Affect symlinks instead of symlink targets" \
    1544      "\n    -L  Traverse all symlinks to directories" \
    1545      "\n    -H  Traverse symlinks on command line only" \
    1546      "\n    -P  Don't traverse symlinks (default)" \
    1547     IF_DESKTOP( \
    1548      "\n    -c  List changed files" \
     3552     "\n    -u USER Username" \
     3553     "\n    -p PASS Password" \
     3554     "\n    -P NUM  Port number" \
     3555    ) \
     3556
     3557#define hostname_trivial_usage \
     3558       "[OPTIONS] [HOSTNAME | -F FILE]" \
     3559
     3560#define hostname_full_usage "\n\n" \
     3561       "Get or set hostname or DNS domain name\n" \
     3562     "\n    -s  Short" \
     3563     "\n    -i  Addresses for the hostname" \
     3564     "\n    -d  DNS domain name" \
     3565     "\n    -f  Fully qualified domain name" \
     3566     "\n    -F FILE Use FILE's content as hostname" \
     3567
     3568#define hostname_example_usage \
     3569       "$ hostname\n" \
     3570       "sage\n" \
     3571
     3572#define dnsdomainname_trivial_usage NOUSAGE_STR \
     3573
     3574#define dnsdomainname_full_usage "" \
     3575
     3576#define httpd_trivial_usage \
     3577       "[-ifv[v]]" \
     3578       " [-c CONFFILE]" \
     3579       " [-p [IP:]PORT]" \
     3580    IF_FEATURE_HTTPD_SETUID(" [-u USER[:GRP]]") \
     3581    IF_FEATURE_HTTPD_BASIC_AUTH(" [-r REALM]") \
     3582       " [-h HOME]\n" \
     3583       "or httpd -d/-e" IF_FEATURE_HTTPD_AUTH_MD5("/-m") " STRING" \
     3584
     3585#define httpd_full_usage "\n\n" \
     3586       "Listen for incoming HTTP requests\n" \
     3587     "\n    -i      Inetd mode" \
     3588     "\n    -f      Don't daemonize" \
     3589     "\n    -v[v]       Verbose" \
     3590     "\n    -p [IP:]PORT    Bind to IP:PORT (default *:80)" \
     3591    IF_FEATURE_HTTPD_SETUID( \
     3592     "\n    -u USER[:GRP]   Set uid/gid after binding to port") \
     3593    IF_FEATURE_HTTPD_BASIC_AUTH( \
     3594     "\n    -r REALM    Authentication Realm for Basic Authentication") \
     3595     "\n    -h HOME     Home directory (default .)" \
     3596     "\n    -c FILE     Configuration file (default {/etc,HOME}/httpd.conf)" \
     3597    IF_FEATURE_HTTPD_AUTH_MD5( \
     3598     "\n    -m STRING   MD5 crypt STRING") \
     3599     "\n    -e STRING   HTML encode STRING" \
     3600     "\n    -d STRING   URL decode STRING" \
     3601
     3602#define ifconfig_trivial_usage \
     3603    IF_FEATURE_IFCONFIG_STATUS("[-a]") " interface [address]" \
     3604
     3605#define ifconfig_full_usage "\n\n" \
     3606       "Configure a network interface\n" \
     3607     "\n" \
     3608    IF_FEATURE_IPV6( \
     3609       "    [add ADDRESS[/PREFIXLEN]]\n") \
     3610    IF_FEATURE_IPV6( \
     3611       "    [del ADDRESS[/PREFIXLEN]]\n") \
     3612       "    [[-]broadcast [ADDRESS]] [[-]pointopoint [ADDRESS]]\n" \
     3613       "    [netmask ADDRESS] [dstaddr ADDRESS]\n" \
     3614    IF_FEATURE_IFCONFIG_SLIP( \
     3615       "    [outfill NN] [keepalive NN]\n") \
     3616       "    " IF_FEATURE_IFCONFIG_HW("[hw ether" IF_FEATURE_HWIB("|infiniband")" ADDRESS] ") "[metric NN] [mtu NN]\n" \
     3617       "    [[-]trailers] [[-]arp] [[-]allmulti]\n" \
     3618       "    [multicast] [[-]promisc] [txqueuelen NN] [[-]dynamic]\n" \
     3619    IF_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ( \
     3620       "    [mem_start NN] [io_addr NN] [irq NN]\n") \
     3621       "    [up|down] ..." \
     3622
     3623#define ifenslave_trivial_usage \
     3624       "[-cdf] MASTER_IFACE SLAVE_IFACE..." \
     3625
     3626#define ifenslave_full_usage "\n\n" \
     3627       "Configure network interfaces for parallel routing\n" \
     3628     "\n    -c,--change-active  Change active slave" \
     3629     "\n    -d,--detach     Remove slave interface from bonding device" \
     3630     "\n    -f,--force      Force, even if interface is not Ethernet" \
     3631
     3632#define ifenslave_example_usage \
     3633       "To create a bond device, simply follow these three steps:\n" \
     3634       "- ensure that the required drivers are properly loaded:\n" \
     3635       "  # modprobe bonding ; modprobe <3c59x|eepro100|pcnet32|tulip|...>\n" \
     3636       "- assign an IP address to the bond device:\n" \
     3637       "  # ifconfig bond0 <addr> netmask <mask> broadcast <bcast>\n" \
     3638       "- attach all the interfaces you need to the bond device:\n" \
     3639       "  # ifenslave bond0 eth0 eth1 eth2\n" \
     3640       "  If bond0 didn't have a MAC address, it will take eth0's. Then, all\n" \
     3641       "  interfaces attached AFTER this assignment will get the same MAC addr.\n\n" \
     3642       "  To detach a dead interface without setting the bond device down:\n" \
     3643       "  # ifenslave -d bond0 eth1\n\n" \
     3644       "  To set the bond device down and automatically release all the slaves:\n" \
     3645       "  # ifconfig bond0 down\n\n" \
     3646       "  To change active slave:\n" \
     3647       "  # ifenslave -c bond0 eth0\n" \
     3648
     3649#define ifplugd_trivial_usage \
     3650       "[OPTIONS]" \
     3651
     3652#define ifplugd_full_usage "\n\n" \
     3653       "Network interface plug detection daemon\n" \
     3654     "\n    -n      Don't daemonize" \
     3655     "\n    -s      Don't log to syslog" \
     3656     "\n    -i IFACE    Interface" \
     3657     "\n    -f/-F       Treat link detection error as link down/link up" \
     3658     "\n            (otherwise exit on error)" \
     3659     "\n    -a      Don't up interface at each link probe" \
     3660     "\n    -M      Monitor creation/destruction of interface" \
     3661     "\n            (otherwise it must exist)" \
     3662     "\n    -r PROG     Script to run" \
     3663     "\n    -x ARG      Extra argument for script" \
     3664     "\n    -I      Don't exit on nonzero exit code from script" \
     3665     "\n    -p      Don't run \"up\" script on startup" \
     3666     "\n    -q      Don't run \"down\" script on exit" \
     3667     "\n    -l      Always run script on startup" \
     3668     "\n    -t SECS     Poll time in seconds" \
     3669     "\n    -u SECS     Delay before running script after link up" \
     3670     "\n    -d SECS     Delay after link down" \
     3671     "\n    -m MODE     API mode (mii, priv, ethtool, wlan, iff, auto)" \
     3672     "\n    -k      Kill running daemon" \
     3673
     3674#define ifup_trivial_usage \
     3675       "[-an"IF_FEATURE_IFUPDOWN_MAPPING("m")"vf] [-i FILE] IFACE..." \
     3676
     3677#define ifup_full_usage "\n\n" \
     3678       "    -a  De/configure all interfaces automatically" \
     3679     "\n    -i FILE Use FILE for interface definitions" \
     3680     "\n    -n  Print out what would happen, but don't do it" \
     3681    IF_FEATURE_IFUPDOWN_MAPPING( \
     3682     "\n        (note: doesn't disable mappings)" \
     3683     "\n    -m  Don't run any mappings" \
     3684    ) \
     3685     "\n    -v  Print out what would happen before doing it" \
     3686     "\n    -f  Force de/configuration" \
     3687
     3688#define ifdown_trivial_usage \
     3689       "[-an"IF_FEATURE_IFUPDOWN_MAPPING("m")"vf] [-i FILE] IFACE..." \
     3690
     3691#define ifdown_full_usage "\n\n" \
     3692       "    -a  De/configure all interfaces automatically" \
     3693     "\n    -i FILE Use FILE for interface definitions" \
     3694     "\n    -n  Print out what would happen, but don't do it" \
     3695    IF_FEATURE_IFUPDOWN_MAPPING( \
     3696     "\n        (note: doesn't disable mappings)" \
     3697     "\n    -m  Don't run any mappings" \
     3698    ) \
     3699     "\n    -v  Print out what would happen before doing it" \
     3700     "\n    -f  Force de/configuration" \
     3701
     3702#define inetd_trivial_usage \
     3703       "[-fe] [-q N] [-R N] [CONFFILE]" \
     3704
     3705#define inetd_full_usage "\n\n" \
     3706       "Listen for network connections and launch programs\n" \
     3707     "\n    -f  Run in foreground" \
     3708     "\n    -e  Log to stderr" \
     3709     "\n    -q N    Socket listen queue (default: 128)" \
     3710     "\n    -R N    Pause services after N connects/min" \
     3711     "\n        (default: 0 - disabled)" \
     3712
     3713#define ip_trivial_usage \
     3714       "[OPTIONS] {" \
     3715    IF_FEATURE_IP_ADDRESS("address | ") \
     3716    IF_FEATURE_IP_ROUTE("route | ") \
     3717    IF_FEATURE_IP_LINK("link | ") \
     3718    IF_FEATURE_IP_TUNNEL("tunnel | ") \
     3719    IF_FEATURE_IP_RULE("rule") \
     3720       "} {COMMAND}" \
     3721
     3722#define ip_full_usage "\n\n" \
     3723       "ip [OPTIONS] OBJECT {COMMAND}\n" \
     3724       "where OBJECT := {" \
     3725    IF_FEATURE_IP_ADDRESS("address | ") \
     3726    IF_FEATURE_IP_ROUTE("route | ") \
     3727    IF_FEATURE_IP_LINK("link | ") \
     3728    IF_FEATURE_IP_TUNNEL("tunnel | ") \
     3729    IF_FEATURE_IP_RULE("rule") \
     3730       "}\n" \
     3731       "OPTIONS := { -f[amily] { inet | inet6 | link } | -o[neline] }" \
     3732
     3733#define ipaddr_trivial_usage \
     3734       "{ {add|del} IFADDR dev STRING | {show|flush}\n" \
     3735       "        [dev STRING] [to PREFIX] }" \
     3736
     3737#define ipaddr_full_usage "\n\n" \
     3738       "ipaddr {add|delete} IFADDR dev STRING\n" \
     3739       "ipaddr {show|flush} [dev STRING] [scope SCOPE-ID]\n" \
     3740       "    [to PREFIX] [label PATTERN]\n" \
     3741       "    IFADDR := PREFIX | ADDR peer PREFIX\n" \
     3742       "    [broadcast ADDR] [anycast ADDR]\n" \
     3743       "    [label STRING] [scope SCOPE-ID]\n" \
     3744       "    SCOPE-ID := [host | link | global | NUMBER]" \
     3745
     3746#define iplink_trivial_usage \
     3747       "{ set DEVICE { up | down | arp { on | off } | show [DEVICE] }" \
     3748
     3749#define iplink_full_usage "\n\n" \
     3750       "iplink set DEVICE { up | down | arp | multicast { on | off } |\n" \
     3751       "            dynamic { on | off } |\n" \
     3752       "            mtu MTU }\n" \
     3753       "iplink show [DEVICE]" \
     3754
     3755#define iproute_trivial_usage \
     3756       "{ list | flush | add | del | change | append |\n" \
     3757       "        replace | test } ROUTE" \
     3758
     3759#define iproute_full_usage "\n\n" \
     3760       "iproute { list | flush } SELECTOR\n" \
     3761       "iproute get ADDRESS [from ADDRESS iif STRING]\n" \
     3762       "    [oif STRING] [tos TOS]\n" \
     3763       "iproute { add | del | change | append | replace | test } ROUTE\n" \
     3764       "    SELECTOR := [root PREFIX] [match PREFIX] [proto RTPROTO]\n" \
     3765       "    ROUTE := [TYPE] PREFIX [tos TOS] [proto RTPROTO] [metric METRIC]" \
     3766
     3767#define iprule_trivial_usage \
     3768       "{[list | add | del] RULE}" \
     3769
     3770#define iprule_full_usage "\n\n" \
     3771       "iprule [list | add | del] SELECTOR ACTION\n" \
     3772       "    SELECTOR := [from PREFIX] [to PREFIX] [tos TOS] [fwmark FWMARK]\n" \
     3773       "            [dev STRING] [pref NUMBER]\n" \
     3774       "    ACTION := [table TABLE_ID] [nat ADDRESS]\n" \
     3775       "            [prohibit | reject | unreachable]\n" \
     3776       "            [realms [SRCREALM/]DSTREALM]\n" \
     3777       "    TABLE_ID := [local | main | default | NUMBER]" \
     3778
     3779#define iptunnel_trivial_usage \
     3780       "{ add | change | del | show } [NAME]\n" \
     3781       "    [mode { ipip | gre | sit }]\n" \
     3782       "    [remote ADDR] [local ADDR] [ttl TTL]" \
     3783
     3784#define iptunnel_full_usage "\n\n" \
     3785       "iptunnel { add | change | del | show } [NAME]\n" \
     3786       "    [mode { ipip | gre | sit }] [remote ADDR] [local ADDR]\n" \
     3787       "    [[i|o]seq] [[i|o]key KEY] [[i|o]csum]\n" \
     3788       "    [ttl TTL] [tos TOS] [[no]pmtudisc] [dev PHYS_DEV]" \
     3789
     3790#define ipcalc_trivial_usage \
     3791       "[OPTIONS] ADDRESS[[/]NETMASK] [NETMASK]" \
     3792
     3793#define ipcalc_full_usage "\n\n" \
     3794       "Calculate IP network settings from a IP address\n" \
     3795    IF_FEATURE_IPCALC_LONG_OPTIONS( \
     3796     "\n    -b,--broadcast  Display calculated broadcast address" \
     3797     "\n    -n,--network    Display calculated network address" \
     3798     "\n    -m,--netmask    Display default netmask for IP" \
     3799    IF_FEATURE_IPCALC_FANCY( \
     3800     "\n    -p,--prefix Display the prefix for IP/NETMASK" \
     3801     "\n    -h,--hostname   Display first resolved host name" \
     3802     "\n    -s,--silent Don't ever display error messages" \
     3803    ) \
     3804    ) \
     3805    IF_NOT_FEATURE_IPCALC_LONG_OPTIONS( \
     3806     "\n    -b  Display calculated broadcast address" \
     3807     "\n    -n  Display calculated network address" \
     3808     "\n    -m  Display default netmask for IP" \
     3809    IF_FEATURE_IPCALC_FANCY( \
     3810     "\n    -p  Display the prefix for IP/NETMASK" \
     3811     "\n    -h  Display first resolved host name" \
     3812     "\n    -s  Don't ever display error messages" \
     3813    ) \
     3814    ) \
     3815
     3816#define fakeidentd_trivial_usage \
     3817       "[-fiw] [-b ADDR] [STRING]" \
     3818
     3819#define fakeidentd_full_usage "\n\n" \
     3820       "Provide fake ident (auth) service\n" \
     3821     "\n    -f  Run in foreground" \
     3822     "\n    -i  Inetd mode" \
     3823     "\n    -w  Inetd 'wait' mode" \
     3824     "\n    -b ADDR Bind to specified address" \
     3825     "\n    STRING  Ident answer string (default: nobody)" \
     3826
     3827#define nameif_trivial_usage \
     3828    IF_NOT_FEATURE_NAMEIF_EXTENDED( \
     3829        "[-s] [-c FILE] [IFNAME HWADDR]..." \
     3830    ) \
     3831    IF_FEATURE_NAMEIF_EXTENDED( \
     3832        "[-s] [-c FILE] [IFNAME SELECTOR]..." \
     3833    ) \
     3834
     3835#define nameif_full_usage "\n\n" \
     3836    "Rename network interface while it in the down state." \
     3837    IF_NOT_FEATURE_NAMEIF_EXTENDED( \
     3838     "\nThe device with address HWADDR is renamed to IFACE." \
     3839    ) \
     3840    IF_FEATURE_NAMEIF_EXTENDED( \
     3841     "\nThe device matched by SELECTOR is renamed to IFACE." \
     3842     "\nSELECTOR can be a combination of:" \
     3843     "\n    driver=STRING" \
     3844     "\n    bus=STRING" \
     3845     "\n    phy_address=NUM" \
     3846     "\n    [mac=]XX:XX:XX:XX:XX:XX" \
     3847    ) \
     3848     "\n" \
     3849     "\n    -c FILE Configuration file (default: /etc/mactab)" \
     3850     "\n    -s  Log to syslog" \
     3851
     3852#define nameif_example_usage \
     3853       "$ nameif -s dmz0 00:A0:C9:8C:F6:3F\n" \
     3854       " or\n" \
     3855       "$ nameif -c /etc/my_mactab_file\n" \
     3856
     3857#define nbdclient_trivial_usage \
     3858       "HOST PORT BLOCKDEV" \
     3859
     3860#define nbdclient_full_usage "\n\n" \
     3861       "Connect to HOST and provide a network block device on BLOCKDEV" \
     3862
     3863#if ENABLE_NC_110_COMPAT \
     3864
     3865#define nc_trivial_usage \
     3866       "[OPTIONS] HOST PORT  - connect" \
     3867    IF_NC_SERVER("\n" \
     3868       "nc [OPTIONS] -l -p PORT [HOST] [PORT]  - listen" \
     3869    ) \
     3870
     3871#define nc_full_usage "\n\n" \
     3872       "    -e PROG Run PROG after connect (must be last)" \
     3873    IF_NC_SERVER( \
     3874     "\n    -l  Listen mode, for inbound connects" \
     3875    ) \
     3876     "\n    -p PORT Local port" \
     3877     "\n    -s ADDR Local address" \
     3878     "\n    -w SEC  Timeout for connects and final net reads" \
     3879    IF_NC_EXTRA( \
     3880     "\n    -i SEC  Delay interval for lines sent" /* ", ports scanned" */ \
     3881    ) \
     3882     "\n    -n  Don't do DNS resolution" \
     3883     "\n    -u  UDP mode" \
    15493884     "\n    -v  Verbose" \
    1550      "\n    -f  Hide errors" \
    1551     )
    1552 #define chgrp_example_usage \
    1553        "$ ls -l /tmp/foo\n" \
    1554        "-r--r--r--    1 andersen andersen        0 Apr 12 18:25 /tmp/foo\n" \
    1555        "$ chgrp root /tmp/foo\n" \
    1556        "$ ls -l /tmp/foo\n" \
    1557        "-r--r--r--    1 andersen root            0 Apr 12 18:25 /tmp/foo\n"
    1558 
    1559 #define chown_trivial_usage \
    1560        "[-RhLHP"IF_DESKTOP("cvf")"]... OWNER[<.|:>[GROUP]] FILE..."
    1561 #define chown_full_usage "\n\n" \
    1562        "Change the owner and/or group of each FILE to OWNER and/or GROUP\n" \
    1563      "\nOptions:" \
    1564      "\n    -R  Recurse" \
    1565      "\n    -h  Affect symlinks instead of symlink targets" \
    1566      "\n    -L  Traverse all symlinks to directories" \
    1567      "\n    -H  Traverse symlinks on command line only" \
    1568      "\n    -P  Don't traverse symlinks (default)" \
    1569     IF_DESKTOP( \
    1570      "\n    -c  List changed files" \
    1571      "\n    -v  List all files" \
    1572      "\n    -f  Hide errors" \
    1573     )
    1574 #define chown_example_usage \
    1575        "$ ls -l /tmp/foo\n" \
    1576        "-r--r--r--    1 andersen andersen        0 Apr 12 18:25 /tmp/foo\n" \
    1577        "$ chown root /tmp/foo\n" \
    1578        "$ ls -l /tmp/foo\n" \
    1579        "-r--r--r--    1 root     andersen        0 Apr 12 18:25 /tmp/foo\n" \
    1580        "$ chown root.root /tmp/foo\n" \
    1581        "ls -l /tmp/foo\n" \
    1582        "-r--r--r--    1 root     root            0 Apr 12 18:25 /tmp/foo\n"
     3885    IF_NC_EXTRA( \
     3886     "\n    -o FILE Hex dump traffic" \
     3887     "\n    -z  Zero-I/O mode (scanning)" \
     3888    ) \
     3889
     3890#endif \
     3891
     3892#if !ENABLE_NC_110_COMPAT \
     3893
     3894#if ENABLE_NC_SERVER || ENABLE_NC_EXTRA \
     3895
     3896#define NC_OPTIONS_STR "\n" \
     3897
     3898#else \
     3899
     3900#define NC_OPTIONS_STR \
     3901
     3902#endif \
     3903
     3904#define nc_trivial_usage \
     3905    IF_NC_EXTRA("[-iN] [-wN] ")IF_NC_SERVER("[-l] [-p PORT] ") \
     3906       "["IF_NC_EXTRA("-f FILE|")"IPADDR PORT]"IF_NC_EXTRA(" [-e PROG]") \
     3907
     3908#define nc_full_usage "\n\n" \
     3909       "Open a pipe to IP:PORT" IF_NC_EXTRA(" or FILE") \
     3910    NC_OPTIONS_STR \
     3911    IF_NC_EXTRA( \
     3912     "\n    -e PROG Run PROG after connect" \
     3913    IF_NC_SERVER( \
     3914     "\n    -l  Listen mode, for inbound connects" \
     3915    IF_NC_EXTRA( \
     3916     "\n        (use -l twice with -e for persistent server)") \
     3917     "\n    -p PORT Local port" \
     3918    ) \
     3919     "\n    -w SEC  Timeout for connect" \
     3920     "\n    -i SEC  Delay interval for lines sent" \
     3921     "\n    -f FILE Use file (ala /dev/ttyS0) instead of network" \
     3922    ) \
     3923
     3924#define nc_notes_usage "" \
     3925    IF_NC_EXTRA( \
     3926       "To use netcat as a terminal emulator on a serial port:\n\n" \
     3927       "$ stty 115200 -F /dev/ttyS0\n" \
     3928       "$ stty raw -echo -ctlecho && nc -f /dev/ttyS0\n" \
     3929    ) \
     3930
     3931#define nc_example_usage \
     3932       "$ nc foobar.somedomain.com 25\n" \
     3933       "220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n" \
     3934       "help\n" \
     3935       "214-Commands supported:\n" \
     3936       "214-    HELO EHLO MAIL RCPT DATA AUTH\n" \
     3937       "214     NOOP QUIT RSET HELP\n" \
     3938       "quit\n" \
     3939       "221 foobar closing connection\n" \
     3940
     3941#endif \
     3942
     3943#define netstat_trivial_usage \
     3944       "[-"IF_ROUTE("r")"al] [-tuwx] [-en"IF_FEATURE_NETSTAT_WIDE("W")IF_FEATURE_NETSTAT_PRG("p")"]" \
     3945
     3946#define netstat_full_usage "\n\n" \
     3947       "Display networking information\n" \
     3948    IF_ROUTE( \
     3949     "\n    -r  Routing table" \
     3950    ) \
     3951     "\n    -a  All sockets" \
     3952     "\n    -l  Listening sockets" \
     3953     "\n        Else: connected sockets" \
     3954     "\n    -t  TCP sockets" \
     3955     "\n    -u  UDP sockets" \
     3956     "\n    -w  Raw sockets" \
     3957     "\n    -x  Unix sockets" \
     3958     "\n        Else: all socket types" \
     3959     "\n    -e  Other/more information" \
     3960     "\n    -n  Don't resolve names" \
     3961    IF_FEATURE_NETSTAT_WIDE( \
     3962     "\n    -W  Wide display" \
     3963    ) \
     3964    IF_FEATURE_NETSTAT_PRG( \
     3965     "\n    -p  Show PID/program name for sockets" \
     3966    ) \
     3967
     3968#define nslookup_trivial_usage \
     3969       "[HOST] [SERVER]" \
     3970
     3971#define nslookup_full_usage "\n\n" \
     3972       "Query the nameserver for the IP address of the given HOST\n" \
     3973       "optionally using a specified DNS server" \
     3974
     3975#define nslookup_example_usage \
     3976       "$ nslookup localhost\n" \
     3977       "Server:     default\n" \
     3978       "Address:    default\n" \
     3979       "\n" \
     3980       "Name:       debian\n" \
     3981       "Address:    127.0.0.1\n" \
     3982
     3983#define ntpd_trivial_usage \
     3984    "[-dnqNw"IF_FEATURE_NTPD_SERVER("l")"] [-S PROG] [-p PEER]..." \
     3985
     3986#define ntpd_full_usage "\n\n" \
     3987       "NTP client/server\n" \
     3988     "\n    -d  Verbose" \
     3989     "\n    -n  Do not daemonize" \
     3990     "\n    -q  Quit after clock is set" \
     3991     "\n    -N  Run at high priority" \
     3992     "\n    -w  Do not set time (only query peers), implies -n" \
     3993    IF_FEATURE_NTPD_SERVER( \
     3994     "\n    -l  Run as server on port 123" \
     3995    ) \
     3996     "\n    -S PROG Run PROG after stepping time, stratum change, and every 11 mins" \
     3997     "\n    -p PEER Obtain time from PEER (may be repeated)" \
     3998
     3999#if !ENABLE_FEATURE_FANCY_PING \
     4000
     4001# define ping_trivial_usage \
     4002       "HOST" \
     4003
     4004# define ping_full_usage "\n\n" \
     4005       "Send ICMP ECHO_REQUEST packets to network hosts" \
     4006
     4007# define ping6_trivial_usage \
     4008       "HOST" \
     4009
     4010# define ping6_full_usage "\n\n" \
     4011       "Send ICMP ECHO_REQUEST packets to network hosts" \
     4012
     4013#else \
     4014
     4015# define ping_trivial_usage \
     4016       "[OPTIONS] HOST" \
     4017
     4018# define ping_full_usage "\n\n" \
     4019       "Send ICMP ECHO_REQUEST packets to network hosts\n" \
     4020     "\n    -4,-6       Force IP or IPv6 name resolution" \
     4021     "\n    -c CNT      Send only CNT pings" \
     4022     "\n    -s SIZE     Send SIZE data bytes in packets (default:56)" \
     4023     "\n    -t TTL      Set TTL" \
     4024     "\n    -I IFACE/IP Use interface or IP address as source" \
     4025     "\n    -W SEC      Seconds to wait for the first response (default:10)" \
     4026     "\n            (after all -c CNT packets are sent)" \
     4027     "\n    -w SEC      Seconds until ping exits (default:infinite)" \
     4028     "\n            (can exit earlier with -c CNT)" \
     4029     "\n    -q      Quiet, only displays output at start" \
     4030     "\n            and when finished" \
     4031
     4032# define ping6_trivial_usage \
     4033       "[OPTIONS] HOST" \
     4034
     4035# define ping6_full_usage "\n\n" \
     4036       "Send ICMP ECHO_REQUEST packets to network hosts\n" \
     4037     "\n    -c CNT      Send only CNT pings" \
     4038     "\n    -s SIZE     Send SIZE data bytes in packets (default:56)" \
     4039     "\n    -I IFACE/IP Use interface or IP address as source" \
     4040     "\n    -q      Quiet, only displays output at start" \
     4041     "\n            and when finished" \
     4042
     4043#endif \
     4044
     4045#define ping_example_usage \
     4046       "$ ping localhost\n" \
     4047       "PING slag (127.0.0.1): 56 data bytes\n" \
     4048       "64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=20.1 ms\n" \
     4049       "\n" \
     4050       "--- debian ping statistics ---\n" \
     4051       "1 packets transmitted, 1 packets received, 0% packet loss\n" \
     4052       "round-trip min/avg/max = 20.1/20.1/20.1 ms\n" \
     4053
     4054#define ping6_example_usage \
     4055       "$ ping6 ip6-localhost\n" \
     4056       "PING ip6-localhost (::1): 56 data bytes\n" \
     4057       "64 bytes from ::1: icmp6_seq=0 ttl=64 time=20.1 ms\n" \
     4058       "\n" \
     4059       "--- ip6-localhost ping statistics ---\n" \
     4060       "1 packets transmitted, 1 packets received, 0% packet loss\n" \
     4061       "round-trip min/avg/max = 20.1/20.1/20.1 ms\n" \
     4062
     4063#define pscan_trivial_usage \
     4064       "[-cb] [-p MIN_PORT] [-P MAX_PORT] [-t TIMEOUT] [-T MIN_RTT] HOST" \
     4065
     4066#define pscan_full_usage "\n\n" \
     4067       "Scan a host, print all open ports\n" \
     4068     "\n    -c  Show closed ports too" \
     4069     "\n    -b  Show blocked ports too" \
     4070     "\n    -p  Scan from this port (default 1)" \
     4071     "\n    -P  Scan up to this port (default 1024)" \
     4072     "\n    -t  Timeout (default 5000 ms)" \
     4073     "\n    -T  Minimum rtt (default 5 ms, increase for congested hosts)" \
     4074
     4075#define route_trivial_usage \
     4076       "[{add|del|delete}]" \
     4077
     4078#define route_full_usage "\n\n" \
     4079       "Edit kernel routing tables\n" \
     4080     "\n    -n  Don't resolve names" \
     4081     "\n    -e  Display other/more information" \
     4082     "\n    -A inet" IF_FEATURE_IPV6("{6}") "   Select address family" \
     4083
     4084#define slattach_trivial_usage \
     4085       "[-cehmLF] [-s SPEED] [-p PROTOCOL] DEVICE" \
     4086
     4087#define slattach_full_usage "\n\n" \
     4088       "Attach network interface(s) to serial line(s)\n" \
     4089     "\n    -p PROT Set protocol (slip, cslip, slip6, clisp6 or adaptive)" \
     4090     "\n    -s SPD  Set line speed" \
     4091     "\n    -e  Exit after initializing device" \
     4092     "\n    -h  Exit when the carrier is lost" \
     4093     "\n    -c PROG Run PROG when the line is hung up" \
     4094     "\n    -m  Do NOT initialize the line in raw 8 bits mode" \
     4095     "\n    -L  Enable 3-wire operation" \
     4096     "\n    -F  Disable RTS/CTS flow control" \
     4097
     4098#define tc_trivial_usage \
     4099    "OBJECT CMD [dev STRING]" \
     4100
     4101#define tc_full_usage "\n\n" \
     4102    "OBJECT: {qdisc|class|filter}\n" \
     4103    "CMD: {add|del|change|replace|show}\n" \
     4104    "\n" \
     4105    "qdisc [ handle QHANDLE ] [ root |"IF_FEATURE_TC_INGRESS(" ingress |")" parent CLASSID ]\n" \
     4106    "   [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n" \
     4107    "   QDISC_KIND := { [p|b]fifo | tbf | prio | cbq | red | etc. }\n" \
     4108    "qdisc show [ dev STRING ]"IF_FEATURE_TC_INGRESS(" [ingress]")"\n" \
     4109    "class [ classid CLASSID ] [ root | parent CLASSID ]\n" \
     4110    "   [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n" \
     4111    "class show [ dev STRING ] [ root | parent CLASSID ]\n" \
     4112    "filter [ pref PRIO ] [ protocol PROTO ]\n" \
     4113    "   [ root | classid CLASSID ] [ handle FILTERID ]\n" \
     4114    "   [ [ FILTER_TYPE ] [ help | OPTIONS ] ]\n" \
     4115    "filter show [ dev STRING ] [ root | parent CLASSID ]" \
     4116
     4117#define tcpsvd_trivial_usage \
     4118       "[-hEv] [-c N] [-C N[:MSG]] [-b N] [-u USER] [-l NAME] IP PORT PROG" \
     4119
     4120#define tcpsvd_full_usage "\n\n" \
     4121       "Create TCP socket, bind to IP:PORT and listen\n" \
     4122       "for incoming connection. Run PROG for each connection.\n" \
     4123     "\n    IP      IP to listen on, 0 = all" \
     4124     "\n    PORT        Port to listen on" \
     4125     "\n    PROG ARGS   Program to run" \
     4126     "\n    -l NAME     Local hostname (else looks up local hostname in DNS)" \
     4127     "\n    -u USER[:GRP]   Change to user/group after bind" \
     4128     "\n    -c N        Handle up to N connections simultaneously" \
     4129     "\n    -b N        Allow a backlog of approximately N TCP SYNs" \
     4130     "\n    -C N[:MSG]  Allow only up to N connections from the same IP" \
     4131     "\n            New connections from this IP address are closed" \
     4132     "\n            immediately. MSG is written to the peer before close" \
     4133     "\n    -h      Look up peer's hostname" \
     4134     "\n    -E      Don't set up environment variables" \
     4135     "\n    -v      Verbose" \
     4136
     4137#define udpsvd_trivial_usage \
     4138       "[-hEv] [-c N] [-u USER] [-l NAME] IP PORT PROG" \
     4139
     4140#define udpsvd_full_usage "\n\n" \
     4141       "Create UDP socket, bind to IP:PORT and wait\n" \
     4142       "for incoming packets. Run PROG for each packet,\n" \
     4143       "redirecting all further packets with same peer ip:port to it.\n" \
     4144     "\n    IP      IP to listen on, 0 = all" \
     4145     "\n    PORT        Port to listen on" \
     4146     "\n    PROG ARGS   Program to run" \
     4147     "\n    -l NAME     Local hostname (else looks up local hostname in DNS)" \
     4148     "\n    -u USER[:GRP]   Change to user/group after bind" \
     4149     "\n    -c N        Handle up to N connections simultaneously" \
     4150     "\n    -h      Look up peer's hostname" \
     4151     "\n    -E      Don't set up environment variables" \
     4152     "\n    -v      Verbose" \
     4153
     4154#if ENABLE_FEATURE_TELNET_AUTOLOGIN \
     4155
     4156#define telnet_trivial_usage \
     4157       "[-a] [-l USER] HOST [PORT]" \
     4158
     4159#define telnet_full_usage "\n\n" \
     4160       "Connect to telnet server\n" \
     4161     "\n    -a  Automatic login with $USER variable" \
     4162     "\n    -l USER Automatic login as USER" \
     4163
     4164#else \
     4165
     4166#define telnet_trivial_usage \
     4167       "HOST [PORT]" \
     4168
     4169#define telnet_full_usage "\n\n" \
     4170       "Connect to telnet server" \
     4171
     4172#endif \
     4173
     4174#define telnetd_trivial_usage \
     4175       "[OPTIONS]" \
     4176
     4177#define telnetd_full_usage "\n\n" \
     4178       "Handle incoming telnet connections" \
     4179    IF_NOT_FEATURE_TELNETD_STANDALONE(" via inetd") "\n" \
     4180     "\n    -l LOGIN    Exec LOGIN on connect" \
     4181     "\n    -f ISSUE_FILE   Display ISSUE_FILE instead of /etc/issue" \
     4182     "\n    -K      Close connection as soon as login exits" \
     4183     "\n            (normally wait until all programs close slave pty)" \
     4184    IF_FEATURE_TELNETD_STANDALONE( \
     4185     "\n    -p PORT     Port to listen on" \
     4186     "\n    -b ADDR[:PORT]  Address to bind to" \
     4187     "\n    -F      Run in foreground" \
     4188     "\n    -i      Inetd mode" \
     4189    IF_FEATURE_TELNETD_INETD_WAIT( \
     4190     "\n    -w SEC      Inetd 'wait' mode, linger time SEC" \
     4191     "\n    -S      Log to syslog (implied by -i or without -F and -w)" \
     4192    ) \
     4193    ) \
     4194
     4195#define tftp_trivial_usage \
     4196       "[OPTIONS] HOST [PORT]" \
     4197
     4198#define tftp_full_usage "\n\n" \
     4199       "Transfer a file from/to tftp server\n" \
     4200     "\n    -l FILE Local FILE" \
     4201     "\n    -r FILE Remote FILE" \
     4202    IF_FEATURE_TFTP_GET( \
     4203     "\n    -g  Get file" \
     4204    ) \
     4205    IF_FEATURE_TFTP_PUT( \
     4206     "\n    -p  Put file" \
     4207    ) \
     4208    IF_FEATURE_TFTP_BLOCKSIZE( \
     4209     "\n    -b SIZE Transfer blocks of SIZE octets" \
     4210    ) \
     4211
     4212#define tftpd_trivial_usage \
     4213       "[-cr] [-u USER] [DIR]" \
     4214
     4215#define tftpd_full_usage "\n\n" \
     4216       "Transfer a file on tftp client's request\n" \
     4217       "\n" \
     4218       "tftpd should be used as an inetd service.\n" \
     4219       "tftpd's line for inetd.conf:\n" \
     4220       "    69 dgram udp nowait root tftpd tftpd -l /files/to/serve\n" \
     4221       "It also can be ran from udpsvd:\n" \
     4222       "    udpsvd -vE 0.0.0.0 69 tftpd /files/to/serve\n" \
     4223     "\n    -r  Prohibit upload" \
     4224     "\n    -c  Allow file creation via upload" \
     4225     "\n    -u  Access files as USER" \
     4226     "\n    -l  Log to syslog (inetd mode requires this)" \
     4227
     4228#define traceroute_trivial_usage \
     4229       "[-"IF_TRACEROUTE6("46")"FIldnrv] [-f 1ST_TTL] [-m MAXTTL] [-p PORT] [-q PROBES]\n" \
     4230       "    [-s SRC_IP] [-t TOS] [-w WAIT_SEC] [-g GATEWAY] [-i IFACE]\n" \
     4231       "    [-z PAUSE_MSEC] HOST [BYTES]" \
     4232
     4233#define traceroute_full_usage "\n\n" \
     4234       "Trace the route to HOST\n" \
     4235    IF_TRACEROUTE6( \
     4236     "\n    -4,-6   Force IP or IPv6 name resolution" \
     4237    ) \
     4238     "\n    -F  Set the don't fragment bit" \
     4239     "\n    -I  Use ICMP ECHO instead of UDP datagrams" \
     4240     "\n    -l  Display the TTL value of the returned packet" \
     4241     "\n    -d  Set SO_DEBUG options to socket" \
     4242     "\n    -n  Print numeric addresses" \
     4243     "\n    -r  Bypass routing tables, send directly to HOST" \
     4244     "\n    -v  Verbose" \
     4245     "\n    -m  Max time-to-live (max number of hops)" \
     4246     "\n    -p  Base UDP port number used in probes" \
     4247     "\n        (default 33434)" \
     4248     "\n    -q  Number of probes per TTL (default 3)" \
     4249     "\n    -s  IP address to use as the source address" \
     4250     "\n    -t  Type-of-service in probe packets (default 0)" \
     4251     "\n    -w  Time in seconds to wait for a response (default 3)" \
     4252     "\n    -g  Loose source route gateway (8 max)" \
     4253
     4254#define traceroute6_trivial_usage \
     4255       "[-dnrv] [-m MAXTTL] [-p PORT] [-q PROBES]\n" \
     4256       "    [-s SRC_IP] [-t TOS] [-w WAIT_SEC] [-i IFACE]\n" \
     4257       "    HOST [BYTES]" \
     4258
     4259#define traceroute6_full_usage "\n\n" \
     4260       "Trace the route to HOST\n" \
     4261     "\n    -d  Set SO_DEBUG options to socket" \
     4262     "\n    -n  Print numeric addresses" \
     4263     "\n    -r  Bypass routing tables, send directly to HOST" \
     4264     "\n    -v  Verbose" \
     4265     "\n    -m  Max time-to-live (max number of hops)" \
     4266     "\n    -p  Base UDP port number used in probes" \
     4267     "\n        (default is 33434)" \
     4268     "\n    -q  Number of probes per TTL (default 3)" \
     4269     "\n    -s  IP address to use as the source address" \
     4270     "\n    -t  Type-of-service in probe packets (default 0)" \
     4271     "\n    -w  Time in seconds to wait for a response (default 3)" \
     4272
     4273#define tunctl_trivial_usage \
     4274       "[-f device] ([-t name] | -d name)" IF_FEATURE_TUNCTL_UG(" [-u owner] [-g group] [-b]") \
     4275
     4276#define tunctl_full_usage "\n\n" \
     4277       "Create or delete tun interfaces\n" \
     4278     "\n    -f name     tun device (/dev/net/tun)" \
     4279     "\n    -t name     Create iface 'name'" \
     4280     "\n    -d name     Delete iface 'name'" \
     4281    IF_FEATURE_TUNCTL_UG( \
     4282     "\n    -u owner    Set iface owner" \
     4283     "\n    -g group    Set iface group" \
     4284     "\n    -b      Brief output" \
     4285    ) \
     4286
     4287#define tunctl_example_usage \
     4288       "# tunctl\n" \
     4289       "# tunctl -d tun0\n" \
     4290
     4291#define vconfig_trivial_usage \
     4292       "COMMAND [OPTIONS]" \
     4293
     4294#define vconfig_full_usage "\n\n" \
     4295       "Create and remove virtual ethernet devices\n" \
     4296     "\n    add     IFACE VLAN_ID" \
     4297     "\n    rem     VLAN_NAME" \
     4298     "\n    set_flag    IFACE 0|1 VLAN_QOS" \
     4299     "\n    set_egress_map  VLAN_NAME SKB_PRIO VLAN_QOS" \
     4300     "\n    set_ingress_map VLAN_NAME SKB_PRIO VLAN_QOS" \
     4301     "\n    set_name_type   NAME_TYPE" \
     4302
     4303#define wget_trivial_usage \
     4304    IF_FEATURE_WGET_LONG_OPTIONS( \
     4305       "[-c|--continue] [-s|--spider] [-q|--quiet] [-O|--output-document FILE]\n" \
     4306       "    [--header 'header: value'] [-Y|--proxy on/off] [-P DIR]\n" \
     4307       "    [-U|--user-agent AGENT]" IF_FEATURE_WGET_TIMEOUT(" [-T SEC]") " URL..." \
     4308    ) \
     4309    IF_NOT_FEATURE_WGET_LONG_OPTIONS( \
     4310       "[-csq] [-O FILE] [-Y on/off] [-P DIR] [-U AGENT]" \
     4311            IF_FEATURE_WGET_TIMEOUT(" [-T SEC]") " URL..." \
     4312    ) \
     4313
     4314#define wget_full_usage "\n\n" \
     4315       "Retrieve files via HTTP or FTP\n" \
     4316     "\n    -s  Spider mode - only check file existence" \
     4317     "\n    -c  Continue retrieval of aborted transfer" \
     4318     "\n    -q  Quiet" \
     4319     "\n    -P DIR  Save to DIR (default .)" \
     4320    IF_FEATURE_WGET_TIMEOUT( \
     4321     "\n    -T SEC  Network read timeout is SEC seconds" \
     4322    ) \
     4323     "\n    -O FILE Save to FILE ('-' for stdout)" \
     4324     "\n    -U STR  Use STR for User-Agent header" \
     4325     "\n    -Y  Use proxy ('on' or 'off')" \
     4326
     4327#define zcip_trivial_usage \
     4328       "[OPTIONS] IFACE SCRIPT" \
     4329
     4330#define zcip_full_usage "\n\n" \
     4331       "Manage a ZeroConf IPv4 link-local address\n" \
     4332     "\n    -f      Run in foreground" \
     4333     "\n    -q      Quit after obtaining address" \
     4334     "\n    -r 169.254.x.x  Request this address first" \
     4335     "\n    -v      Verbose" \
     4336     "\n" \
     4337     "\nWith no -q, runs continuously monitoring for ARP conflicts," \
     4338     "\nexits only on I/O errors (link down etc)" \
     4339
     4340#define lpd_trivial_usage \
     4341       "SPOOLDIR [HELPER [ARGS]]" \
     4342
     4343#define lpd_full_usage "\n\n" \
     4344       "SPOOLDIR must contain (symlinks to) device nodes or directories" \
     4345     "\nwith names matching print queue names. In the first case, jobs are" \
     4346     "\nsent directly to the device. Otherwise each job is stored in queue" \
     4347     "\ndirectory and HELPER program is called. Name of file to print" \
     4348     "\nis passed in $DATAFILE variable." \
     4349     "\nExample:" \
     4350     "\n    tcpsvd -E 0 515 softlimit -m 999999 lpd /var/spool ./print" \
     4351
     4352#define lpr_trivial_usage \
     4353       "-P queue[@host[:port]] -U USERNAME -J TITLE -Vmh [FILE]..." \
     4354
     4355#define lpr_full_usage "\n\n" \
     4356       "    -P  lp service to connect to (else uses $PRINTER)" \
     4357     "\n    -m  Send mail on completion" \
     4358     "\n    -h  Print banner page too" \
     4359     "\n    -V  Verbose" \
     4360
     4361#define lpq_trivial_usage \
     4362       "[-P queue[@host[:port]]] [-U USERNAME] [-d JOBID]... [-fs]" \
     4363
     4364#define lpq_full_usage "\n\n" \
     4365       "    -P  lp service to connect to (else uses $PRINTER)" \
     4366     "\n    -d  Delete jobs" \
     4367     "\n    -f  Force any waiting job to be printed" \
     4368     "\n    -s  Short display" \
     4369
     4370#define free_trivial_usage \
     4371       "" IF_DESKTOP("[-b/k/m/g]") \
     4372
     4373#define free_full_usage "\n\n" \
     4374       "Display the amount of free and used system memory" \
     4375
     4376#define free_example_usage \
     4377       "$ free\n" \
     4378       "              total         used         free       shared      buffers\n" \
     4379       "  Mem:       257628       248724         8904        59644        93124\n" \
     4380       " Swap:       128516         8404       120112\n" \
     4381       "Total:       386144       257128       129016\n" \
     4382
     4383#define fuser_trivial_usage \
     4384       "[OPTIONS] FILE or PORT/PROTO" \
     4385
     4386#define fuser_full_usage "\n\n" \
     4387       "Find processes which use FILEs or PORTs\n" \
     4388     "\n    -m  Find processes which use same fs as FILEs" \
     4389     "\n    -4,-6   Search only IPv4/IPv6 space" \
     4390     "\n    -s  Don't display PIDs" \
     4391     "\n    -k  Kill found processes" \
     4392     "\n    -SIGNAL Signal to send (default: KILL)" \
     4393
     4394#define iostat_trivial_usage \
     4395       "[-c] [-d] [-t] [-z] [-k|-m] [ALL|BLOCKDEV...] [INTERVAL [COUNT]]" \
     4396
     4397#define iostat_full_usage "\n\n" \
     4398       "Report CPU and I/O statistics\n" \
     4399     "\n    -c  Show CPU utilization" \
     4400     "\n    -d  Show device utilization" \
     4401     "\n    -t  Print current time" \
     4402     "\n    -z  Omit devices with no activity" \
     4403     "\n    -k  Use kb/s" \
     4404     "\n    -m  Use Mb/s" \
     4405
     4406#define kill_trivial_usage \
     4407       "[-l] [-SIG] PID..." \
     4408
     4409#define kill_full_usage "\n\n" \
     4410       "Send a signal (default: TERM) to given PIDs\n" \
     4411     "\n    -l  List all signal names and numbers" \
     4412
     4413#define kill_example_usage \
     4414       "$ ps | grep apache\n" \
     4415       "252 root     root     S [apache]\n" \
     4416       "263 www-data www-data S [apache]\n" \
     4417       "264 www-data www-data S [apache]\n" \
     4418       "265 www-data www-data S [apache]\n" \
     4419       "266 www-data www-data S [apache]\n" \
     4420       "267 www-data www-data S [apache]\n" \
     4421       "$ kill 252\n" \
     4422
     4423#define killall_trivial_usage \
     4424       "[-l] [-q] [-SIG] PROCESS_NAME..." \
     4425
     4426#define killall_full_usage "\n\n" \
     4427       "Send a signal (default: TERM) to given processes\n" \
     4428     "\n    -l  List all signal names and numbers" \
     4429     "\n    -q  Don't complain if no processes were killed" \
     4430
     4431#define killall_example_usage \
     4432       "$ killall apache\n" \
     4433
     4434#define killall5_trivial_usage \
     4435       "[-l] [-SIG] [-o PID]..." \
     4436
     4437#define killall5_full_usage "\n\n" \
     4438       "Send a signal (default: TERM) to all processes outside current session\n" \
     4439     "\n    -l  List all signal names and numbers" \
     4440     "\n    -o PID  Don't signal this PID" \
     4441
     4442#define mpstat_trivial_usage \
     4443       "[-A] [-I SUM|CPU|ALL|SCPU] [-u] [-P num|ALL] [INTERVAL [COUNT]]" \
     4444
     4445#define mpstat_full_usage "\n\n" \
     4446       "Per-processor statistics\n" \
     4447     "\n    -A          Same as -I ALL -u -P ALL" \
     4448     "\n    -I SUM|CPU|ALL|SCPU Report interrupt statistics" \
     4449     "\n    -P num|ALL      Processor to monitor" \
     4450     "\n    -u          Report CPU utilization" \
     4451
     4452#define nmeter_trivial_usage \
     4453       "[-d MSEC] FORMAT_STRING" \
     4454
     4455#define nmeter_full_usage "\n\n" \
     4456       "Monitor system in real time" \
     4457     "\n" \
     4458     "\n -d MSEC    Milliseconds between updates (default:1000)" \
     4459     "\n" \
     4460     "\nFormat specifiers:" \
     4461     "\n %Nc or %[cN]   CPU. N - bar size (default:10)" \
     4462     "\n        (displays: S:system U:user N:niced D:iowait I:irq i:softirq)" \
     4463     "\n %[nINTERFACE]  Network INTERFACE" \
     4464     "\n %m     Allocated memory" \
     4465     "\n %[mf]      Free memory" \
     4466     "\n %[mt]      Total memory" \
     4467     "\n %s     Allocated swap" \
     4468     "\n %f     Number of used file descriptors" \
     4469     "\n %Ni        Total/specific IRQ rate" \
     4470     "\n %x     Context switch rate" \
     4471     "\n %p     Forks" \
     4472     "\n %[pn]      # of processes" \
     4473     "\n %b     Block io" \
     4474     "\n %Nt        Time (with N decimal points)" \
     4475     "\n %r     Print <cr> instead of <lf> at EOL" \
     4476
     4477#define pgrep_trivial_usage \
     4478       "[-flnovx] [-s SID|-P PPID|PATTERN]" \
     4479
     4480#define pgrep_full_usage "\n\n" \
     4481       "Display process(es) selected by regex PATTERN\n" \
     4482     "\n    -l  Show command name too" \
     4483     "\n    -f  Match against entire command line" \
     4484     "\n    -n  Show the newest process only" \
     4485     "\n    -o  Show the oldest process only" \
     4486     "\n    -v  Negate the match" \
     4487     "\n    -x  Match whole name (not substring)" \
     4488     "\n    -s  Match session ID (0 for current)" \
     4489     "\n    -P  Match parent process ID" \
     4490
     4491#define pkill_trivial_usage \
     4492       "[-l|-SIGNAL] [-fnovx] [-s SID|-P PPID|PATTERN]" \
     4493
     4494#define pkill_full_usage "\n\n" \
     4495       "Send a signal to process(es) selected by regex PATTERN\n" \
     4496     "\n    -l  List all signals" \
     4497     "\n    -f  Match against entire command line" \
     4498     "\n    -n  Signal the newest process only" \
     4499     "\n    -o  Signal the oldest process only" \
     4500     "\n    -v  Negate the match" \
     4501     "\n    -x  Match whole name (not substring)" \
     4502     "\n    -s  Match session ID (0 for current)" \
     4503     "\n    -P  Match parent process ID" \
     4504
     4505#if (ENABLE_FEATURE_PIDOF_SINGLE || ENABLE_FEATURE_PIDOF_OMIT) \
     4506
     4507#define pidof_trivial_usage \
     4508       "[OPTIONS] [NAME]..." \
     4509
     4510#define USAGE_PIDOF "\n" \
     4511
     4512#else \
     4513
     4514#define pidof_trivial_usage \
     4515       "[NAME]..." \
     4516
     4517#define USAGE_PIDOF /* none */ \
     4518
     4519#endif \
     4520
     4521#define pidof_full_usage "\n\n" \
     4522       "List PIDs of all processes with names that match NAMEs" \
     4523    USAGE_PIDOF \
     4524    IF_FEATURE_PIDOF_SINGLE( \
     4525     "\n    -s  Show only one PID" \
     4526    ) \
     4527    IF_FEATURE_PIDOF_OMIT( \
     4528     "\n    -o PID  Omit given pid" \
     4529     "\n        Use %PPID to omit pid of pidof's parent" \
     4530    ) \
     4531
     4532#define pidof_example_usage \
     4533       "$ pidof init\n" \
     4534       "1\n" \
     4535    IF_FEATURE_PIDOF_OMIT( \
     4536       "$ pidof /bin/sh\n20351 5973 5950\n") \
     4537    IF_FEATURE_PIDOF_OMIT( \
     4538       "$ pidof /bin/sh -o %PPID\n20351 5950") \
     4539
     4540#define pmap_trivial_usage \
     4541       "[-xq] PID" \
     4542
     4543#define pmap_full_usage "\n\n" \
     4544       "Display detailed process memory usage" \
     4545     "\n" \
     4546     "\n    -x  Show details" \
     4547     "\n    -q  Quiet" \
     4548
     4549#define powertop_trivial_usage \
     4550       "" \
     4551
     4552#define powertop_full_usage "\n\n" \
     4553       "Analyze power consumption on Intel-based laptops\n" \
     4554
     4555#if ENABLE_DESKTOP \
     4556
     4557#define ps_trivial_usage \
     4558       "[-o COL1,COL2=HEADER]" IF_FEATURE_SHOW_THREADS(" [-T]") \
     4559
     4560#define ps_full_usage "\n\n" \
     4561       "Show list of processes\n" \
     4562     "\n    -o COL1,COL2=HEADER Select columns for display" \
     4563    IF_FEATURE_SHOW_THREADS( \
     4564     "\n    -T          Show threads" \
     4565    ) \
     4566
     4567#else /* !ENABLE_DESKTOP */ \
     4568
     4569#if !ENABLE_SELINUX && !ENABLE_FEATURE_PS_WIDE \
     4570
     4571#define USAGE_PS "\nThis version of ps accepts no options" \
     4572
     4573#else \
     4574
     4575#define USAGE_PS "" \
     4576
     4577#endif \
     4578
     4579#define ps_trivial_usage \
     4580       "" \
     4581
     4582#define ps_full_usage "\n\n" \
     4583       "Show list of processes\n" \
     4584    USAGE_PS \
     4585    IF_SELINUX( \
     4586     "\n    -Z  Show selinux context" \
     4587    ) \
     4588    IF_FEATURE_PS_WIDE( \
     4589     "\n    w   Wide output" \
     4590    ) \
     4591    IF_FEATURE_PS_LONG( \
     4592     "\n    l   Long output" \
     4593    ) \
     4594    IF_FEATURE_SHOW_THREADS( \
     4595     "\n    T   Show threads" \
     4596    ) \
     4597
     4598#endif /* ENABLE_DESKTOP */ \
     4599
     4600#define ps_example_usage \
     4601       "$ ps\n" \
     4602       "  PID  Uid      Gid State Command\n" \
     4603       "    1 root     root     S init\n" \
     4604       "    2 root     root     S [kflushd]\n" \
     4605       "    3 root     root     S [kupdate]\n" \
     4606       "    4 root     root     S [kpiod]\n" \
     4607       "    5 root     root     S [kswapd]\n" \
     4608       "  742 andersen andersen S [bash]\n" \
     4609       "  743 andersen andersen S -bash\n" \
     4610       "  745 root     root     S [getty]\n" \
     4611       " 2990 andersen andersen R ps\n" \
     4612
     4613#define renice_trivial_usage \
     4614       "{{-n INCREMENT} | PRIORITY} [[-p | -g | -u] ID...]" \
     4615
     4616#define renice_full_usage "\n\n" \
     4617       "Change scheduling priority for a running process\n" \
     4618     "\n    -n  Adjust current nice value (smaller is faster)" \
     4619     "\n    -p  Process id(s) (default)" \
     4620     "\n    -g  Process group id(s)" \
     4621     "\n    -u  Process user name(s) and/or id(s)" \
     4622
     4623#define smemcap_trivial_usage ">SMEMDATA.TAR" \
     4624
     4625#define smemcap_full_usage "\n\n" \
     4626       "Collect memory usage data in /proc and write it to stdout" \
     4627
     4628#define sysctl_trivial_usage \
     4629       "[OPTIONS] [KEY[=VALUE]]..." \
     4630
     4631#define sysctl_full_usage "\n\n" \
     4632       "Show/set kernel parameters\n" \
     4633     "\n    -e  Don't warn about unknown keys" \
     4634     "\n    -n  Don't show key names" \
     4635     "\n    -a  Show all values" \
     4636     "\n    -w  Set values" \
     4637     "\n    -p FILE Set values from FILE (default /etc/sysctl.conf)" \
     4638     "\n    -q      Set values silently" \
     4639
     4640#define sysctl_example_usage \
     4641       "sysctl [-n] [-e] variable...\n" \
     4642       "sysctl [-n] [-e] [-q] -w variable=value...\n" \
     4643       "sysctl [-n] [-e] -a\n" \
     4644       "sysctl [-n] [-e] [-q] -p file   (default /etc/sysctl.conf)\n" \
     4645       "sysctl [-n] [-e] -A\n" \
     4646
     4647#if ENABLE_FEATURE_SHOW_THREADS || ENABLE_FEATURE_TOP_SMP_CPU \
     4648
     4649# define IF_SHOW_THREADS_OR_TOP_SMP(...) __VA_ARGS__ \
     4650
     4651#else \
     4652
     4653# define IF_SHOW_THREADS_OR_TOP_SMP(...) \
     4654
     4655#endif \
     4656
     4657#define top_trivial_usage \
     4658       "[-b] [-nCOUNT] [-dSECONDS]" IF_FEATURE_TOPMEM(" [-m]") \
     4659
     4660#define top_full_usage "\n\n" \
     4661       "Provide a view of process activity in real time." \
     4662   "\n""Read the status of all processes from /proc each SECONDS" \
     4663   "\n""and display a screenful of them." \
     4664   "\n""Keys:" \
     4665   "\n""    N/M" \
     4666                IF_FEATURE_TOP_CPU_USAGE_PERCENTAGE("/P") \
     4667                IF_FEATURE_TOP_CPU_USAGE_PERCENTAGE("/T") \
     4668           ": " IF_FEATURE_TOPMEM("show CPU usage, ") "sort by pid/mem" \
     4669                IF_FEATURE_TOP_CPU_USAGE_PERCENTAGE("/cpu") \
     4670                IF_FEATURE_TOP_CPU_USAGE_PERCENTAGE("/time") \
     4671    IF_FEATURE_TOPMEM( \
     4672   "\n""    S: show memory" \
     4673    ) \
     4674   "\n""    R: reverse sort" \
     4675    IF_SHOW_THREADS_OR_TOP_SMP( \
     4676   "\n""    " \
     4677                IF_FEATURE_SHOW_THREADS("H: toggle threads") \
     4678                IF_FEATURE_SHOW_THREADS(IF_FEATURE_TOP_SMP_CPU(", ")) \
     4679                IF_FEATURE_TOP_SMP_CPU("1: toggle SMP") \
     4680    ) \
     4681   "\n""    Q,^C: exit" \
     4682   "\n" \
     4683   "\n""Options:" \
     4684   "\n""    -b  Batch mode" \
     4685   "\n""    -n N    Exit after N iterations" \
     4686   "\n""    -d N    Delay between updates" \
     4687    IF_FEATURE_TOPMEM( \
     4688   "\n""    -m  Same as 's' key" \
     4689    ) \
     4690
     4691#define uptime_trivial_usage \
     4692       "" \
     4693
     4694#define uptime_full_usage "\n\n" \
     4695       "Display the time since the last boot" \
     4696
     4697#define uptime_example_usage \
     4698       "$ uptime\n" \
     4699       "  1:55pm  up  2:30, load average: 0.09, 0.04, 0.00\n" \
     4700
     4701#define watch_trivial_usage \
     4702       "[-n SEC] [-t] PROG ARGS" \
     4703
     4704#define watch_full_usage "\n\n" \
     4705       "Run PROG periodically\n" \
     4706     "\n    -n  Loop period in seconds (default 2)" \
     4707     "\n    -t  Don't print header" \
     4708
     4709#define watch_example_usage \
     4710       "$ watch date\n" \
     4711       "Mon Dec 17 10:31:40 GMT 2000\n" \
     4712       "Mon Dec 17 10:31:42 GMT 2000\n" \
     4713       "Mon Dec 17 10:31:44 GMT 2000" \
    15834714
    15844715#define chpst_trivial_usage \
    15854716       "[-vP012] [-u USER[:GRP]] [-U USER[:GRP]] [-e DIR]\n" \