BusyBox工具箱:鸿蒙PC上的Unix工具集
本文介绍了专为OpenHarmony平台适配的BusyBox工具集ohos-busybox,详细说明了其在鸿蒙PC上的安装使用方法。项目基于BusyBox 1.37.0版本,采用GPL-2.0许可,为aarch64架构的鸿蒙PC提供交叉编译版本。文档重点阐述了必须使用HNP(HarmonyOS Native Package)格式安装的原因,对比了开发板与容器的不同使用方式,并提供了完整的HNP包打
ohos-busybox 是为 OpenHarmony 平台编译的 BusyBox 工具集。本文档详细介绍如何在鸿蒙PC上安装和使用官方适配完成的 BusyBox 工具,包括 HNP 包的打包、安装和使用方法。
📋 目录
一、项目概述
1.1 BusyBox 工具简介
BusyBox 是一个集成了大量 Unix 工具的精简工具箱,它将许多常用的 Unix 工具打包成一个可执行文件。BusyBox 被设计为在资源受限的环境中运行,是嵌入式 Linux 系统的标准组件。
核心特性:
- 🧰 工具集成:将数百个 Unix 工具集成到单个可执行文件中
- 📦 体积小巧:相比完整工具集,体积大幅减小
- ⚡ 高效运行:针对嵌入式环境优化,启动速度快
- 🔧 功能完整:提供 ls、grep、tar、sed、awk 等常用工具
- 🎯 符号链接:通过符号链接提供不同的命令接口
- 🔄 跨平台:支持多种架构和操作系统
主要应用场景:
- 嵌入式系统和 IoT 设备
- 系统恢复和救援环境
- 容器和轻量级虚拟化环境
- 资源受限的开发环境
- 系统管理和维护工具
- 作为完整 Unix 工具集的替代方案

