less分页器:鸿蒙PC上的文件查看工具
摘要: ohos-less 是为 OpenHarmony 平台适配的 GNU less 分页工具,支持在鸿蒙PC上查看日志、代码等文件。由于鸿蒙PC的安全限制,必须通过 HNP(HarmonyOS Native Package)格式安装,而非直接解压 tar.gz 包。本文详细介绍了 HNP 包的打包方法,包括下载预构建包、创建安装目录、配置 hnp.json 文件等步骤,并提供了使用 hnpcl
ohos-less 是为 OpenHarmony 平台编译的 GNU less 分页器。本文档详细介绍如何在鸿蒙PC上安装和使用官方适配完成的 less 工具,包括 HNP 包的打包、安装和使用方法。
📋 目录
欢迎加入开源鸿蒙PC社区:https://harmonypc.csdn.net/
一、项目概述
1.1 less 工具简介
less 是一个功能强大的分页器(pager),用于在终端中分页显示文件内容。它是 more 命令的增强版本,支持向前和向后浏览文件,是 Unix/Linux 系统中最常用的文件查看工具之一。
核心特性:
- 📄 分页显示:逐页显示文件内容,避免一次性输出大量文本
- ⬆️⬇️ 双向浏览:支持向前和向后浏览文件
- 🔍 搜索功能:支持向前和向后搜索文本
- 🎨 语法高亮:支持代码语法高亮显示
- 🔧 灵活配置:丰富的配置选项和快捷键
- ⚡ 高效性能:针对大文件优化,启动速度快
主要应用场景:
- 查看日志文件
- 阅读代码文件
- 查看配置文件
- 浏览文档和手册
- 作为其他命令的输出分页器

