Linux Shell 命令 + 项目场景
shell 命令
- 1. 基础文件操作命令
- 1.1 `ls` - 列出目录内容
- 1.2 `find` - 文件搜索
- 2. 版本控制命令
- 2.1 `git` - 版本控制系统
- 2.2 高级 Git 操作
- 3. 文本搜索命令
- 3.1 `grep` - 文本搜索
- 3.2 高级搜索技巧
- 4. Android 构建系统命令
- 4.1 `source` - 加载环境变量
- 4.2 `lunch` - 选择构建目标
- 4.3 `m` - Android 构建命令
- 5. 目录操作命令
- 5.1 `cd` - 切换目录
- 6. 完整的项目开发工作流
- 6.1 日常开发流程
- 6.2 调试和问题排查流程
- 7. 高级技巧和最佳实践
- 7.1 自动化脚本示例
- 7.2 常用别名设置
- 7.3 监控和日志分析
- 8. 故障排除指南
- 8.1 常见问题解决
- 8.2 性能优化
- 9. 项目特定命令详解
- 9.1 固件查找命令
- 9.2 构建产物管理
- 9.3 源代码分析
- 10. 开发环境配置
- 10.1 环境变量设置
- 10.2 工具链配置
- 11. 版本控制和协作
- 11.1 分支管理策略
- 11.2 代码审查流程
- 12. 构建和部署
- 12.1 自动化构建脚本
- 12.2 部署脚本
- 13. 总结
- 13.1 关键要点
- 13.2 最佳实践
1. 基础文件操作命令
1.1 ls
- 列出目录内容
基本用法:
ls # 列出当前目录文件
ls -la # 列出所有文件(包括隐藏文件)的详细信息
ls -lh # 以人类可读格式显示文件大小
ls -lt # 按修改时间排序
ls -R # 递归列出子目录内容
项目场景应用:
# 查看项目根目录结构
ls -la /home/share/primary/b2_dev/sportcamera/# 查看构建输出目录
ls -lh out/target/product/*/# 查看源代码目录
ls -R src/
1.2 find
- 文件搜索
基本用法:
find . -name "*.c" # 查找所有.c文件
find . -type f -name "*.h" # 查找所有.h文件
find . -mtime -7 # 查找7天内修改的文件
find . -size +100M # 查找大于100MB的文件
find . -exec grep -l "pattern" {} \; # 在文件中搜索内容
项目场景应用:
# 查找固件文件
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
- 版本控制系统
基本用法:
git status # 查看工作区状态,显示哪些文件被修改、添加或删除
git diff # 查看未提交的修改,显示工作区与暂存区的差异
git log # 查看提交历史,显示所有提交记录
git branch # 查看分支列表,显示本地分支
git checkout <branch> # 切换分支,切换到指定的分支
git add . # 添加所有文件到暂存区,准备提交
git commit -m "message" # 提交更改,将暂存区的更改提交到本地仓库
git pull # 拉取远程更新,从远程仓库获取最新代码
git push # 推送到远程仓库,将本地提交推送到远程
项目场景应用:
# 查看当前工作状态
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 操作
# 查看文件历史
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
- 文本搜索
基本用法:
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 # 只显示文件名,只显示包含匹配的文件名
项目场景应用:
# 搜索配置相关代码
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 高级搜索技巧
# 使用正则表达式搜索
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
- 加载环境变量
基本用法:
source build_envsetup.sh # 加载构建环境,执行脚本并设置环境变量
source build/envsetup.sh # 加载Android构建环境,设置Android构建相关变量
source ~/.bashrc # 重新加载bash配置,刷新shell环境变量
项目场景应用:
# 完整的构建环境设置流程
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
- 选择构建目标
基本用法:
lunch 10 # 选择目标10,选择预定义的构建目标
lunch # 交互式选择目标,显示所有可用目标供选择
lunch aosp_arm64-eng # 选择特定目标,直接指定构建目标
项目场景应用:
# 查看可用目标
lunch # 显示所有可用的构建目标列表# 选择开发目标
lunch 10 # 选择目标10,通常对应aosp_arm64-eng开发版本# 验证选择
echo $TARGET_PRODUCT # 显示当前选择的目标产品
echo $TARGET_BUILD_VARIANT # 显示当前选择的构建变体
4.3 m
- Android 构建命令
基本用法:
m clean_all # 清理所有构建产物,删除所有编译生成的文件
m all # 构建所有模块,编译整个系统
m release # 构建发布版本,生成优化后的发布版本
m -j8 # 使用8个线程构建,并行编译提高速度
m module_name # 构建特定模块,只编译指定的模块
项目场景应用:
# 完整的构建流程
m clean_all # 清理之前的构建产物,确保干净的构建环境
m all # 完整构建,编译所有必要的模块
m release # 构建发布版本,生成最终的产品镜像# 增量构建
m -j$(nproc) # 使用所有CPU核心,最大化并行编译效率
m module_name -j4 # 构建特定模块,使用4个线程编译指定模块# 调试构建
m DEBUG=1 all # 启用调试信息,编译时包含调试符号
5. 目录操作命令
5.1 cd
- 切换目录
基本用法:
cd /path/to/directory # 切换到指定目录,改变当前工作目录
cd .. # 返回上级目录,移动到父目录
cd ~ # 返回家目录,移动到用户主目录
cd - # 返回上次访问的目录,在最近两个目录间切换
项目场景应用:
# 项目导航
cd /home/share/primary/b2_dev/sportcamera # 切换到项目根目录
cd src/ # 进入源代码目录
cd kernel/ # 进入内核源码目录
cd drivers/camera/ # 进入摄像头驱动目录
6. 完整的项目开发工作流
6.1 日常开发流程
# 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 调试和问题排查流程
# 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 自动化脚本示例
#!/bin/bash
# build_and_test.shset -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!"
elseecho "Build failed!"exit 1 # 构建失败时退出脚本
fi
7.2 常用别名设置
# 添加到 ~/.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 监控和日志分析
# 监控构建过程
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 常见问题解决
# 构建失败时的诊断步骤
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 性能优化
# 并行构建优化
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 固件查找命令
find -name Insta360X4AirFW.bin # 查找特定的固件文件
find . -name "*.bin" -type f # 查找所有二进制固件文件
find . -name "*FW*" -type f # 查找所有包含FW的固件文件
find . -path "*/firmware/*" -name "*.bin" # 在firmware目录中查找固件
9.2 构建产物管理
# 查找所有构建产物
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 源代码分析
# 查找特定功能的源代码
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 环境变量设置
# 设置项目环境变量
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 工具链配置
# 检查工具链可用性
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 分支管理策略
# 创建功能分支
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 代码审查流程
# 准备代码审查
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 自动化构建脚本
#!/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/sportcamerasource build_envsetup.shsource build/envsetup.shlunch 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 部署脚本
#!/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" ]; thenecho "Error: Firmware file not found: $firmware_path"exit 1fi# 复制固件到目标设备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 关键要点
- 版本控制:使用Git进行代码管理,包括分支管理、代码审查和协作
- 构建系统:使用Android构建系统进行项目编译和打包
- 调试工具:使用grep、find等工具进行代码搜索和问题排查
- 自动化:编写脚本自动化构建和部署流程
- 环境管理:正确设置开发环境和工具链
13.2 最佳实践
- 定期提交代码,保持版本历史的清晰
- 使用有意义的分支名和提交信息
- 在构建前清理环境,确保构建的一致性
- 使用并行编译提高构建效率
- 保存构建日志用于问题排查
- 定期备份重要的构建产物
通过掌握这些命令和技巧,开发者可以更高效地进行嵌入式Linux项目的开发和维护工作。