1.2 项目信息
| 项目信息 | 详情 |
|---|---|
| 项目名称 | ohos-busybox |
| 版本 | 1.37.0(BusyBox 官方版本) |
| 许可证 | GPL-2.0 |
| 目标平台 | 鸿蒙PC (aarch64-linux-ohos) |
| 源码仓库 | https://busybox.net/downloads/ |
| 适配仓库 | https://github.com/Harmonybrew/ohos-busybox |
| 预构建包 | https://github.com/Harmonybrew/ohos-busybox/releases |
| 编译方式 | 交叉编译(Cross Compilation) |
1.3 BusyBox 包含的工具
BusyBox 集成了数百个 Unix 工具,主要包括:
文件操作类:
ls,cp,mv,rm,mkdir,rmdir,touch,cat,head,tailfind,grep,sed,awk,sort,uniq,wc
压缩归档类:
tar,gzip,gunzip,bzip2,xz
系统信息类:
ps,top,free,df,du,mount,umount
网络工具类:
wget,ftpget,ftpput,telnet,nc
文本处理类:
vi,less,more,cut,paste,join
其他工具:
sh,ash,bash(简化版 shell)init,getty,loginchmod,chown,chgrp
1.4 为什么需要 ohos-busybox?
在鸿蒙PC上进行开发时,我们经常需要:
- ✅ Unix 工具集:提供完整的 Unix 命令行工具
- ✅ 系统管理:进行文件操作、系统监控等任务
- ✅ 脚本执行:运行各种 shell 脚本
- ✅ 开发调试:在开发环境中使用常用工具
- ✅ 资源优化:在资源受限环境中提供轻量级工具集
二、为什么需要 HNP 包
2.1 系统安全限制
重要说明: 在鸿蒙PC上,由于系统安全规格限制等原因,暂不支持通过"解压 + 配 PATH"的方式直接使用 tar.gz 包。
这意味着:
- ❌ 不能直接解压 tar.gz 包到任意目录
- ❌ 不能通过设置 PATH 环境变量来使用
- ✅ 必须打包成 HNP(HarmonyOS Native Package)格式才能正常使用
2.2 HNP 包的优势
HNP 包是鸿蒙PC的官方包管理格式,具有以下优势:
- ✅ 系统集成:与鸿蒙PC的包管理系统集成
- ✅ 安全可靠:通过官方工具安装,符合系统安全规范
- ✅ 易于管理:支持安装、卸载、更新等操作
- ✅ 路径规范:统一安装在
/data/service/hnp/目录下
2.3 其他平台的使用方式
在鸿蒙开发板上:
可以使用传统的"解压 + 配 PATH"方式:
# 使用 hdc 推送文件到设备
hdc file send busybox-1.37.0-ohos-arm64.tar.gz /data
# 进入设备 shell
hdc shell
# 解压并配置
cd /data
tar -zxf busybox-1.37.0-ohos-arm64.tar.gz
export PATH=$PATH:/data/busybox-1.37.0-ohos-arm64/bin
# 现在可以使用 busybox 命令了
busybox ls
在鸿蒙容器中:
# 启动容器
docker run -itd --name=ohos ghcr.io/hqzing/docker-mini-openharmony:latest
docker exec -it ohos sh
# 下载并安装
cd /root
curl -L -O https://github.com/Harmonybrew/ohos-busybox/releases/download/1.37.0/busybox-1.37.0-ohos-arm64.tar.gz
tar -zxf busybox-1.37.0-ohos-arm64.tar.gz -C /opt
export PATH=$PATH:/opt/busybox-1.37.0-ohos-arm64/bin
# 使用 busybox
busybox --help
三、HNP 包打包方法
3.1 准备工作
在开始打包之前,需要准备以下内容:
- 预构建的 tar.gz 包:从 release 页面 下载
- hnpcli 工具:鸿蒙PC的包管理工具
- 打包脚本:用于自动化打包过程
3.2 下载预构建包
# 下载 busybox 预构建包
wget https://github.com/Harmonybrew/ohos-busybox/releases/download/1.37.0/busybox-1.37.0-ohos-arm64.tar.gz
3.3 创建打包脚本
创建一个 pack_hnp.sh 脚本来自动化打包过程:
#!/bin/bash
set -e
# 配置变量
BUSYBOX_VERSION="1.37.0"
TAR_FILE="busybox-${BUSYBOX_VERSION}-ohos-arm64.tar.gz"
EXTRACT_DIR="busybox-${BUSYBOX_VERSION}-ohos-arm64"
HNP_PUBLIC_PATH="/data/service/hnp"
BUSYBOX_INSTALL_PATH="${HNP_PUBLIC_PATH}/busybox.org/busybox_${BUSYBOX_VERSION}"
OUTPUT_DIR="output"
WORKDIR=$(pwd)
# 创建输出目录
mkdir -p ${OUTPUT_DIR}
# 解压 tar.gz 包
if [ ! -d "${EXTRACT_DIR}" ]; then
echo "解压 ${TAR_FILE}..."
tar -zxf ${TAR_FILE}
fi
# 创建安装目录
echo "创建安装目录..."
mkdir -p ${BUSYBOX_INSTALL_PATH}/bin
# 复制文件
echo "复制文件..."
cp -r ${EXTRACT_DIR}/bin/* ${BUSYBOX_INSTALL_PATH}/bin/
if [ -f "${EXTRACT_DIR}/LICENSE" ]; then
cp ${EXTRACT_DIR}/LICENSE ${BUSYBOX_INSTALL_PATH}/
fi
if [ -f "${EXTRACT_DIR}/AUTHORS" ]; then
cp ${EXTRACT_DIR}/AUTHORS ${BUSYBOX_INSTALL_PATH}/
fi
# 创建 hnp.json
echo "创建 hnp.json..."
cat > ${BUSYBOX_INSTALL_PATH}/hnp.json << 'EOF'
{
"type": "hnp-config",
"name": "busybox",
"version": "1.37.0",
"install": {
"links": [
{
"source": "bin/busybox",
"target": "busybox"
},
{
"source": "bin/busybox",
"target": "ls"
},
{
"source": "bin/busybox",
"target": "cp"
},
{
"source": "bin/busybox",
"target": "mv"
},
{
"source": "bin/busybox",
"target": "rm"
},
{
"source": "bin/busybox",
"target": "mkdir"
},
{
"source": "bin/busybox",
"target": "rmdir"
},
{
"source": "bin/busybox",
"target": "cat"
},
{
"source": "bin/busybox",
"target": "grep"
},
{
"source": "bin/busybox",
"target": "tar"
},
{
"source": "bin/busybox",
"target": "gzip"
},
{
"source": "bin/busybox",
"target": "sed"
},
{
"source": "bin/busybox",
"target": "awk"
},
{
"source": "bin/busybox",
"target": "find"
},
{
"source": "bin/busybox",
"target": "wget"
}
]
}
}
EOF
# 设置执行权限
chmod +x ${BUSYBOX_INSTALL_PATH}/bin/busybox
# 使用 hnpcli 打包(如果可用)
if command -v hnpcli &> /dev/null; then
echo "使用 hnpcli 打包..."
hnpcli pack -i ${BUSYBOX_INSTALL_PATH} -o ${OUTPUT_DIR}/
echo "HNP 包已生成: ${OUTPUT_DIR}/busybox.hnp"
else
echo "警告: 未找到 hnpcli 工具,跳过 HNP 包生成"
echo "请手动使用 hnpcli 打包:"
echo " hnpcli pack -i ${BUSYBOX_INSTALL_PATH} -o ${OUTPUT_DIR}/"
fi
# 生成 tar.gz 包(备用)
echo "生成 tar.gz 包..."
cd ${HNP_PUBLIC_PATH}/busybox.org
tar -zcf ${WORKDIR}/${OUTPUT_DIR}/ohos_busybox_${BUSYBOX_VERSION}.tar.gz busybox_${BUSYBOX_VERSION}/
cd - > /dev/null
echo "打包完成!"
echo "输出文件:"
echo " - ${OUTPUT_DIR}/busybox.hnp (如果 hnpcli 可用)"
echo " - ${OUTPUT_DIR}/ohos_busybox_${BUSYBOX_VERSION}.tar.gz"
3.4 执行打包
# 赋予脚本执行权限
chmod +x pack_hnp.sh
# 执行打包
./pack_hnp.sh
3.5 验证打包结果
打包完成后,验证生成的文件:
# 检查 HNP 包
ls -lh output/busybox.hnp
# 检查 tar.gz 包
ls -lh output/ohos_busybox_1.37.0.tar.gz
# 验证安装目录结构
tree ${BUSYBOX_INSTALL_PATH}/
预期的安装目录结构:
/data/service/hnp/busybox.org/busybox_1.37.0/
├── bin/
│ └── busybox # busybox 可执行文件
├── LICENSE # 许可证文件
├── AUTHORS # 作者信息
└── hnp.json # HNP 配置文件
四、安装与使用
4.1 安装 HNP 包
使用 hnpcli 安装
# 在鸿蒙PC上执行
hnpcli install output/busybox.hnp
手动安装(使用 tar.gz)
# 在鸿蒙PC上执行
# 1. 解压 tar.gz 包
tar -xzf ohos_busybox_1.37.0.tar.gz
# 2. 复制到安装目录
sudo cp -r busybox_1.37.0/* /data/service/hnp/busybox.org/busybox_1.37.0/
# 3. 设置执行权限
sudo chmod +x /data/service/hnp/busybox.org/busybox_1.37.0/bin/*
# 4. 创建符号链接(根据 hnp.json 配置)
# hnp 系统会自动处理 links 配置,但也可以手动创建
sudo ln -sf /data/service/hnp/busybox.org/busybox_1.37.0/bin/busybox /usr/local/bin/busybox
4.2 验证安装
# 检查 busybox 是否可用
busybox --help
# 查看 busybox 版本
busybox | head -1
# 查看支持的所有命令
busybox --list
4.3 使用 BusyBox
安装完成后,可以通过两种方式使用 BusyBox:
方式一:直接调用 busybox
# 使用 busybox 执行命令
busybox ls -la
busybox grep "pattern" file.txt
busybox tar -czf archive.tar.gz directory/
方式二:使用符号链接(如果已配置)
# 直接使用命令名(如果 hnp.json 中配置了符号链接)
ls -la
grep "pattern" file.txt
tar -czf archive.tar.gz directory/
五、使用示例
5.1 文件操作示例
# 列出文件
busybox ls -lah
# 复制文件
busybox cp source.txt dest.txt
# 移动文件
busybox mv old.txt new.txt
# 删除文件
busybox rm file.txt
# 创建目录
busybox mkdir -p /path/to/directory
# 查看文件内容
busybox cat file.txt
# 查看文件前几行
busybox head -n 10 file.txt
# 查看文件后几行
busybox tail -n 20 file.txt
5.2 文本处理示例
# 搜索文本
busybox grep "pattern" file.txt
# 递归搜索
busybox grep -r "pattern" /path/to/directory
# 文本替换
busybox sed 's/old/new/g' file.txt
# 文本过滤
busybox awk '{print $1}' file.txt
# 排序
busybox sort file.txt
# 去重
busybox uniq file.txt
# 统计行数、字数
busybox wc -l file.txt
5.3 压缩归档示例
# 创建 tar 归档
busybox tar -cf archive.tar files/
# 创建 gzip 压缩的 tar 归档
busybox tar -czf archive.tar.gz files/
# 解压 tar 归档
busybox tar -xf archive.tar
# 解压 gzip 压缩的 tar 归档
busybox tar -xzf archive.tar.gz
# 压缩文件
busybox gzip file.txt
# 解压文件
busybox gunzip file.txt.gz
5.4 系统信息示例
# 查看进程
busybox ps aux
# 查看磁盘使用
busybox df -h
# 查看目录大小
busybox du -sh /path/to/directory
# 查找文件
busybox find /path -name "*.txt"
# 网络下载
busybox wget http://example.com/file.txt
5.5 Shell 脚本示例
#!/bin/sh
# 使用 busybox 的 ash shell
# 变量赋值
NAME="BusyBox"
VERSION=$(busybox | head -1)
# 条件判断
if [ -f "file.txt" ]; then
echo "文件存在"
busybox cat file.txt
else
echo "文件不存在"
fi
# 循环
for i in $(busybox seq 1 10); do
echo "数字: $i"
done
# 函数
hello() {
echo "Hello from BusyBox!"
}
hello
六、常见问题
6.1 为什么某些功能被禁用了?
在构建过程中,某些难以适配的功能被直接禁用了:
CONFIG_SHA1_HWACCEL:SHA1 硬件加速CONFIG_FEATURE_UTMP:UTMP 功能CONFIG_FEATURE_SU_CHECKS_SHELLS:su 检查 shellsCONFIG_HOSTID:hostid 命令CONFIG_HUSH:hush shell
这些功能在 OpenHarmony 平台上可能不完全兼容,因此被禁用以确保稳定性。
6.2 如何查看 BusyBox 支持的所有命令?
# 列出所有支持的命令
busybox --list
# 查看特定命令的帮助
busybox <command> --help
6.3 如何从源码构建 BusyBox?
参考项目中的 build.sh 脚本:
# 1. 准备构建环境(Ubuntu 24.04 x64)
sudo apt update && sudo apt install -y build-essential unzip
# 2. 下载并执行构建脚本
git clone https://github.com/Harmonybrew/ohos-busybox.git
cd ohos-busybox
./build.sh
构建脚本会:
- 下载 OpenHarmony SDK
- 下载 BusyBox 源码
- 应用适配补丁
- 配置和编译
- 打包生成 tar.gz 文件
6.4 符号链接不工作怎么办?
如果通过符号链接使用命令时出现问题,可以:
-
检查符号链接是否存在:
ls -l /usr/local/bin/busybox -
手动创建符号链接:
sudo ln -sf /data/service/hnp/busybox.org/busybox_1.37.0/bin/busybox /usr/local/bin/busybox -
直接使用 busybox 命令:
busybox <command> [args]
6.5 如何在脚本中使用 BusyBox?
在脚本中,可以这样使用:
#!/bin/sh
# 使用 busybox 的绝对路径
BUSYBOX="/data/service/hnp/busybox.org/busybox_1.37.0/bin/busybox"
# 或者确保 busybox 在 PATH 中
export PATH=$PATH:/data/service/hnp/busybox.org/busybox_1.37.0/bin
# 使用命令
$BUSYBOX ls -la
$BUSYBOX grep "pattern" file.txt
6.6 性能问题
BusyBox 是单可执行文件,通过符号链接调用时会有轻微的性能开销。如果对性能有要求,可以考虑:
- 直接使用
busybox <command>而不是符号链接 - 在脚本中缓存 busybox 路径
- 对于频繁使用的命令,创建独立的符号链接
七、总结与最佳实践
7.1 总结
BusyBox 是一个强大的工具集,为鸿蒙PC提供了完整的 Unix 命令行工具:
- ✅ 功能丰富:集成了数百个常用 Unix 工具
- ✅ 体积小巧:相比完整工具集,体积大幅减小
- ✅ 易于部署:通过 HNP 包可以方便地安装和管理
- ✅ 跨平台:支持多种使用场景(PC、开发板、容器)
7.2 最佳实践
-
使用 HNP 包安装:
- 在鸿蒙PC上,优先使用 HNP 包进行安装
- 遵循系统的包管理规范
-
合理使用符号链接:
- 根据需要配置符号链接
- 避免创建过多不必要的符号链接
-
脚本中使用绝对路径:
- 在脚本中使用 busybox 时,使用绝对路径更可靠
- 或者确保 PATH 环境变量正确设置
-
了解功能限制:
- 某些功能在 OpenHarmony 上可能不可用
- 查看
busybox --list了解支持的命令
-
性能优化:
- 对于频繁使用的命令,考虑直接调用
- 在脚本中缓存 busybox 路径
7.3 适用场景
BusyBox 特别适合以下场景:
- ✅ 嵌入式开发:资源受限的开发环境
- ✅ 系统维护:系统恢复和救援操作
- ✅ 容器环境:轻量级容器中的工具集
- ✅ 脚本开发:需要完整 Unix 工具的脚本环境
- ✅ 开发调试:开发过程中的常用工具需求
更多推荐




所有评论(0)