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上进行开发时,我们经常需要:

  1. 文件查看:查看日志、代码、配置文件等
  2. 日志分析:分页查看大型日志文件
  3. 代码阅读:浏览源代码文件
  4. 开发工具链:作为完整的开发工具链的一部分

二、为什么需要 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 准备工作

在开始打包之前,需要准备以下内容:

  1. 预构建的 tar.gz 包:从 release 页面 下载
  2. hnpcli 工具:鸿蒙PC的包管理工具
  3. 打包脚本:用于自动化打包过程

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:向下翻一页
  • bPage 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 没有反应,可能是:

  1. 检查是否在输入模式(按 Esc 退出输入模式)
  2. 强制退出:按 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 的行为。

解决方案:

  1. 使用环境变量

    export LESS="-N -S"
    
  2. 创建 lesskey 文件

    # 创建 ~/.lesskey 文件
    lesskey
    
  3. 使用配置文件

    # 创建 ~/.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 最佳实践

  1. 合理使用选项

    • 使用 -N 显示行号,方便定位
    • 使用 -S 不换行,适合查看宽文件
    • 使用 +F 实时查看日志
  2. 掌握快捷键

    • 熟练使用基本导航快捷键
    • 使用搜索功能快速定位内容
    • 使用标记功能标记重要位置
  3. 配置环境

    • 设置 LESS 环境变量
    • 配置 lesskey 自定义快捷键
    • 设置默认编辑器
  4. 组合使用

    • 与其他命令组合使用(如 grep | less
    • 作为管道工具处理命令输出
    • 在脚本中使用 less 分页显示
  5. 性能优化

    • 对于超大文件,考虑使用 less -S 不换行
    • 使用搜索功能而不是滚动浏览

7.3 适用场景

less 特别适合以下场景:

  • 文件查看:查看各种文本文件
  • 日志分析:分页查看和分析日志文件
  • 代码阅读:浏览源代码文件
  • 文档阅读:阅读文档和手册
  • 管道工具:作为命令输出的分页器

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