1.2 项目信息
| 项目信息 | 详情 |
|---|---|
| 项目名称 | ohos-less |
| 版本 | 最新版本(GNU less 官方版本) |
| 许可证 | GPL-3.0 或 Less License |
| 目标平台 | 鸿蒙PC (aarch64-linux-ohos) |
| 源码仓库 | https://github.com/gwsw/less |
| 适配仓库 | https://github.com/Harmonybrew/ohos-less |
| 预构建包 | https://github.com/Harmonybrew/ohos-less/releases |
| 编译方式 | 交叉编译(Cross Compilation) |
1.3 less 与 more 的区别
| 特性 | less | more |
|---|---|---|
| 向后浏览 | ✅ 支持 | ❌ 不支持 |
| 向前搜索 | ✅ 支持 | ❌ 不支持 |
| 向后搜索 | ✅ 支持 | ❌ 不支持 |
| 跳转功能 | ✅ 支持跳转到指定行/位置 | ⚠️ 有限支持 |
| 标记功能 | ✅ 支持标记位置 | ❌ 不支持 |
| 性能 | ⚡ 针对大文件优化 | ⚡ 轻量级实现 |
1.4 为什么需要 ohos-less?
在鸿蒙PC上进行开发时,我们经常需要:
- ✅ 文件查看:查看日志、代码、配置文件等
- ✅ 日志分析:分页查看大型日志文件
- ✅ 代码阅读:浏览源代码文件
- ✅ 开发工具链:作为完整的开发工具链的一部分
二、为什么需要 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 less-*-ohos-arm64.tar.gz /data
# 进入设备 shell
hdc shell
# 解压并配置
cd /data
tar -zxf less-*-ohos-arm64.tar.gz
export PATH=$PATH:/data/less-*-ohos-arm64/bin
三、HNP 包打包方法
3.1 准备工作
在开始打包之前,需要准备以下内容:
- 预构建的 tar.gz 包:从 release 页面 下载
- hnpcli 工具:鸿蒙PC的包管理工具
- 打包脚本:用于自动化打包过程
3.2 下载预构建包
# 下载 less 预构建包
wget https://github.com/Harmonybrew/ohos-less/releases/download/latest/less-*-ohos-arm64.tar.gz
3.3 创建打包脚本
创建一个 pack_hnp.sh 脚本来自动化打包过程:
#!/bin/bash
set -e
# 配置变量
LESS_VERSION="latest" # 根据实际版本调整
TAR_FILE="less-${LESS_VERSION}-ohos-arm64.tar.gz"
EXTRACT_DIR="less-${LESS_VERSION}-ohos-arm64"
HNP_PUBLIC_PATH="/data/service/hnp"
LESS_INSTALL_PATH="${HNP_PUBLIC_PATH}/less.org/less_${LESS_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 ${LESS_INSTALL_PATH}/bin
# 复制文件
echo "复制文件..."
cp -r ${EXTRACT_DIR}/bin/* ${LESS_INSTALL_PATH}/bin/
if [ -f "${EXTRACT_DIR}/COPYING" ]; then
cp ${EXTRACT_DIR}/COPYING ${LESS_INSTALL_PATH}/
fi
if [ -f "${EXTRACT_DIR}/LICENSE" ]; then
cp ${EXTRACT_DIR}/LICENSE ${LESS_INSTALL_PATH}/
fi
# 创建 hnp.json
echo "创建 hnp.json..."
cat > ${LESS_INSTALL_PATH}/hnp.json << 'EOF'
{
"type": "hnp-config",
"name": "less",
"version": "latest",
"install": {
"links": [
{
"source": "bin/less",
"target": "less"
},
{
"source": "bin/lesskey",
"target": "lesskey"
},
{
"source": "bin/lessecho",
"target": "lessecho"
}
]
}
}
EOF
# 设置执行权限
chmod +x ${LESS_INSTALL_PATH}/bin/*
# 使用 hnpcli 打包(如果可用)
if command -v hnpcli &> /dev/null; then
echo "使用 hnpcli 打包..."
hnpcli pack -i ${LESS_INSTALL_PATH} -o ${OUTPUT_DIR}/
echo "HNP 包已生成: ${OUTPUT_DIR}/less.hnp"
else
echo "警告: 未找到 hnpcli 工具,跳过 HNP 包生成"
echo "请手动使用 hnpcli 打包:"
echo " hnpcli pack -i ${LESS_INSTALL_PATH} -o ${OUTPUT_DIR}/"
fi
# 生成 tar.gz 包(备用)
echo "生成 tar.gz 包..."
cd ${HNP_PUBLIC_PATH}/less.org
tar -zcf ${WORKDIR}/${OUTPUT_DIR}/ohos_less_${LESS_VERSION}.tar.gz less_${LESS_VERSION}/
cd - > /dev/null
echo "打包完成!"
echo "输出文件:"
echo " - ${OUTPUT_DIR}/less.hnp (如果 hnpcli 可用)"
echo " - ${OUTPUT_DIR}/ohos_less_${LESS_VERSION}.tar.gz"
3.4 执行打包
# 赋予脚本执行权限
chmod +x pack_hnp.sh
# 执行打包
./pack_hnp.sh
3.5 验证打包结果
打包完成后,验证生成的文件:
# 检查 HNP 包
ls -lh output/less.hnp
# 检查 tar.gz 包
ls -lh output/ohos_less_*.tar.gz
# 验证安装目录结构
tree ${LESS_INSTALL_PATH}/
预期的安装目录结构:
/data/service/hnp/less.org/less_latest/
├── bin/
│ ├── less # less 可执行文件
│ ├── lesskey # lesskey 可执行文件
│ └── lessecho # lessecho 可执行文件
├── COPYING # 许可证文件
├── LICENSE # 许可证文件
└── hnp.json # HNP 配置文件
四、安装与使用
4.1 安装 HNP 包
手动安装(使用 tar.gz)
# 在鸿蒙PC上执行
# 1. 解压 tar.gz 包
tar -xzf ohos_less_*.tar.gz
# 2. 复制到安装目录
sudo cp -r less_*/* /data/service/hnp/less.org/less_*/
# 3. 设置执行权限
sudo chmod +x /data/service/hnp/less.org/less_*/bin/*
# 4. 创建符号链接(根据 hnp.json 配置)
# hnp 系统会自动处理 links 配置
4.2 验证安装
# 检查 less 是否可用
less --version
# 应该显示 less 的版本信息
# less 版本号
4.3 使用 less
安装完成后,就可以使用 less 命令查看文件了。
五、使用示例
5.1 基本使用
查看文件
# 查看文件
less filename.txt
# 查看多个文件
less file1.txt file2.txt
# 从标准输入读取
command | less
基本导航
在 less 中,可以使用以下快捷键:
- 空格键 或 Page Down:向下翻一页
- b 或 Page Up:向上翻一页
- 回车键 或 ↓:向下翻一行
- y 或 ↑:向上翻一行
- g:跳转到文件开头
- G:跳转到文件末尾
- q:退出 less
5.2 搜索功能
向前搜索
# 在 less 中按 / 进入搜索模式
# 输入搜索内容,按回车
/pattern
# 查找下一个匹配
n
# 查找上一个匹配
N
向后搜索
# 在 less 中按 ? 进入向后搜索模式
?pattern
# 查找下一个匹配(向后)
n
# 查找上一个匹配(向前)
N
5.3 跳转功能
跳转到指定行
# 在 less 中按 g 然后输入行号
50g # 跳转到第 50 行
# 或者使用命令行选项
less +50 filename.txt
跳转到指定位置
# 跳转到包含特定文本的位置
less +/pattern filename.txt
5.4 标记和书签
设置标记
# 在当前位置设置标记
m<letter> # 例如:ma 设置标记 a
# 跳转到标记
'<letter> # 例如:'a 跳转到标记 a
5.5 高级功能
查看多个文件
# 打开多个文件
less file1.txt file2.txt file3.txt
# 在文件间切换
:n # 下一个文件
:p # 上一个文件
执行 shell 命令
# 在 less 中执行 shell 命令
!command
# 例如:查看当前目录
!ls
编辑文件
# 在 less 中按 v 编辑当前文件
# 会使用默认编辑器(通常是 vi)
v
5.6 实际应用场景
查看日志文件
# 查看系统日志
less /var/log/syslog
# 实时查看日志(类似 tail -f)
less +F /var/log/app.log
查看代码文件
# 查看源代码
less program.c
# 跳转到特定函数
less +/function_name program.c
作为管道工具
# 分页显示命令输出
ps aux | less
# 分页显示搜索结果
grep -r "pattern" /path | less
查看压缩文件
# 查看压缩文件内容(如果支持)
less file.gz
less file.bz2
六、常见问题
6.1 如何退出 less?
问题: 不知道如何退出 less。
解决方案:
按 q 键退出 less。如果按 q 没有反应,可能是:
- 检查是否在输入模式(按
Esc退出输入模式) - 强制退出:按
Ctrl+C然后按q
6.2 如何实时查看日志?
问题: 需要实时查看不断更新的日志文件。
解决方案:
使用 +F 选项:
# 实时查看日志
less +F /var/log/app.log
# 在实时模式下,按 Ctrl+C 停止跟踪,按 F 继续跟踪
6.3 如何显示行号?
问题: 需要显示文件的行号。
解决方案:
使用 -N 选项:
# 显示行号
less -N filename.txt
# 或者在 less 中按 -N 切换行号显示
6.4 如何高亮搜索内容?
问题: 搜索时希望高亮显示匹配的内容。
解决方案:
使用 --hilite-search 选项:
# 高亮搜索内容
less --hilite-search filename.txt
# 或者在 less 中按 - 然后输入选项
6.5 如何配置 less?
问题: 希望自定义 less 的行为。
解决方案:
-
使用环境变量:
export LESS="-N -S" -
创建 lesskey 文件:
# 创建 ~/.lesskey 文件 lesskey -
使用配置文件:
# 创建 ~/.lessrc 文件 # 设置默认选项
6.6 如何从源码构建 less?
参考项目的构建脚本和文档:
# 1. 准备构建环境
sudo apt update && sudo apt install -y build-essential ncurses-dev
# 2. 下载源码
git clone https://github.com/Harmonybrew/ohos-less.git
cd ohos-less
# 3. 配置和编译
sh configure --host=aarch64-linux-ohos
make
# 4. 安装
make install
七、总结与最佳实践
7.1 总结
less 是强大的分页器工具,为鸿蒙PC提供了高效的文件查看能力:
- ✅ 功能强大:支持双向浏览、搜索、跳转等多种功能
- ✅ 易于使用:直观的快捷键和操作方式
- ✅ 性能优化:针对大文件进行了优化
- ✅ 灵活配置:丰富的配置选项
7.2 最佳实践
-
合理使用选项:
- 使用
-N显示行号,方便定位 - 使用
-S不换行,适合查看宽文件 - 使用
+F实时查看日志
- 使用
-
掌握快捷键:
- 熟练使用基本导航快捷键
- 使用搜索功能快速定位内容
- 使用标记功能标记重要位置
-
配置环境:
- 设置
LESS环境变量 - 配置
lesskey自定义快捷键 - 设置默认编辑器
- 设置
-
组合使用:
- 与其他命令组合使用(如
grep | less) - 作为管道工具处理命令输出
- 在脚本中使用 less 分页显示
- 与其他命令组合使用(如
-
性能优化:
- 对于超大文件,考虑使用
less -S不换行 - 使用搜索功能而不是滚动浏览
- 对于超大文件,考虑使用
7.3 适用场景
less 特别适合以下场景:
- ✅ 文件查看:查看各种文本文件
- ✅ 日志分析:分页查看和分析日志文件
- ✅ 代码阅读:浏览源代码文件
- ✅ 文档阅读:阅读文档和手册
- ✅ 管道工具:作为命令输出的分页器
更多推荐



所有评论(0)