Linux Shell 命令 + 项目场景

shell 命令

  • [1. 基础文件操作命令](#1. 基础文件操作命令)
    • [1.1 `ls` - 列出目录内容](#1.1 ls - 列出目录内容)
    • [1.2 `find` - 文件搜索](#1.2 find - 文件搜索)
  • [2. 版本控制命令](#2. 版本控制命令)
    • [2.1 `git` - 版本控制系统](#2.1 git - 版本控制系统)
    • [2.2 高级 Git 操作](#2.2 高级 Git 操作)
  • [3. 文本搜索命令](#3. 文本搜索命令)
    • [3.1 `grep` - 文本搜索](#3.1 grep - 文本搜索)
    • [3.2 高级搜索技巧](#3.2 高级搜索技巧)
  • [4. Android 构建系统命令](#4. Android 构建系统命令)
    • [4.1 `source` - 加载环境变量](#4.1 source - 加载环境变量)
    • [4.2 `lunch` - 选择构建目标](#4.2 lunch - 选择构建目标)
    • [4.3 `m` - Android 构建命令](#4.3 m - Android 构建命令)
  • [5. 目录操作命令](#5. 目录操作命令)
    • [5.1 `cd` - 切换目录](#5.1 cd - 切换目录)
  • [6. 完整的项目开发工作流](#6. 完整的项目开发工作流)
    • [6.1 日常开发流程](#6.1 日常开发流程)
    • [6.2 调试和问题排查流程](#6.2 调试和问题排查流程)
  • [7. 高级技巧和最佳实践](#7. 高级技巧和最佳实践)
    • [7.1 自动化脚本示例](#7.1 自动化脚本示例)
    • [7.2 常用别名设置](#7.2 常用别名设置)
    • [7.3 监控和日志分析](#7.3 监控和日志分析)
  • [8. 故障排除指南](#8. 故障排除指南)
    • [8.1 常见问题解决](#8.1 常见问题解决)
    • [8.2 性能优化](#8.2 性能优化)
  • [9. 项目特定命令详解](#9. 项目特定命令详解)
    • [9.1 固件查找命令](#9.1 固件查找命令)
    • [9.2 构建产物管理](#9.2 构建产物管理)
    • [9.3 源代码分析](#9.3 源代码分析)
  • [10. 开发环境配置](#10. 开发环境配置)
    • [10.1 环境变量设置](#10.1 环境变量设置)
    • [10.2 工具链配置](#10.2 工具链配置)
  • [11. 版本控制和协作](#11. 版本控制和协作)
    • [11.1 分支管理策略](#11.1 分支管理策略)
    • [11.2 代码审查流程](#11.2 代码审查流程)
  • [12. 构建和部署](#12. 构建和部署)
    • [12.1 自动化构建脚本](#12.1 自动化构建脚本)
    • [12.2 部署脚本](#12.2 部署脚本)
  • [13. 总结](#13. 总结)
    • [13.1 关键要点](#13.1 关键要点)
    • [13.2 最佳实践](#13.2 最佳实践)

1. 基础文件操作命令

1.1 ls - 列出目录内容

基本用法:

bash 复制代码
ls                    # 列出当前目录文件
ls -la               # 列出所有文件(包括隐藏文件)的详细信息
ls -lh               # 以人类可读格式显示文件大小
ls -lt               # 按修改时间排序
ls -R                # 递归列出子目录内容

项目场景应用:

bash 复制代码
# 查看项目根目录结构
ls -la /home/share/primary/b2_dev/sportcamera/

# 查看构建输出目录
ls -lh out/target/product/*/

# 查看源代码目录
ls -R src/

1.2 find - 文件搜索

基本用法:

bash 复制代码
find . -name "*.c"                    # 查找所有.c文件
find . -type f -name "*.h"            # 查找所有.h文件
find . -mtime -7                      # 查找7天内修改的文件
find . -size +100M                    # 查找大于100MB的文件
find . -exec grep -l "pattern" {} \;  # 在文件中搜索内容

项目场景应用:

bash 复制代码
# 查找固件文件
find . -name "*.bin" -o -name "*.img"

# 查找配置文件
find . -name "*.conf" -o -name "*.config"

# 查找特定模块的源文件
find . -path "*/kernel/*" -name "*.c"

# 查找最近修改的构建文件
find out/ -type f -mtime -1

2. 版本控制命令

2.1 git - 版本控制系统

基本用法:

bash 复制代码
git status                    # 查看工作区状态,显示哪些文件被修改、添加或删除
git diff                      # 查看未提交的修改,显示工作区与暂存区的差异
git log                       # 查看提交历史,显示所有提交记录
git branch                    # 查看分支列表,显示本地分支
git checkout <branch>         # 切换分支,切换到指定的分支
git add .                     # 添加所有文件到暂存区,准备提交
git commit -m "message"       # 提交更改,将暂存区的更改提交到本地仓库
git pull                      # 拉取远程更新,从远程仓库获取最新代码
git push                      # 推送到远程仓库,将本地提交推送到远程

项目场景应用:

bash 复制代码
# 查看当前工作状态
git status                    # 检查哪些文件被修改,哪些文件已暂存
git diff HEAD~1              # 查看与上次提交的差异,比较当前工作区与上一次提交

# 分支管理
git branch -a                # 查看所有分支(包括远程),显示本地和远程分支列表
git checkout -b feature/new-module  # 创建并切换到新分支,用于开发新功能
git merge develop            # 合并develop分支,将develop分支的更改合并到当前分支

# 提交工作
git add .                    # 将所有修改的文件添加到暂存区
git commit -m "feat: add new camera module support"  # 提交更改并添加描述信息
git push origin feature/new-module  # 将本地分支推送到远程仓库

2.2 高级 Git 操作

bash 复制代码
# 查看文件历史
git log --follow -- filename.c  # 查看特定文件的完整修改历史,包括重命名

# 查看特定提交的详细信息
git show <commit-hash>          # 显示指定提交的详细信息和文件变更

# 撤销最后一次提交
git reset --soft HEAD~1         # 撤销最后一次提交,但保留修改在暂存区

# 查看分支图
git log --graph --oneline --all  # 以图形方式显示分支和提交历史

# 暂存当前工作
git stash                      # 暂存当前工作区的修改,保存到临时区域
git stash pop                  # 恢复之前暂存的工作,从临时区域恢复修改

3. 文本搜索命令

3.1 grep - 文本搜索

基本用法:

bash 复制代码
grep "pattern" file.txt              # 在文件中搜索指定模式
grep -r "pattern" directory/         # 递归搜索目录中的所有文件
grep -n "pattern" file.txt           # 显示行号,显示匹配行的行号
grep -i "pattern" file.txt           # 忽略大小写,不区分大小写搜索
grep -v "pattern" file.txt           # 反向匹配,显示不匹配的行
grep -l "pattern" *.c                # 只显示文件名,只显示包含匹配的文件名

项目场景应用:

bash 复制代码
# 搜索配置相关代码
grep -nr "configure" src/            # 递归搜索src目录中所有包含"configure"的文件
grep -r "CONFIG_" . --include="*.c" --include="*.h"  # 搜索所有.c和.h文件中的CONFIG_定义

# 搜索错误处理代码
grep -r "error\|ERROR" src/          # 搜索所有包含error或ERROR的文件

# 搜索特定函数定义
grep -r "function_name" . --include="*.c"  # 搜索特定函数的定义

# 搜索调试信息
grep -r "DEBUG\|debug" . --include="*.c"   # 搜索所有调试相关的代码

3.2 高级搜索技巧

bash 复制代码
# 使用正则表达式搜索
grep -E "pattern1|pattern2" file.txt  # 使用扩展正则表达式,匹配多个模式

# 搜索并显示上下文
grep -A 3 -B 3 "pattern" file.txt     # 显示匹配行前后3行的上下文

# 排除特定目录
grep -r "pattern" . --exclude-dir=build  # 搜索时排除build目录

# 统计匹配次数
grep -c "pattern" file.txt            # 统计文件中匹配模式的行数

4. Android 构建系统命令

4.1 source - 加载环境变量

基本用法:

bash 复制代码
source build_envsetup.sh     # 加载构建环境,执行脚本并设置环境变量
source build/envsetup.sh     # 加载Android构建环境,设置Android构建相关变量
source ~/.bashrc             # 重新加载bash配置,刷新shell环境变量

项目场景应用:

bash 复制代码
# 完整的构建环境设置流程
cd /home/share/primary/b2_dev/sportcamera  # 切换到项目目录
source build_envsetup.sh                    # 加载项目特定的构建环境
source build/envsetup.sh                    # 加载Android标准构建环境
export PATH=$PATH:/path/to/tools           # 添加工具路径到环境变量
export ANDROID_BUILD_TOP=$(pwd)            # 设置Android构建根目录

4.2 lunch - 选择构建目标

基本用法:

bash 复制代码
lunch 10                     # 选择目标10,选择预定义的构建目标
lunch                        # 交互式选择目标,显示所有可用目标供选择
lunch aosp_arm64-eng         # 选择特定目标,直接指定构建目标

项目场景应用:

bash 复制代码
# 查看可用目标
lunch                        # 显示所有可用的构建目标列表

# 选择开发目标
lunch 10                     # 选择目标10,通常对应aosp_arm64-eng开发版本

# 验证选择
echo $TARGET_PRODUCT         # 显示当前选择的目标产品
echo $TARGET_BUILD_VARIANT   # 显示当前选择的构建变体

4.3 m - Android 构建命令

基本用法:

bash 复制代码
m clean_all                  # 清理所有构建产物,删除所有编译生成的文件
m all                        # 构建所有模块,编译整个系统
m release                    # 构建发布版本,生成优化后的发布版本
m -j8                        # 使用8个线程构建,并行编译提高速度
m module_name                # 构建特定模块,只编译指定的模块

项目场景应用:

bash 复制代码
# 完整的构建流程
m clean_all                  # 清理之前的构建产物,确保干净的构建环境
m all                        # 完整构建,编译所有必要的模块
m release                    # 构建发布版本,生成最终的产品镜像

# 增量构建
m -j$(nproc)                 # 使用所有CPU核心,最大化并行编译效率
m module_name -j4            # 构建特定模块,使用4个线程编译指定模块

# 调试构建
m DEBUG=1 all                # 启用调试信息,编译时包含调试符号

5. 目录操作命令

5.1 cd - 切换目录

基本用法:

bash 复制代码
cd /path/to/directory        # 切换到指定目录,改变当前工作目录
cd ..                        # 返回上级目录,移动到父目录
cd ~                         # 返回家目录,移动到用户主目录
cd -                         # 返回上次访问的目录,在最近两个目录间切换

项目场景应用:

bash 复制代码
# 项目导航
cd /home/share/primary/b2_dev/sportcamera  # 切换到项目根目录
cd src/                                     # 进入源代码目录
cd kernel/                                  # 进入内核源码目录
cd drivers/camera/                          # 进入摄像头驱动目录

6. 完整的项目开发工作流

6.1 日常开发流程

bash 复制代码
# 1. 进入项目目录
cd /home/share/primary/b2_dev/sportcamera  # 切换到项目工作目录

# 2. 检查Git状态
git status                    # 查看当前工作区状态,检查哪些文件被修改
git diff                      # 查看未提交的修改,显示具体的代码变更

# 3. 更新代码
git pull origin develop       # 从远程develop分支拉取最新代码

# 4. 设置构建环境
source build_envsetup.sh      # 加载项目构建环境变量
source build/envsetup.sh      # 加载Android标准构建环境
lunch 10                      # 选择构建目标10

# 5. 清理并构建
m clean_all                   # 清理之前的构建产物
m all                         # 完整构建项目

# 6. 查找构建产物
find . -name "*.bin" -o -name "*.img"  # 查找生成的固件和镜像文件

# 7. 提交更改
git add .                     # 将所有修改添加到暂存区
git commit -m "feat: update camera module"  # 提交更改并添加描述
git push origin feature/camera-update  # 推送到远程分支

6.2 调试和问题排查流程

bash 复制代码
# 1. 检查构建错误
m all 2>&1 | tee build.log    # 构建项目并将输出保存到日志文件

# 2. 搜索错误信息
grep -i "error" build.log     # 在构建日志中搜索错误信息
grep -i "warning" build.log   # 在构建日志中搜索警告信息

# 3. 查找相关源文件
find . -name "*.c" -exec grep -l "function_name" {} \;  # 查找包含特定函数的源文件

# 4. 检查配置文件
grep -r "CONFIG_" . --include="*.config"  # 搜索所有配置文件中的配置项

# 5. 查看文件修改历史
git log --follow -- filename.c  # 查看特定文件的完整修改历史

7. 高级技巧和最佳实践

7.1 自动化脚本示例

bash 复制代码
#!/bin/bash
# build_and_test.sh

set -e  # 遇到错误立即退出,确保脚本在出错时停止执行

echo "Starting build process..."

# 设置环境
cd /home/share/primary/b2_dev/sportcamera  # 切换到项目目录
source build_envsetup.sh                    # 加载构建环境
source build/envsetup.sh                    # 加载Android构建环境
lunch 10                                    # 选择构建目标

# 清理构建
echo "Cleaning previous build..."
m clean_all                                 # 清理之前的构建产物

# 构建项目
echo "Building project..."
m all -j$(nproc)                           # 使用所有CPU核心进行构建

# 查找构建产物
echo "Finding build artifacts..."
find . -name "*.bin" -o -name "*.img"       # 查找生成的固件文件

# 检查构建状态
if [ $? -eq 0 ]; then                       # 检查构建是否成功
    echo "Build completed successfully!"
else
    echo "Build failed!"
    exit 1                                  # 构建失败时退出脚本
fi

7.2 常用别名设置

bash 复制代码
# 添加到 ~/.bashrc
alias ll='ls -la'                          # 显示所有文件的详细信息
alias la='ls -A'                           # 显示所有文件(包括隐藏文件)
alias l='ls -CF'                           # 以列格式显示文件

# 项目相关别名
alias cdproj='cd /home/share/primary/b2_dev/sportcamera'  # 快速切换到项目目录
alias build='source build_envsetup.sh && source build/envsetup.sh && lunch 10'  # 一键设置构建环境
alias clean='m clean_all'                  # 快速清理构建
alias makeall='m all -j$(nproc)'          # 快速构建所有模块
alias gs='git status'                      # 快速查看Git状态
alias gl='git log --oneline'               # 快速查看提交历史

7.3 监控和日志分析

bash 复制代码
# 监控构建过程
watch -n 5 'ps aux | grep make'            # 每5秒监控make进程状态

# 分析构建日志
grep -E "(error|warning|failed)" build.log | head -20  # 提取前20个错误或警告

# 查看磁盘使用情况
du -sh out/                                # 查看构建输出目录的大小
df -h                                      # 查看磁盘空间使用情况

# 监控系统资源
top -p $(pgrep make)                       # 监控make进程的系统资源使用

8. 故障排除指南

8.1 常见问题解决

bash 复制代码
# 构建失败时的诊断步骤
echo "=== 系统信息 ==="
uname -a                                   # 显示系统内核信息
df -h                                      # 显示磁盘空间使用情况
free -h                                    # 显示内存使用情况

echo "=== 构建环境 ==="
echo $ANDROID_BUILD_TOP                    # 显示Android构建根目录
echo $TARGET_PRODUCT                       # 显示目标产品
echo $TARGET_BUILD_VARIANT                 # 显示构建变体

echo "=== 最近错误 ==="
tail -50 build.log                         # 显示构建日志的最后50行

echo "=== 磁盘空间 ==="
du -sh out/                                # 显示构建输出目录大小

8.2 性能优化

bash 复制代码
# 并行构建优化
export MAKEFLAGS="-j$(nproc)"              # 设置make使用所有CPU核心

# 缓存优化
export CCACHE_DIR=/path/to/ccache          # 设置ccache缓存目录
export USE_CCACHE=1                        # 启用ccache编译缓存

# 内存优化
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"  # 设置Jack编译服务器内存参数

9. 项目特定命令详解

9.1 固件查找命令

bash 复制代码
find -name Insta360X4AirFW.bin             # 查找特定的固件文件
find . -name "*.bin" -type f               # 查找所有二进制固件文件
find . -name "*FW*" -type f                # 查找所有包含FW的固件文件
find . -path "*/firmware/*" -name "*.bin"  # 在firmware目录中查找固件

9.2 构建产物管理

bash 复制代码
# 查找所有构建产物
find out/ -name "*.img" -o -name "*.bin" -o -name "*.zip"  # 查找所有镜像和固件文件

# 按时间排序查看最新构建产物
find out/ -name "*.img" -printf "%T@ %p\n" | sort -n | tail -10  # 显示最近修改的10个镜像文件

# 统计构建产物大小
find out/ -name "*.img" -exec ls -lh {} \;  # 显示所有镜像文件的大小

9.3 源代码分析

bash 复制代码
# 查找特定功能的源代码
grep -r "camera" src/ --include="*.c" --include="*.h"  # 搜索摄像头相关代码

# 查找函数定义
grep -r "^[[:space:]]*[a-zA-Z_][a-zA-Z0-9_]*[[:space:]]*(" src/ --include="*.c"  # 查找所有函数定义

# 查找宏定义
grep -r "^[[:space:]]*#define" src/ --include="*.h"    # 查找所有宏定义

10. 开发环境配置

10.1 环境变量设置

bash 复制代码
# 设置项目环境变量
export PROJECT_ROOT=/home/share/primary/b2_dev/sportcamera  # 设置项目根目录
export PATH=$PROJECT_ROOT/tools:$PATH                       # 添加项目工具到PATH
export ANDROID_BUILD_TOP=$PROJECT_ROOT                      # 设置Android构建根目录

# 设置编译环境
export ARCH=arm64                                           # 设置目标架构
export CROSS_COMPILE=aarch64-linux-gnu-                     # 设置交叉编译工具链
export KERNEL_DIR=$PROJECT_ROOT/kernel                      # 设置内核源码目录

10.2 工具链配置

bash 复制代码
# 检查工具链可用性
which aarch64-linux-gnu-gcc                                 # 检查交叉编译工具链
which make                                                  # 检查make工具
which git                                                   # 检查git版本控制工具

# 设置工具链路径
export TOOLCHAIN_PATH=/opt/toolchain/aarch64-linux-gnu      # 设置工具链路径
export PATH=$TOOLCHAIN_PATH/bin:$PATH                       # 添加工具链到PATH

11. 版本控制和协作

11.1 分支管理策略

bash 复制代码
# 创建功能分支
git checkout -b feature/camera-module                       # 创建摄像头模块功能分支
git push -u origin feature/camera-module                    # 推送并设置上游分支

# 合并代码
git checkout develop                                        # 切换到开发分支
git pull origin develop                                     # 拉取最新代码
git merge feature/camera-module                             # 合并功能分支
git push origin develop                                     # 推送合并结果

# 清理分支
git branch -d feature/camera-module                         # 删除本地分支
git push origin --delete feature/camera-module              # 删除远程分支

11.2 代码审查流程

bash 复制代码
# 准备代码审查
git diff develop...HEAD                                     # 查看与develop分支的差异
git log --oneline develop..HEAD                             # 查看提交历史

# 创建补丁
git format-patch develop -o patches/                        # 创建补丁文件
git send-email patches/                                     # 发送补丁邮件

# 应用补丁
git am patches/*.patch                                      # 应用补丁文件

12. 构建和部署

12.1 自动化构建脚本

bash 复制代码
#!/bin/bash
# auto_build.sh

# 设置错误处理
set -e

# 日志函数
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}

# 构建函数
build_project() {
    log "Starting project build..."
    
    # 设置环境
    cd /home/share/primary/b2_dev/sportcamera
    source build_envsetup.sh
    source build/envsetup.sh
    lunch 10
    
    # 清理构建
    log "Cleaning previous build..."
    m clean_all
    
    # 构建项目
    log "Building project..."
    m all -j$(nproc)
    
    # 查找构建产物
    log "Finding build artifacts..."
    find . -name "*.bin" -o -name "*.img"
    
    log "Build completed successfully!"
}

# 执行构建
build_project

12.2 部署脚本

bash 复制代码
#!/bin/bash
# deploy.sh

# 部署函数
deploy_firmware() {
    local firmware_path="$1"
    local target_device="$2"
    
    echo "Deploying firmware: $firmware_path to $target_device"
    
    # 检查文件是否存在
    if [ ! -f "$firmware_path" ]; then
        echo "Error: Firmware file not found: $firmware_path"
        exit 1
    fi
    
    # 复制固件到目标设备
    scp "$firmware_path" "$target_device:/tmp/"
    
    # 在目标设备上安装固件
    ssh "$target_device" "sudo dd if=/tmp/$(basename $firmware_path) of=/dev/mmcblk0 bs=4M"
    
    echo "Firmware deployment completed!"
}

# 使用示例
deploy_firmware "./out/target/product/device/firmware.bin" "user@device-ip"

13. 总结

这些命令和脚本构成了一个完整的嵌入式Linux项目开发工作流,涵盖了从代码管理到构建部署的各个环节。每个命令都有详细的注释说明其作用和用途,帮助开发者更好地理解和使用这些工具。

13.1 关键要点

  1. 版本控制:使用Git进行代码管理,包括分支管理、代码审查和协作
  2. 构建系统:使用Android构建系统进行项目编译和打包
  3. 调试工具:使用grep、find等工具进行代码搜索和问题排查
  4. 自动化:编写脚本自动化构建和部署流程
  5. 环境管理:正确设置开发环境和工具链

13.2 最佳实践

  • 定期提交代码,保持版本历史的清晰
  • 使用有意义的分支名和提交信息
  • 在构建前清理环境,确保构建的一致性
  • 使用并行编译提高构建效率
  • 保存构建日志用于问题排查
  • 定期备份重要的构建产物

通过掌握这些命令和技巧,开发者可以更高效地进行嵌入式Linux项目的开发和维护工作。

相关推荐
醉方休20 分钟前
Node.js 精选:50 款文件处理与开发环境工具库
linux·运维·node.js
代码老y1 小时前
从裸机到云原生:Linux 操作系统实战进阶的“四维跃迁”
linux·运维·云原生
CMCST2 小时前
CentOS 7.9 升级 GLibc 2.34
linux·运维·centos
xiep14383335102 小时前
Rocky Linux 10 部署 Kafka 集群
linux·运维·kafka
笨鸟要努力6 小时前
Ubuntu 全盘备份
linux·运维·ubuntu
ChironW6 小时前
Ubuntu 22.04 离线环境下完整安装 Anaconda、CUDA 12.1、NVIDIA 驱动及 cuDNN 8.9.3 教程
linux·运维·人工智能·深度学习·yolo·ubuntu
轻松Ai享生活7 小时前
linux 日志详解
linux
小白的代码日记7 小时前
Linux常用指令
linux·运维·服务器
月舞之剑8 小时前
linux离线安装nodejs
linux·node.js
维尔切8 小时前
Linux中Https配置与私有CA部署指南
linux·运维·https