简介
https://www.busybox.net/
https://github.com/mirror/busybox
BusyBox: 嵌入式 Linux 的瑞士军刀
BusyBox 将许多常见的 UNIX 实用程序的小型版本组合成一个单一的小型可执行文件。它为 GNU fileutils、shellutils 等通常在 GNU 工具集中找到的大多数实用程序提供了替代品。BusyBox 中的实用程序通常比其功能完整的 GNU 对应物具有更少的选项;然而,所包含的选项提供了预期的功能,并且在行为上非常类似于它们的 GNU 对应物。BusyBox 为任何小型或嵌入式系统提供了一个相当完整的环境。
BusyBox 被设计为考虑大小优化和有限资源。它还非常模块化,因此您可以轻松地在编译时包含或排除命令(或功能)。这使得定制嵌入式系统变得很容易。要创建一个工作系统,只需在 /dev 中添加一些设备节点,/etc 中添加一些配置文件,以及一个 Linux 内核。
BusyBox 由Denys Vlasenko维护,并根据GNU GENERAL PUBLIC LICENSE(GPL)第2版进行许可。
linux vm busybox
web js linux 虚拟机:https://bellard.org/jslinux/vm.html?url=alpine-x86.cfg&mem=192
web js 虚拟机列表:https://bellard.org/jslinux/index.html
子命令语法
SYNTAX
busybox [arguments…] # or
[arguments…] # if symlinked
applet:小程序
查找特定子命令源码的方法
eg:time子命令
time_main就是入口函数,全局搜索即可。
子命令介绍
https://www.busybox.net/screenshot.html
https://www.busybox.net/downloads/BusyBox.html 参数示例及解释
逐个解释每个命令的功能(共约307个命令):
- [, [[: 条件测试命令,用于检查条件是否成立。[是test命令的别名,[[是test的改进版本,支持更多的条件测试。
- acpid: ACPI事件守护进程,用于管理和响应ACPI事件。ACPI (高级配置和电源接口) 事件
- add-shell: 添加shell到系统中,用于用户登录后的默认shell。
- addgroup: 添加用户组。
- adduser: 添加用户。
- adjtimex: 查询或设置内核时钟参数。
- arch: 显示系统架构信息。
- arp: 显示和操作ARP缓存。
- arping: ARP ping工具,用于检查主机是否在线。
- ash: Almquist Shell,一种轻量级的shell。
- awk: 文本处理工具,用于处理文本文件中的数据。
- base64: Base64编码和解码工具。
- basename: 返回路径的基本文件名。
- bbconfig: BusyBox配置工具。
- bc: 数值计算工具。
- beep: 发出蜂鸣声。
- blkdiscard: 丢弃块设备的内容。
- blkid: 查询块设备的UUID和文件系统信息。
- blockdev: 查询或设置块设备的属性。
- brctl: 控制Linux内核的网桥设备。
- bunzip2: 解压缩bzip2压缩的文件。
- bzcat: 查看bzip2压缩的文件。
- bzip2: 压缩文件。
- cal: 显示日历。
- cat: 连接文件并打印到标准输出。
- chgrp: 更改文件所属用户组。
- chmod: 更改文件权限。
- chown: 更改文件所有者和用户组。
- chpasswd: 批量更改用户密码。
- chroot: 更改根目录。
- chvt: 切换虚拟终端。
- cksum: 计算文件CRC校验和。
- clear: 清屏。
- cmp: 比较两个文件的内容。
- comm: 比较两个已排序的文件行。
- conspy: 用于显示和控制虚拟终端的工具。
- cp: 复制文件或目录。
- cpio: 复制文件到归档或从归档中提取文件。
- crond: cron守护进程,用于定时执行任务。
- crontab: 编辑或查看用户的cron作业列表。
- cryptpw: 加密密码。
- cut: 从行中剪切字符。
- date: 显示或设置系统时间和日期。
- dc: Desk Calculator,逆波兰表达式计算器。
- dd: 复制文件,并在复制过程中进行转换。
- deallocvt: 释放虚拟终端。
- delgroup: 删除用户组。
- deluser: 删除用户。
- depmod: 生成内核模块依赖关系。
- df: 显示磁盘空间使用情况。
- diff: 比较两个文件或目录的差异。
- dirname: 返回路径的目录部分。
- dmesg: 显示内核日志消息。
- dnsdomainname: 显示或设置系统的DNS域名。
- dos2unix: 将DOS格式的文本文件转换为UNIX格式。
- du: 显示目录或文件的磁盘使用情况。
- dumpkmap: 显示内核键盘映射。
- dumpleases: 显示DHCP服务器分配的IP地址列表。
- echo: 显示字符串。
- ed: 文本编辑器。
- egrep: 扩展的正则表达式匹配。
- eject: 弹出光驱。
- env: 显示或设置环境变量。
- ether-wake: 唤醒指定MAC地址的网络设备。
- expand: 将TAB字符转换为空格字符。
- expr: 表达式计算器。
- factor: 因子分解。
- fallocate: 预分配或调整文件空间。
- false: 什么都不做,总是返回假值。
- fatattr: 查看或设置FAT文件系统中文件的属性。
- fbset: 设置Linux内核的帧缓冲设备。
- fbsplash: Linux帧缓冲启动画面。
- fdflush: 刷新文件系统缓存。
- fdformat: 格式化软盘或硬盘驱动器。
- fdisk: 分区工具。
- fgrep: 固定字符串匹配。
- find: 查找文件。
- findfs: 查找文件系统。
- flock: 文件锁定工具。
- fold: 将文本包装到指定宽度。
- free: 显示内存使用情况。
- fsck: 文件系统检查和修复工具。
- fstrim: TRIM文件系统中的空闲块。
- fsync: 强制将文件系统缓存写入磁盘。
- fuser: 显示使用文件或文件系统的进程。
- getopt: 解析命令行选项。
- getty: 显示登录提示,用于终端登录。
- grep: 文本搜索工具。
- groups: 显示用户所属用户组。
- gunzip: 解压缩gzip压缩的文件。
- gzip: 压缩文件。
- halt: 关闭系统。
- hd: 十六进制文件编辑器。
- hdparm: ATA/ATAPI硬盘驱动器参数设置工具。
- head: 显示文件的前几行。
- hexdump: 十六进制转储工具。
- hostid: 显示主机ID。
- hostname: 显示或设置主机名主机名是系统在安装过程中设置的名称。
- hwclock:用于查看和设置系统的硬件时钟。硬件时钟是即使系统关机也会运行的时钟。
- id:用于显示当前用户或指定用户的用户 ID 和组 ID。
- ifconfig:用于配置网络接口。它可以用于查看当前活动的网络接口的信息,以及配置新的网络接口。
- ifdown:用于关闭网络接口,即停用它。
- ifenslave:用于将多个网络接口绑定成一个逻辑接口,这个过程称为“接口绑定”或“NIC 绑定”。
- ifup:用于启动网络接口,即激活它。
- init:用于在系统启动时初始化系统。通常是内核启动的第一个进程,进程 ID(PID)为 1。
- inotifyd:这个命令不是标准的 Linux 命令。可能是指使用 inotify API 监视文件系统事件的守护进程。
- insmod:用于将模块(可加载内核对象)插入 Linux 内核。
- install:用于复制文件并在单个操作中设置其权限。
- ionice:用于设置或查看进程的 I/O 调度类别和优先级。
- iostat:用于查看存储设备和分区的输入/输出(I/O)统计信息。
- ip:用于配置网络接口、路由表和 IP 网络的各个方面的多功能工具。
- ipaddr:这个命令不是标准的 Linux 命令。可能是指与 IP 地址相关的工具或命令。
- ipcalc:用于计算各种网络地址信息,如子网掩码、网络地址和广播地址。
- ipcrm:用于删除特定的 IPC(进程间通信)对象,如消息队列、信号量或共享内存段。
- ipcs:用于显示系统上当前正在使用的 IPC(进程间通信)对象的信息。
- iplink:用于显示和操作网络接口的状态。
- ipneigh:这个命令不是标准的 Linux 命令。可能是指与 IP 邻居表相关的工具或命令。
- iproute:用于显示和操作 Linux 网络中的路由、设备、策略路由和隧道。
- iprule:用于显示和操作路由策略数据库。
- iptunnel:用于管理 IP 隧道。
- kbd_mode:用于设置键盘模式。
- kill:用于向进程发送信号。默认情况下,它发送 SIGTERM 信号,请求进程终止。
- killall:用于按名称终止进程。
- killall5:用于终止除系统操作所必需的进程外的所有进程。
- klogd:用于将内核消息记录到系统日志中。
- less:是一个分页器,允许逐页查看文件或命令输出。
- link:用于在文件之间创建硬链接。
- linux32:用于在 64 位系统上以 32 位执行环境运行命令。
- linux64:用于在 32 位系统上以 64 位执行环境运行命令。
- ln:用于创建符号链接或硬链接。
- loadfont:用于加载控制台字体。
- loadkmap:用于将键盘映射加载到内核中。
- logger:用于向系统日志发送消息。
- login:用于在系统上启动新会话。
- logread:用于读取系统日志。
- losetup:用于设置和控制循环设备,允许将文件视为块设备。
- ls:用于列出文件和目录。
- lsmod:用于显示 Linux 内核中模块的状态。
- lsof:用于列出打开的文件和打开它们的进程。
- lspci:用于显示有关 PCI 总线和连接到它们的设备的信息。
- lsusb:用于显示有关 USB 总线和连接到它们的设备的信息。
- lzcat:用于解压使用 LZMA 压缩的文件。
- lzma:用于使用 LZMA 压缩算法压缩或解压文件。
- lzop:用于使用 LZO 压缩算法压缩或解压文件。
- lzopcat:用于解压使用 lzop 命令压缩的文件。
- makemime:用于创建 MIME 格式的消息。
- md5sum:用于计算和检查 MD5 消息摘要。
- mdev:用于动态管理 /dev 目录中的设备节点。
- mesg:用于控制其他用户是否可以向当前用户的终端发送消息。
- microcom:用于与另一设备建立串行连接。
- mkdir:用于创建目录。
- mkdosfs:用于在设备上创建 MS-DOS 文件系统。
- mkfifo:用于创建 FIFO(命名管道)。
- mkfs.vfat:用于在设备上创建 FAT 文件系统。
- mknod:用于创建特殊文件(设备节点)。
- mkpasswd:用于生成加密密码。
- mkswap:用于在设备或文件上设置交换区。
- mktemp:用于创建临时文件和目录。
- modinfo: 显示有关指定内核模块的信息,如作者、描述、版本等。
- modprobe: 用于加载、卸载和管理内核模块。
- more: 用于逐页查看文本文件内容。
- mount: 用于挂载文件系统到指定的挂载点。
- mountpoint: 检查给定目录是否为挂载点。
- mpstat: 显示多处理器系统的 CPU 使用情况。
- mv: 用于移动或重命名文件或目录。
- nameif: 用于修改网络接口的名称。
- nanddump: 用于从 NAND 存储设备中转储数据。
- nandwrite: 用于向 NAND 存储设备写入数据。
- nbd-client: 用于与 Network Block Device (NBD) 服务器建立连接。
- nc: 网络工具,也称为 netcat,用于在网络上进行读写操作。
- netstat: 显示网络连接、路由表和网络接口等网络相关信息。
- nice: 用于改变进程的优先级。
- nl: 用于给文本文件添加行号。
- nmeter: 在图形界面中显示网络流量。
- nohup: 用于运行命令,使其不受终端断开影响,通常与后台运行命令一起使用。
- nologin: 用于阻止用户登录系统。
- nproc: 显示系统上可用的 CPU 数量。
- nsenter: 进入另一个命名空间。
- nslookup: 用于查询 DNS 服务器以获取域名解析信息。
- ntpd: Network Time Protocol (NTP) 守护进程,用于同步系统时间。
- od: 用于以不同的进制(如八进制、十六进制)格式查看文件的内容。
- openvt: 用于在新的虚拟终端上执行指定的命令。
- partprobe: 用于通知内核重新读取分区表。
- passwd: 用于更改用户的密码。
- paste: 用于将多个文件的行按列拼接在一起。
- pgrep: 根据进程名搜索进程并显示其 PID。
- pidof: 根据进程名搜索进程并显示其 PID。
- ping: 用于向另一个主机发送 ICMP 回显请求以测试网络连接。
- ping6: 用于向另一个主机发送 IPv6 地址的 ICMP 回显请求。
- pipe_progress: 用于显示管道操作的进度。
- pivot_root: 用于更改系统的根目录。
- pkill: 根据进程名或其他属性杀死进程。
- pmap: 显示进程的内存映射。
- poweroff: 用于关闭系统。
- powertop: 用于监控和优化系统功耗。
- printenv: 用于打印环境变量。
- printf: 用于格式化输出。
- ps: 显示系统中当前运行的进程列表。
- pscan: 用于扫描端口。
- pstree: 以树状图显示进程的层次结构。
- pwd: 显示当前工作目录。
- pwdx: 显示进程的当前工作目录。
- raidautorun: 自动启动软件 RAID 设备。
- rdate: 用于从远程服务器获取日期和时间。
- rdev: 用于查询或设置设备文件的主、次设备号。
- readahead: 预读取文件的内容到缓存中,以加快后续的读取速度。
- readlink: 显示符号链接所指向的目标文件或目录。
- readprofile: 用于读取内核性能分析数据。
- realpath: 显示指定文件的绝对路径。
- reboot: 用于重新启动系统。
- reformime: 用于解析和转换 MIME 消息。
- remove-shell: 用于删除用户的登录 Shell。
- renice: 用于修改正在运行的进程的优先级。
- reset: 用于重置终端的设置。
- resize: 用于重新设置终端的大小。
- rev: 将输入的每一行反转输出。
- rfkill: 用于管理射频硬件开关状态。
- rm: 用于删除文件或目录。
- rmdir: 用于删除空目录。
- rmmod: 用于卸载内核模块。
- route: 用于查看和设置 IP 路由表。
- run-parts: 用于运行目录中的可执行文件。
- sed: 流编辑器,用于对文本进行流式编辑。
- sendmail: 用于发送邮件。
- seq: 用于生成整数序列。
- setconsole: 设置系统控制台设备。
- setfont: 设置 Linux 控制台的字体。
- setkeycodes: 用于重新映射键盘扫描码。
- setlogcons: 设置系统日志输出到控制台。
- setpriv: 用于设置线程或进程的特权级别。
- setserial: 用于配置串行端口参数。
- setsid: 用于启动新的会话。
- sh: 启动 Bourne shell。
- sha1sum: 计算文件的 SHA-1 摘要。
- sha256sum: 计算文件的 SHA-256 摘要。
- sha3sum: 计算文件的 SHA-3 摘要。
- sha512sum: 计算文件的 SHA-512 摘要。
- showkey: 显示按键所对应的键值。
- shred: 用于安全删除文件,使其难以恢复。
- shuf: 对输入进行随机排列。
- slattach: 将串行行连接到网络接口。
- sleep: 使当前进程休眠一段时间。
- smemcap: 用于限制用户进程的内存使用。
- sort: 对输入进行排序。
- split: 将文件分割成多个部分。
- stat: 显示文件的状态信息。
- strings: 提取二进制文件中的可打印字符串。
- stty: 设置终端相关参数。
- su: 切换用户身份。
- sum: 计算文件的校验和。
- swapoff: 用于关闭交换分区。
- swapon: 用于启用交换分区。
- switch_root: 用于切换到新的根文件系统。
- sync: 将内存中的数据同步到磁盘上。
- sysctl: 用于查看和修改内核参数。
- syslogd: 系统日志守护进程,用于记录系统日志信息。
- tac: 逆向打印文件的内容,即从末尾向开头打印。
- tail: 用于显示文件的末尾内容,默认显示最后10行。
- tar: 用于打包、压缩和解压文件和目录。
- tee: 用于从标准输入读取数据并将其写入标准输出和文件。
- test: 测试文件类型和其他条件表达式的真假。
- time: 用于测量命令执行的时间。
- timeout: 用于设置命令的超时时间。
- top: 用于实时显示系统中运行的进程信息。
- touch: 用于创建或修改文件的时间戳。
- tr: 用于转换字符。
- traceroute: 用于跟踪数据包从源到目的地的路径。
- traceroute6: 用于跟踪 IPv6 数据包的路径。
- true: 始终返回真值。
- truncate: 用于截断文件。
- tty: 显示与当前进程关联的终端设备。
- ttysize: 显示终端的行数和列数。
- tunctl: 用于创建和管理 TUN/TAP 虚拟网络设备。
- udhcpc: 用于通过 DHCP 获取 IP 地址。
- udhcpc6: 用于通过 DHCPv6 获取 IPv6 地址。
- umount: 用于卸载挂载的文件系统。
- uname: 显示系统信息,如内核名称、版本等。
- unexpand: 将文件中的空格转换为制表符。
- uniq: 用于去除文件中的重复行。
- unix2dos: 将 Unix 格式的文本文件转换为 DOS 格式。
- unlink: 用于删除文件或符号链接。
- unlzma: 用于解压缩 LZMA 压缩的文件。
- unlzop: 用于解压缩 LZO 压缩的文件。
- unshare: 用于启动新的进程命名空间。
- unxz: 用于解压缩 XZ 压缩的文件。
- unzip: 用于解压缩 ZIP 文件。
- uptime: 显示系统的运行时间和平均负载。
- usleep: 使当前进程休眠一定的微秒数。
- uudecode: 用于解码 uuencode 编码的文件。
- uuencode: 用于将文件编码成 uuencode 格式。
- vconfig: 用于配置 VLAN 。
- vi: 文本编辑器,常用于编辑文件。
- vlock: 用于锁定终端,防止其他用户访问。
- volname: 用于获取光盘的卷标名称。
- watch: 用于定期执行指定命令并显示结果。
- watchdog: 用于管理硬件看门狗设备。
- wc: 统计文件的行数、字数和字符数。
- wget: 用于从网络下载文件。
- which: 用于显示指定命令的路径。
- whoami: 显示当前登录用户的用户名。
- whois: 查询域名注册信息。
- xargs: 用于构建和执行命令行,常用于将标准输入的数据作为命令行参数传递给其他命令。
- xxd: 用于将文件转换成十六进制或反向操作,即将十六进制转换回二进制形式。
- xz: 用于压缩和解压缩文件,通常与 .xz 格式一起使用。
- xzcat: 用于解压缩 xz 格式的压缩文件并将内容输出到标准输出。
- yes: 无限地输出指定的字符串(默认为 “y”),常用于自动化脚本中需要用户输入 “yes” 的场景。
- zcat: 用于解压缩 gzip 或 compress 格式的压缩文件并将内容输出到标准输出。
- zcip 命令用于 ZeroConf IP(零配置 IP)网络配置。ZeroConf 是一种网络配置技术,旨在使设备能够在没有预先配置的情况下自动发现和连接到局域网中的其他设备。zcip 命令允许 Linux 系统通过使用 ZeroConf 协议自动获取 IP 地址,而无需手动配置 DHCP 或静态 IP 地址。
描述:配置、编译、安装…
BusyBox 将许多常见的 UNIX 实用工具的微型版本组合成一个单个的小型可执行文件。它为大多数通常在 GNU coreutils、util-linux 等中找到的实用程序提供了极简主义的替代品。BusyBox 中的实用程序通常比其完整功能的 GNU 同类少一些选项;然而,包含的选项提供了预期的功能,并且行为非常类似于其 GNU 同类。
BusyBox 被编写时考虑了尺寸优化和有限资源。它还非常模块化,因此您可以轻松地在编译时包含或排除命令(或功能)。这使得您可以轻松地定制嵌入式系统。要创建一个工作系统,只需添加 /dev、/etc 和一个 Linux 内核。BusyBox 为任何小型或嵌入式系统提供了一个相当完整的 POSIX 环境。
BusyBox 非常可配置。这允许您仅包含您需要的组件,从而减小二进制大小。运行 ‘make config’ 或 ‘make menuconfig’ 来选择您希望启用的功能。然后运行 ‘make’ 来使用您的配置编译 BusyBox。
编译完成后,应使用 ‘make install’ 来安装 BusyBox。这将在 CONFIG_PREFIX 指定的目标目录中安装 ‘bin/busybox’ 二进制文件。在配置 BusyBox 时可以设置 CONFIG_PREFIX,或者您可以在安装时指定另一个位置(即,使用像 ‘make CONFIG_PREFIX=/tmp/foo install’ 这样的命令行)。如果启用了任何 applet 安装方案(无论是作为符号链接还是硬链接),它们也将被安装在由 CONFIG_PREFIX 指向的位置。
用法
BusyBox 是一个多调用二进制文件。多调用二进制文件是一个可执行程序,可以执行多个实用程序的相同任务。这意味着只有一个 BusyBox 二进制文件,但这个单一的二进制文件可以像大量实用程序一样工作。这使得 BusyBox 可以更小,因为所有内置实用程序程序(我们称它们为 applet)可以共享许多常见操作的代码。
您还可以通过在命令行上作为参数发出命令来调用 BusyBox。例如,输入
/bin/busybox ls
也会导致 BusyBox 表现得像 ‘ls’ 一样。
当然,每个命令都添加 ‘/bin/busybox’ 将会很繁琐。因此,大多数人会使用到 BusyBox 二进制文件的链接来调用 BusyBox。
例如,输入
ln -s /bin/busybox ls
./ls
将会导致 BusyBox 表现得像 ‘ls’ 一样(如果 ‘ls’ 命令已经编译到 BusyBox 中)。一般来说,您不应该需要自己创建所有这些链接,因为当您运行 ‘make install’ 命令时,BusyBox 构建系统会为您执行这些操作。
如果您没有提供参数来调用 BusyBox,它将会提供您编译到 BusyBox 二进制文件中的 applet 列表。
常见选项
大多数 BusyBox 小程序支持 –help 参数,以提供它们行为的简明运行时描述。如果已启用 CONFIG_FEATURE_VERBOSE_USAGE 选项,则还将提供更详细的使用信息。